[2025-10-18 12:10:35] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 12:10:35] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 12:10:35] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 12:10:35] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-18 12:10:35] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 12:10:35] DEBUG SESSION STATUS: 2 [2025-10-18 12:10:35] Negocio en sesión: 78.216.219-5 [2025-10-18 12:10:35] Nombre: SGB-ERP SpA [2025-10-18 12:10:35] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 12:10:35] Conexión exitosa a la base de datos [2025-10-18 12:10:35] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 12:10:35] Buscando producto con código/nombre: bebidas [2025-10-18 12:10:35] DEBUG: Código recibido: 'bebidas' (longitud: 7) [2025-10-18 12:10:35] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 12:10:35] No se encontró producto_id para el código exacto 'bebidas'. Intentando búsqueda parcial... [2025-10-18 12:10:35] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 12:10:35] Códigos parciales encontrados: 0 [2025-10-18 12:10:35] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 12:10:35] Productos encontrados por nombre: 2 [2025-10-18 12:10:35] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"196.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 12:10:35] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 12:10:35] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:10:35] Códigos encontrados para ID 18: 3 [2025-10-18 12:10:35] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 12:10:35] Códigos con stock disponible: 2 [2025-10-18 12:10:35] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 12:10:35] Stock total calculado para ID 18: 196 [2025-10-18 12:10:35] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 12:10:35] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 12:10:35] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 12:10:35] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":196,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"96.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":196,"stock_disponible":true} [2025-10-18 12:10:35] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2550.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 12:10:35] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 12:10:35] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:10:35] Códigos encontrados para ID 21: 2 [2025-10-18 12:10:35] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 12:10:35] Códigos con stock disponible: 2 [2025-10-18 12:10:35] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 12:10:35] Stock total calculado para ID 21: 150 [2025-10-18 12:10:35] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 12:10:35] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 12:10:35] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 12:10:35] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2550.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2550.00","stock_texto":150,"stock_disponible":true} [2025-10-18 12:10:35] Se encontraron 2 resultados en total. [2025-10-18 12:10:35] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 12:11:33] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 12:11:33] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 12:11:33] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 12:11:33] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-18 12:11:33] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 12:11:33] DEBUG SESSION STATUS: 2 [2025-10-18 12:11:33] Negocio en sesión: 78.216.219-5 [2025-10-18 12:11:33] Nombre: SGB-ERP SpA [2025-10-18 12:11:33] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 12:11:33] Conexión exitosa a la base de datos [2025-10-18 12:11:33] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 12:11:33] Buscando producto con código/nombre: bebidas [2025-10-18 12:11:33] DEBUG: Código recibido: 'bebidas' (longitud: 7) [2025-10-18 12:11:33] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 12:11:33] No se encontró producto_id para el código exacto 'bebidas'. Intentando búsqueda parcial... [2025-10-18 12:11:33] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 12:11:33] Códigos parciales encontrados: 0 [2025-10-18 12:11:33] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 12:11:33] Productos encontrados por nombre: 2 [2025-10-18 12:11:33] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"196.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 12:11:33] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 12:11:33] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:11:33] Códigos encontrados para ID 18: 3 [2025-10-18 12:11:33] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 12:11:33] Códigos con stock disponible: 2 [2025-10-18 12:11:33] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 12:11:33] Stock total calculado para ID 18: 196 [2025-10-18 12:11:33] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 12:11:33] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 12:11:33] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 12:11:33] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":196,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"96.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":196,"stock_disponible":true} [2025-10-18 12:11:33] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2550.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 12:11:33] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 12:11:33] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:11:33] Códigos encontrados para ID 21: 2 [2025-10-18 12:11:33] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 12:11:33] Códigos con stock disponible: 2 [2025-10-18 12:11:33] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 12:11:33] Stock total calculado para ID 21: 150 [2025-10-18 12:11:33] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 12:11:33] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 12:11:33] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 12:11:33] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2550.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2550.00","stock_texto":150,"stock_disponible":true} [2025-10-18 12:11:33] Se encontraron 2 resultados en total. [2025-10-18 12:11:33] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 12:11:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 12:11:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 12:11:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 12:11:45] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-18 12:11:45] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 12:11:45] DEBUG SESSION STATUS: 2 [2025-10-18 12:11:45] Negocio en sesión: 78.216.219-5 [2025-10-18 12:11:45] Nombre: SGB-ERP SpA [2025-10-18 12:11:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 12:11:45] Conexión exitosa a la base de datos [2025-10-18 12:11:45] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 12:11:45] Buscando producto con código/nombre: bebidas [2025-10-18 12:11:45] DEBUG: Código recibido: 'bebidas' (longitud: 7) [2025-10-18 12:11:45] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 12:11:45] No se encontró producto_id para el código exacto 'bebidas'. Intentando búsqueda parcial... [2025-10-18 12:11:45] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 12:11:45] Códigos parciales encontrados: 0 [2025-10-18 12:11:45] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 12:11:45] Productos encontrados por nombre: 2 [2025-10-18 12:11:45] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"196.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 12:11:45] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 12:11:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:11:45] Códigos encontrados para ID 18: 3 [2025-10-18 12:11:45] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 12:11:45] Códigos con stock disponible: 2 [2025-10-18 12:11:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 12:11:45] Stock total calculado para ID 18: 196 [2025-10-18 12:11:45] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 12:11:45] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 12:11:45] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 12:11:45] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":196,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"96.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":196,"stock_disponible":true} [2025-10-18 12:11:45] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2550.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 12:11:45] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 12:11:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:11:45] Códigos encontrados para ID 21: 2 [2025-10-18 12:11:45] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 12:11:45] Códigos con stock disponible: 2 [2025-10-18 12:11:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 12:11:45] Stock total calculado para ID 21: 150 [2025-10-18 12:11:45] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 12:11:45] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 12:11:45] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 12:11:45] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2550.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2550.00","stock_texto":150,"stock_disponible":true} [2025-10-18 12:11:45] Se encontraron 2 resultados en total. [2025-10-18 12:11:45] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 12:12:24] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 12:12:24] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 12:12:24] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 12:12:24] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 12:12:24] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 12:12:24] DEBUG SESSION STATUS: 2 [2025-10-18 12:12:24] Negocio en sesión: 78.216.219-5 [2025-10-18 12:12:24] Nombre: SGB-ERP SpA [2025-10-18 12:12:24] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 12:12:24] Conexión exitosa a la base de datos [2025-10-18 12:12:24] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 12:12:24] Buscando producto con código/nombre: pep [2025-10-18 12:12:24] DEBUG: Código recibido: 'pep' (longitud: 3) [2025-10-18 12:12:24] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 12:12:24] No se encontró producto_id para el código exacto 'pep'. Intentando búsqueda parcial... [2025-10-18 12:12:24] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 12:12:24] Códigos parciales encontrados: 0 [2025-10-18 12:12:24] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 12:12:24] Productos encontrados por nombre: 1 [2025-10-18 12:12:24] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 12:12:24] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 12:12:24] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:12:24] Códigos encontrados para ID 21: 2 [2025-10-18 12:12:24] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 12:12:24] Códigos con stock disponible: 2 [2025-10-18 12:12:24] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 12:12:24] Stock total calculado para ID 21: 150 [2025-10-18 12:12:24] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 12:12:24] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 12:12:24] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 12:12:24] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 12:12:24] Se encontraron 1 resultados en total. [2025-10-18 12:12:24] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-18 12:12:34] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 12:12:34] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 12:12:34] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 12:12:34] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 12:12:34] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 12:12:34] DEBUG SESSION STATUS: 2 [2025-10-18 12:12:34] Negocio en sesión: 78.216.219-5 [2025-10-18 12:12:34] Nombre: SGB-ERP SpA [2025-10-18 12:12:34] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 12:12:34] Conexión exitosa a la base de datos [2025-10-18 12:12:34] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 12:12:34] Buscando producto con código/nombre: pepsi [2025-10-18 12:12:34] DEBUG: Código recibido: 'pepsi' (longitud: 5) [2025-10-18 12:12:34] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 12:12:34] No se encontró producto_id para el código exacto 'pepsi'. Intentando búsqueda parcial... [2025-10-18 12:12:34] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 12:12:34] Códigos parciales encontrados: 0 [2025-10-18 12:12:34] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 12:12:34] Productos encontrados por nombre: 1 [2025-10-18 12:12:34] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 12:12:34] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 12:12:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:12:34] Códigos encontrados para ID 21: 2 [2025-10-18 12:12:34] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 12:12:34] Códigos con stock disponible: 2 [2025-10-18 12:12:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 12:12:34] Stock total calculado para ID 21: 150 [2025-10-18 12:12:34] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 12:12:34] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 12:12:34] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 12:12:34] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 12:12:34] Se encontraron 1 resultados en total. [2025-10-18 12:12:34] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-18 12:12:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 12:12:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 12:12:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 12:12:41] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 12:12:41] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 12:12:41] DEBUG SESSION STATUS: 2 [2025-10-18 12:12:41] Negocio en sesión: 78.216.219-5 [2025-10-18 12:12:41] Nombre: SGB-ERP SpA [2025-10-18 12:12:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 12:12:41] Conexión exitosa a la base de datos [2025-10-18 12:12:41] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 12:12:41] Buscando producto con código/nombre: bebidas [2025-10-18 12:12:41] DEBUG: Código recibido: 'bebidas' (longitud: 7) [2025-10-18 12:12:41] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 12:12:41] No se encontró producto_id para el código exacto 'bebidas'. Intentando búsqueda parcial... [2025-10-18 12:12:41] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 12:12:41] Códigos parciales encontrados: 0 [2025-10-18 12:12:41] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 12:12:41] Productos encontrados por nombre: 2 [2025-10-18 12:12:41] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"196.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 12:12:41] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 12:12:41] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:12:41] Códigos encontrados para ID 18: 3 [2025-10-18 12:12:41] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 12:12:41] Códigos con stock disponible: 2 [2025-10-18 12:12:41] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 12:12:41] Stock total calculado para ID 18: 196 [2025-10-18 12:12:41] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 12:12:41] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 12:12:41] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 12:12:41] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":196,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"96.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":196,"stock_disponible":true} [2025-10-18 12:12:41] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 12:12:41] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 12:12:41] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:12:41] Códigos encontrados para ID 21: 2 [2025-10-18 12:12:41] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 12:12:41] Códigos con stock disponible: 2 [2025-10-18 12:12:41] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 12:12:41] Stock total calculado para ID 21: 150 [2025-10-18 12:12:41] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 12:12:41] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 12:12:41] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 12:12:41] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 12:12:41] Se encontraron 2 resultados en total. [2025-10-18 12:12:41] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 12:44:54] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 12:44:54] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 12:44:54] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 12:44:54] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 12:44:54] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 12:44:54] DEBUG SESSION STATUS: 2 [2025-10-18 12:44:54] Negocio en sesión: 78.216.219-5 [2025-10-18 12:44:54] Nombre: SGB-ERP SpA [2025-10-18 12:44:54] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 12:44:54] Conexión exitosa a la base de datos [2025-10-18 12:44:54] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 12:44:54] Buscando producto con código/nombre: bebida [2025-10-18 12:44:54] DEBUG: Código recibido: 'bebida' (longitud: 6) [2025-10-18 12:44:54] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 12:44:54] No se encontró producto_id para el código exacto 'bebida'. Intentando búsqueda parcial... [2025-10-18 12:44:54] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 12:44:54] Códigos parciales encontrados: 0 [2025-10-18 12:44:54] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 12:44:54] Productos encontrados por nombre: 2 [2025-10-18 12:44:54] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"196.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 12:44:54] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 12:44:54] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:44:54] Códigos encontrados para ID 18: 3 [2025-10-18 12:44:54] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 12:44:54] Códigos con stock disponible: 2 [2025-10-18 12:44:54] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 12:44:54] Stock total calculado para ID 18: 196 [2025-10-18 12:44:54] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 12:44:54] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 12:44:54] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 12:44:54] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":196,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"96.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":196,"stock_disponible":true} [2025-10-18 12:44:54] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 12:44:54] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 12:44:54] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 12:44:54] Códigos encontrados para ID 21: 2 [2025-10-18 12:44:54] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 12:44:54] Códigos con stock disponible: 2 [2025-10-18 12:44:54] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 12:44:54] Stock total calculado para ID 21: 150 [2025-10-18 12:44:54] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 12:44:54] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 12:44:54] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 12:44:54] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 12:44:54] Se encontraron 2 resultados en total. [2025-10-18 12:44:54] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 13:58:42] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 13:58:42] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 13:58:42] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 13:58:42] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 13:58:42] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 13:58:42] DEBUG SESSION STATUS: 2 [2025-10-18 13:58:42] Negocio en sesión: 78.216.219-5 [2025-10-18 13:58:42] Nombre: SGB-ERP SpA [2025-10-18 13:58:42] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 13:58:42] Conexión exitosa a la base de datos [2025-10-18 13:58:42] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 13:58:42] Buscando producto con código/nombre: pepsi [2025-10-18 13:58:42] DEBUG: Código recibido: 'pepsi' (longitud: 5) [2025-10-18 13:58:42] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 13:58:42] No se encontró producto_id para el código exacto 'pepsi'. Intentando búsqueda parcial... [2025-10-18 13:58:42] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 13:58:42] Códigos parciales encontrados: 0 [2025-10-18 13:58:42] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 13:58:42] Productos encontrados por nombre: 1 [2025-10-18 13:58:42] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 13:58:42] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 13:58:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 13:58:42] Códigos encontrados para ID 21: 2 [2025-10-18 13:58:42] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 13:58:42] Códigos con stock disponible: 2 [2025-10-18 13:58:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 13:58:42] Stock total calculado para ID 21: 150 [2025-10-18 13:58:42] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 13:58:42] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 13:58:42] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 13:58:42] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 13:58:42] Se encontraron 1 resultados en total. [2025-10-18 13:58:42] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-18 13:59:08] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 13:59:08] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 13:59:08] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 13:59:08] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 13:59:08] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 13:59:08] DEBUG SESSION STATUS: 2 [2025-10-18 13:59:08] Negocio en sesión: 78.216.219-5 [2025-10-18 13:59:08] Nombre: SGB-ERP SpA [2025-10-18 13:59:08] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 13:59:08] Conexión exitosa a la base de datos [2025-10-18 13:59:08] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 13:59:08] Buscando producto con código/nombre: pepsi [2025-10-18 13:59:08] DEBUG: Código recibido: 'pepsi' (longitud: 5) [2025-10-18 13:59:08] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 13:59:08] No se encontró producto_id para el código exacto 'pepsi'. Intentando búsqueda parcial... [2025-10-18 13:59:08] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 13:59:08] Códigos parciales encontrados: 0 [2025-10-18 13:59:08] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 13:59:08] Productos encontrados por nombre: 1 [2025-10-18 13:59:08] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 13:59:08] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 13:59:08] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 13:59:08] Códigos encontrados para ID 21: 2 [2025-10-18 13:59:08] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 13:59:08] Códigos con stock disponible: 2 [2025-10-18 13:59:08] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 13:59:08] Stock total calculado para ID 21: 150 [2025-10-18 13:59:08] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 13:59:08] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 13:59:08] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 13:59:08] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 13:59:08] Se encontraron 1 resultados en total. [2025-10-18 13:59:08] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-18 13:59:13] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 13:59:13] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 13:59:13] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 13:59:13] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 13:59:13] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 13:59:13] DEBUG SESSION STATUS: 2 [2025-10-18 13:59:13] Negocio en sesión: 78.216.219-5 [2025-10-18 13:59:13] Nombre: SGB-ERP SpA [2025-10-18 13:59:13] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 13:59:13] Conexión exitosa a la base de datos [2025-10-18 13:59:13] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 13:59:13] Buscando producto con código/nombre: bebidas [2025-10-18 13:59:13] DEBUG: Código recibido: 'bebidas' (longitud: 7) [2025-10-18 13:59:13] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 13:59:13] No se encontró producto_id para el código exacto 'bebidas'. Intentando búsqueda parcial... [2025-10-18 13:59:13] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 13:59:13] Códigos parciales encontrados: 0 [2025-10-18 13:59:13] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 13:59:13] Productos encontrados por nombre: 2 [2025-10-18 13:59:13] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"196.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 13:59:13] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 13:59:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 13:59:13] Códigos encontrados para ID 18: 3 [2025-10-18 13:59:13] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 13:59:13] Códigos con stock disponible: 2 [2025-10-18 13:59:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 13:59:13] Stock total calculado para ID 18: 196 [2025-10-18 13:59:13] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 13:59:13] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 13:59:13] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 13:59:13] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":196,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"96.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":196,"stock_disponible":true} [2025-10-18 13:59:13] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 13:59:13] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 13:59:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 13:59:13] Códigos encontrados para ID 21: 2 [2025-10-18 13:59:13] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 13:59:13] Códigos con stock disponible: 2 [2025-10-18 13:59:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 13:59:13] Stock total calculado para ID 21: 150 [2025-10-18 13:59:13] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 13:59:13] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 13:59:13] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 13:59:13] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 13:59:13] Se encontraron 2 resultados en total. [2025-10-18 13:59:13] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 14:02:37] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 14:02:37] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 14:02:37] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 14:02:37] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 14:02:37] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 14:02:37] DEBUG SESSION STATUS: 2 [2025-10-18 14:02:37] Negocio en sesión: 78.216.219-5 [2025-10-18 14:02:37] Nombre: SGB-ERP SpA [2025-10-18 14:02:37] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 14:02:37] Conexión exitosa a la base de datos [2025-10-18 14:02:37] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 14:02:37] Buscando producto con código/nombre: pepso [2025-10-18 14:02:37] DEBUG: Código recibido: 'pepso' (longitud: 5) [2025-10-18 14:02:37] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 14:02:37] No se encontró producto_id para el código exacto 'pepso'. Intentando búsqueda parcial... [2025-10-18 14:02:37] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 14:02:37] Códigos parciales encontrados: 0 [2025-10-18 14:02:37] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 14:02:37] Productos encontrados por nombre: 0 [2025-10-18 14:02:37] No se encontró ningún producto con stock por ningún método [2025-10-18 14:02:37] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-10-18 14:02:43] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 14:02:43] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 14:02:43] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 14:02:43] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 14:02:43] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 14:02:43] DEBUG SESSION STATUS: 2 [2025-10-18 14:02:43] Negocio en sesión: 78.216.219-5 [2025-10-18 14:02:43] Nombre: SGB-ERP SpA [2025-10-18 14:02:43] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 14:02:43] Conexión exitosa a la base de datos [2025-10-18 14:02:43] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 14:02:43] Buscando producto con código/nombre: bebidas [2025-10-18 14:02:43] DEBUG: Código recibido: 'bebidas' (longitud: 7) [2025-10-18 14:02:43] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 14:02:43] No se encontró producto_id para el código exacto 'bebidas'. Intentando búsqueda parcial... [2025-10-18 14:02:43] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 14:02:43] Códigos parciales encontrados: 0 [2025-10-18 14:02:43] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 14:02:43] Productos encontrados por nombre: 2 [2025-10-18 14:02:43] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"196.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 14:02:43] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 14:02:43] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 14:02:43] Códigos encontrados para ID 18: 3 [2025-10-18 14:02:43] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 14:02:43] Códigos con stock disponible: 2 [2025-10-18 14:02:43] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 14:02:43] Stock total calculado para ID 18: 196 [2025-10-18 14:02:43] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 14:02:43] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 14:02:43] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 14:02:43] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":196,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"96.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":196,"stock_disponible":true} [2025-10-18 14:02:43] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 14:02:43] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 14:02:43] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 14:02:43] Códigos encontrados para ID 21: 2 [2025-10-18 14:02:43] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 14:02:43] Códigos con stock disponible: 2 [2025-10-18 14:02:43] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 14:02:43] Stock total calculado para ID 21: 150 [2025-10-18 14:02:43] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 14:02:43] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 14:02:43] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 14:02:43] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 14:02:43] Se encontraron 2 resultados en total. [2025-10-18 14:02:43] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 14:11:13] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 14:11:13] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 14:11:13] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 14:11:13] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 14:11:13] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 14:11:13] DEBUG SESSION STATUS: 2 [2025-10-18 14:11:13] Negocio en sesión: 78.216.219-5 [2025-10-18 14:11:13] Nombre: SGB-ERP SpA [2025-10-18 14:11:13] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 14:11:13] Conexión exitosa a la base de datos [2025-10-18 14:11:13] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 14:11:13] Buscando producto con código/nombre: pepsi [2025-10-18 14:11:13] DEBUG: Código recibido: 'pepsi' (longitud: 5) [2025-10-18 14:11:13] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 14:11:13] No se encontró producto_id para el código exacto 'pepsi'. Intentando búsqueda parcial... [2025-10-18 14:11:13] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 14:11:13] Códigos parciales encontrados: 0 [2025-10-18 14:11:13] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 14:11:13] Productos encontrados por nombre: 1 [2025-10-18 14:11:13] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 14:11:13] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 14:11:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 14:11:13] Códigos encontrados para ID 21: 2 [2025-10-18 14:11:13] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 14:11:13] Códigos con stock disponible: 2 [2025-10-18 14:11:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 14:11:13] Stock total calculado para ID 21: 150 [2025-10-18 14:11:13] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 14:11:13] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 14:11:13] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 14:11:13] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":150,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":150,"stock_disponible":true} [2025-10-18 14:11:13] Se encontraron 1 resultados en total. [2025-10-18 14:11:13] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-18 14:16:57] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 14:16:57] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 14:16:57] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 14:16:57] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 14:16:57] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 14:16:57] DEBUG SESSION STATUS: 2 [2025-10-18 14:16:57] Negocio en sesión: 78.216.219-5 [2025-10-18 14:16:57] Nombre: SGB-ERP SpA [2025-10-18 14:16:57] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 14:16:57] Conexión exitosa a la base de datos [2025-10-18 14:16:57] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 14:16:57] Buscando producto con código/nombre: coca [2025-10-18 14:16:57] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-10-18 14:16:57] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 14:16:57] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-10-18 14:16:57] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 14:16:57] Códigos parciales encontrados: 1 [2025-10-18 14:16:57] Procesando código parcial: COCAL2 (ID: 18) [2025-10-18 14:16:57] Producto ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 14:16:57] Producto con código parcial sin stock suficiente (ID: 18), omitiendo [2025-10-18 14:16:57] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 14:16:57] Productos encontrados por nombre: 1 [2025-10-18 14:16:57] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"196.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 14:16:57] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 14:16:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 14:16:57] Códigos encontrados para ID 18: 3 [2025-10-18 14:16:57] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 14:16:57] Códigos con stock disponible: 2 [2025-10-18 14:16:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 14:16:57] Stock total calculado para ID 18: 196 [2025-10-18 14:16:57] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 14:16:57] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 14:16:57] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 14:16:57] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":196,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"96.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"96.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":196,"stock_disponible":true} [2025-10-18 14:16:57] Se encontraron 1 resultados en total. [2025-10-18 14:16:57] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-18 14:17:19] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 14:17:19] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 14:17:19] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 14:17:19] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 14:17:19] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 14:17:19] DEBUG SESSION STATUS: 2 [2025-10-18 14:17:19] Negocio en sesión: 78.216.219-5 [2025-10-18 14:17:19] Nombre: SGB-ERP SpA [2025-10-18 14:17:19] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 14:17:19] Conexión exitosa a la base de datos [2025-10-18 14:17:19] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 14:17:19] Buscando producto con código/nombre: pepso [2025-10-18 14:17:19] DEBUG: Código recibido: 'pepso' (longitud: 5) [2025-10-18 14:17:19] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 14:17:19] No se encontró producto_id para el código exacto 'pepso'. Intentando búsqueda parcial... [2025-10-18 14:17:19] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 14:17:19] Códigos parciales encontrados: 0 [2025-10-18 14:17:19] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 14:17:19] Productos encontrados por nombre: 0 [2025-10-18 14:17:19] No se encontró ningún producto con stock por ningún método [2025-10-18 14:17:19] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-10-18 14:17:22] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 14:17:22] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 14:17:22] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 14:17:22] DEBUG SESSION: {"last_regeneration":1760797959,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-10-18 14:17:22] DEBUG SESSION ID: 5abbbpg05sdkqsa42gd0do414o [2025-10-18 14:17:22] DEBUG SESSION STATUS: 2 [2025-10-18 14:17:22] Negocio en sesión: 78.216.219-5 [2025-10-18 14:17:22] Nombre: SGB-ERP SpA [2025-10-18 14:17:22] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 14:17:22] Conexión exitosa a la base de datos [2025-10-18 14:17:22] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 14:17:22] Buscando producto con código/nombre: pepsi [2025-10-18 14:17:22] DEBUG: Código recibido: 'pepsi' (longitud: 5) [2025-10-18 14:17:22] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 14:17:22] No se encontró producto_id para el código exacto 'pepsi'. Intentando búsqueda parcial... [2025-10-18 14:17:22] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 14:17:22] Códigos parciales encontrados: 0 [2025-10-18 14:17:22] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 14:17:22] Productos encontrados por nombre: 1 [2025-10-18 14:17:22] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"149.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 14:17:22] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 14:17:22] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 14:17:22] Códigos encontrados para ID 21: 2 [2025-10-18 14:17:22] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 14:17:22] Códigos con stock disponible: 2 [2025-10-18 14:17:22] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 14:17:22] Stock total calculado para ID 21: 149 [2025-10-18 14:17:22] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 14:17:22] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 14:17:22] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 14:17:22] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":149,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"99.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":149,"stock_disponible":true} [2025-10-18 14:17:22] Se encontraron 1 resultados en total. [2025-10-18 14:17:22] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-18 20:43:42] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 20:43:42] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 20:43:42] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 20:43:42] DEBUG SESSION: {"last_regeneration":1760823284,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php"}} [2025-10-18 20:43:42] DEBUG SESSION ID: UvKfouaLzTsuvKdrjPKFl0J4MnAAnP,1fh7j8DDFGqdojtoC [2025-10-18 20:43:42] DEBUG SESSION STATUS: 2 [2025-10-18 20:43:42] Negocio en sesión: 78.216.219-5 [2025-10-18 20:43:42] Nombre: SGB-ERP SpA [2025-10-18 20:43:42] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 20:43:42] Conexión exitosa a la base de datos [2025-10-18 20:43:42] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 20:43:42] Buscando producto con código/nombre: Bebi [2025-10-18 20:43:42] DEBUG: Código recibido: 'Bebi' (longitud: 4) [2025-10-18 20:43:43] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 20:43:43] No se encontró producto_id para el código exacto 'Bebi'. Intentando búsqueda parcial... [2025-10-18 20:43:43] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 20:43:43] Códigos parciales encontrados: 0 [2025-10-18 20:43:43] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 20:43:43] Productos encontrados por nombre: 2 [2025-10-18 20:43:43] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"192.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 20:43:43] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 20:43:43] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:43:43] Códigos encontrados para ID 18: 3 [2025-10-18 20:43:43] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 20:43:43] Códigos con stock disponible: 2 [2025-10-18 20:43:43] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 20:43:43] Stock total calculado para ID 18: 192 [2025-10-18 20:43:43] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 20:43:43] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 20:43:43] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 20:43:43] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":192,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"92.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":192,"stock_disponible":true} [2025-10-18 20:43:43] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"148.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 20:43:43] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 20:43:43] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:43:43] Códigos encontrados para ID 21: 2 [2025-10-18 20:43:43] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 20:43:43] Códigos con stock disponible: 2 [2025-10-18 20:43:43] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 20:43:43] Stock total calculado para ID 21: 148 [2025-10-18 20:43:43] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 20:43:43] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 20:43:43] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 20:43:43] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":148,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"98.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":148,"stock_disponible":true} [2025-10-18 20:43:43] Se encontraron 2 resultados en total. [2025-10-18 20:43:43] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 20:44:21] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 20:44:21] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 20:44:21] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 20:44:21] DEBUG SESSION: {"last_regeneration":1760823284,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php"}} [2025-10-18 20:44:21] DEBUG SESSION ID: UvKfouaLzTsuvKdrjPKFl0J4MnAAnP,1fh7j8DDFGqdojtoC [2025-10-18 20:44:21] DEBUG SESSION STATUS: 2 [2025-10-18 20:44:21] Negocio en sesión: 78.216.219-5 [2025-10-18 20:44:21] Nombre: SGB-ERP SpA [2025-10-18 20:44:21] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 20:44:21] Conexión exitosa a la base de datos [2025-10-18 20:44:21] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 20:44:21] Buscando producto con código/nombre: Bebid [2025-10-18 20:44:21] DEBUG: Código recibido: 'Bebid' (longitud: 5) [2025-10-18 20:44:21] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 20:44:21] No se encontró producto_id para el código exacto 'Bebid'. Intentando búsqueda parcial... [2025-10-18 20:44:21] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 20:44:21] Códigos parciales encontrados: 0 [2025-10-18 20:44:21] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 20:44:21] Productos encontrados por nombre: 2 [2025-10-18 20:44:21] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"192.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 20:44:21] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 20:44:21] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:44:21] Códigos encontrados para ID 18: 3 [2025-10-18 20:44:21] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 20:44:21] Códigos con stock disponible: 2 [2025-10-18 20:44:21] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 20:44:21] Stock total calculado para ID 18: 192 [2025-10-18 20:44:21] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 20:44:21] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 20:44:21] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 20:44:21] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":192,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"92.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":192,"stock_disponible":true} [2025-10-18 20:44:21] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"148.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 20:44:21] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 20:44:21] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:44:21] Códigos encontrados para ID 21: 2 [2025-10-18 20:44:21] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 20:44:21] Códigos con stock disponible: 2 [2025-10-18 20:44:21] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 20:44:21] Stock total calculado para ID 21: 148 [2025-10-18 20:44:21] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 20:44:21] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 20:44:21] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 20:44:21] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":148,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"98.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":148,"stock_disponible":true} [2025-10-18 20:44:21] Se encontraron 2 resultados en total. [2025-10-18 20:44:21] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-18 20:49:12] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 20:49:12] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 20:49:12] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 20:49:12] DEBUG SESSION: {"last_regeneration":1760823284,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php"}} [2025-10-18 20:49:12] DEBUG SESSION ID: UvKfouaLzTsuvKdrjPKFl0J4MnAAnP,1fh7j8DDFGqdojtoC [2025-10-18 20:49:12] DEBUG SESSION STATUS: 2 [2025-10-18 20:49:12] Negocio en sesión: 78.216.219-5 [2025-10-18 20:49:12] Nombre: SGB-ERP SpA [2025-10-18 20:49:12] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 20:49:12] Conexión exitosa a la base de datos [2025-10-18 20:49:12] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 20:49:12] Buscando producto con código/nombre: Ha [2025-10-18 20:49:12] DEBUG: Código recibido: 'Ha' (longitud: 2) [2025-10-18 20:49:12] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 20:49:12] No se encontró producto_id para el código exacto 'Ha'. Intentando búsqueda parcial... [2025-10-18 20:49:12] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 20:49:12] Códigos parciales encontrados: 0 [2025-10-18 20:49:12] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 20:49:12] Productos encontrados por nombre: 4 [2025-10-18 20:49:12] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"192.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 20:49:12] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 20:49:12] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:49:12] Códigos encontrados para ID 18: 3 [2025-10-18 20:49:12] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 20:49:12] Códigos con stock disponible: 2 [2025-10-18 20:49:12] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 20:49:12] Stock total calculado para ID 18: 192 [2025-10-18 20:49:12] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 20:49:12] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 20:49:12] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 20:49:12] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":192,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"92.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":192,"stock_disponible":true} [2025-10-18 20:49:12] Procesando producto encontrado por nombre: {"id":19,"codigo":"QUE-019","nombre":"QUESO CHANCO","precio_venta":"6891.00","precio_final_publico":"8200.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Queso chanco","categoria_nombre":"L\u00e1cteos","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-10-18 20:49:12] Usando lote específico detectado: ninguno para producto ID: 19 [2025-10-18 20:49:12] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:49:12] Códigos encontrados para ID 19: 1 [2025-10-18 20:49:12] Detalle de códigos: [{"id":34,"codigo":"QUE-019","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":"2025-11-08"}] [2025-10-18 20:49:12] Códigos con stock disponible: 1 [2025-10-18 20:49:12] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-18 20:49:12] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-10-18 20:49:12] Producto especial por nombre con stock disponible: 10 [2025-10-18 20:49:12] Producto ESPECIAL ID: 19 - Tiene lotes: SÍ (cantidad: 1) [2025-10-18 20:49:12] Usando primer código disponible en orden FIFO para ID 19: {"id":34,"codigo":"QUE-019","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":"2025-11-08"} [2025-10-18 20:49:12] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-10-18 20:49:12] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-10-18 20:49:12] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-10-18 20:49:12] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-10-18 20:49:12] Producto por nombre agregado a resultados (ID: 19) [2025-10-18 20:49:12] Datos finales del producto: {"id":19,"codigo":"QUE-019","nombre":"QUESO CHANCO","precio_venta":"6891.00","precio_final_publico":"8200.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Queso chanco","categoria_nombre":"L\u00e1cteos","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2025-11-08","es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":34,"codigo":"QUE-019","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":"2025-11-08"}],"precio":"6891.00","stock_texto":"10 kg","stock_disponible":true} [2025-10-18 20:49:12] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"148.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 20:49:12] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 20:49:12] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:49:12] Códigos encontrados para ID 21: 2 [2025-10-18 20:49:12] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 20:49:12] Códigos con stock disponible: 2 [2025-10-18 20:49:12] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 20:49:12] Stock total calculado para ID 21: 148 [2025-10-18 20:49:12] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 20:49:12] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 20:49:12] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 20:49:12] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":148,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"98.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":148,"stock_disponible":true} [2025-10-18 20:49:12] Procesando producto encontrado por nombre: {"id":22,"codigo":"PAN-022","nombre":"PAN HALLULLA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Ideal","tipo_nombre":"Aceite maravilla","categoria_nombre":"Abarrotes","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-10-18 20:49:12] Usando lote específico detectado: ninguno para producto ID: 22 [2025-10-18 20:49:12] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:49:12] Códigos encontrados para ID 22: 1 [2025-10-18 20:49:12] Detalle de códigos: [{"id":39,"codigo":"PAN-022","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":"2025-10-31"}] [2025-10-18 20:49:12] Códigos con stock disponible: 1 [2025-10-18 20:49:12] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-18 20:49:12] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-18 20:49:12] Producto especial por nombre con stock disponible: 50 [2025-10-18 20:49:12] Producto ESPECIAL ID: 22 - Tiene lotes: SÍ (cantidad: 1) [2025-10-18 20:49:12] Usando primer código disponible en orden FIFO para ID 22: {"id":39,"codigo":"PAN-022","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 20:49:12] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-18 20:49:12] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-18 20:49:12] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-18 20:49:12] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-18 20:49:12] Producto por nombre agregado a resultados (ID: 22) [2025-10-18 20:49:12] Datos finales del producto: {"id":22,"codigo":"PAN-022","nombre":"PAN HALLULLA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Ideal","tipo_nombre":"Aceite maravilla","categoria_nombre":"Abarrotes","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":39,"codigo":"PAN-022","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":"2025-10-31"}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-18 20:49:12] Se encontraron 4 resultados en total. [2025-10-18 20:49:12] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-10-18 20:49:30] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 20:49:30] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 20:49:30] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 20:49:30] DEBUG SESSION: {"last_regeneration":1760823284,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php"}} [2025-10-18 20:49:30] DEBUG SESSION ID: UvKfouaLzTsuvKdrjPKFl0J4MnAAnP,1fh7j8DDFGqdojtoC [2025-10-18 20:49:30] DEBUG SESSION STATUS: 2 [2025-10-18 20:49:30] Negocio en sesión: 78.216.219-5 [2025-10-18 20:49:30] Nombre: SGB-ERP SpA [2025-10-18 20:49:30] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 20:49:30] Conexión exitosa a la base de datos [2025-10-18 20:49:30] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 20:49:30] Buscando producto con código/nombre: Hallulla [2025-10-18 20:49:30] DEBUG: Código recibido: 'Hallulla' (longitud: 8) [2025-10-18 20:49:30] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 20:49:30] No se encontró producto_id para el código exacto 'Hallulla'. Intentando búsqueda parcial... [2025-10-18 20:49:30] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 20:49:30] Códigos parciales encontrados: 0 [2025-10-18 20:49:30] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 20:49:30] Productos encontrados por nombre: 1 [2025-10-18 20:49:30] Procesando producto encontrado por nombre: {"id":22,"codigo":"PAN-022","nombre":"PAN HALLULLA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Ideal","tipo_nombre":"Aceite maravilla","categoria_nombre":"Abarrotes","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-10-18 20:49:30] Usando lote específico detectado: ninguno para producto ID: 22 [2025-10-18 20:49:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 20:49:30] Códigos encontrados para ID 22: 1 [2025-10-18 20:49:30] Detalle de códigos: [{"id":39,"codigo":"PAN-022","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":"2025-10-31"}] [2025-10-18 20:49:30] Códigos con stock disponible: 1 [2025-10-18 20:49:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-18 20:49:30] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-18 20:49:30] Producto especial por nombre con stock disponible: 50 [2025-10-18 20:49:30] Producto ESPECIAL ID: 22 - Tiene lotes: SÍ (cantidad: 1) [2025-10-18 20:49:30] Usando primer código disponible en orden FIFO para ID 22: {"id":39,"codigo":"PAN-022","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 20:49:30] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-18 20:49:30] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-18 20:49:30] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-18 20:49:30] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-18 20:49:30] Producto por nombre agregado a resultados (ID: 22) [2025-10-18 20:49:30] Datos finales del producto: {"id":22,"codigo":"PAN-022","nombre":"PAN HALLULLA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Ideal","tipo_nombre":"Aceite maravilla","categoria_nombre":"Abarrotes","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":39,"codigo":"PAN-022","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":"2025-10-31"}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-18 20:49:30] Se encontraron 1 resultados en total. [2025-10-18 20:49:30] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-18 22:53:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-18 22:53:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-18 22:53:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-18 22:53:45] DEBUG SESSION: {"last_regeneration":1760823284,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php"}} [2025-10-18 22:53:45] DEBUG SESSION ID: UvKfouaLzTsuvKdrjPKFl0J4MnAAnP,1fh7j8DDFGqdojtoC [2025-10-18 22:53:45] DEBUG SESSION STATUS: 2 [2025-10-18 22:53:45] Negocio en sesión: 78.216.219-5 [2025-10-18 22:53:45] Nombre: SGB-ERP SpA [2025-10-18 22:53:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-18 22:53:45] Conexión exitosa a la base de datos [2025-10-18 22:53:45] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-18 22:53:45] Buscando producto con código/nombre: Beb [2025-10-18 22:53:45] DEBUG: Código recibido: 'Beb' (longitud: 3) [2025-10-18 22:53:45] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-18 22:53:45] No se encontró producto_id para el código exacto 'Beb'. Intentando búsqueda parcial... [2025-10-18 22:53:45] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-18 22:53:45] Códigos parciales encontrados: 0 [2025-10-18 22:53:45] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-18 22:53:45] Productos encontrados por nombre: 2 [2025-10-18 22:53:45] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"192.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-18 22:53:45] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-18 22:53:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 22:53:45] Códigos encontrados para ID 18: 3 [2025-10-18 22:53:45] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-18 22:53:45] Códigos con stock disponible: 2 [2025-10-18 22:53:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-18 22:53:45] Stock total calculado para ID 18: 192 [2025-10-18 22:53:45] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-18 22:53:45] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"} [2025-10-18 22:53:45] Producto por nombre agregado a resultados (ID: 18) [2025-10-18 22:53:45] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":192,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"92.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":192,"stock_disponible":true} [2025-10-18 22:53:45] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"148.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-18 22:53:45] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-18 22:53:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-18 22:53:45] Códigos encontrados para ID 21: 2 [2025-10-18 22:53:45] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-18 22:53:45] Códigos con stock disponible: 2 [2025-10-18 22:53:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-18 22:53:45] Stock total calculado para ID 21: 148 [2025-10-18 22:53:45] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-18 22:53:45] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"} [2025-10-18 22:53:45] Producto por nombre agregado a resultados (ID: 21) [2025-10-18 22:53:45] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":148,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"98.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":148,"stock_disponible":true} [2025-10-18 22:53:45] Se encontraron 2 resultados en total. [2025-10-18 22:53:45] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-19 13:30:15] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-19 13:30:15] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-19 13:30:15] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-19 13:30:15] DEBUG SESSION: {"last_regeneration":1760888131,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-19 13:30:15] DEBUG SESSION ID: lmfirrli7t4pc17br4714dt95u [2025-10-19 13:30:15] DEBUG SESSION STATUS: 2 [2025-10-19 13:30:15] Negocio en sesión: 78.216.219-5 [2025-10-19 13:30:15] Nombre: SGB-ERP SpA [2025-10-19 13:30:15] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-19 13:30:15] Conexión exitosa a la base de datos [2025-10-19 13:30:15] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-19 13:30:15] Buscando producto con código/nombre: coca [2025-10-19 13:30:15] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-10-19 13:30:15] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-19 13:30:15] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-10-19 13:30:15] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-19 13:30:15] Códigos parciales encontrados: 1 [2025-10-19 13:30:15] Procesando código parcial: COCAL2 (ID: 18) [2025-10-19 13:30:15] Producto ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-19 13:30:15] Producto con código parcial sin stock suficiente (ID: 18), omitiendo [2025-10-19 13:30:15] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-19 13:30:15] Productos encontrados por nombre: 1 [2025-10-19 13:30:15] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"192.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-19 13:30:15] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-19 13:30:15] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-19 13:30:15] Códigos encontrados para ID 18: 3 [2025-10-19 13:30:15] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-19 13:30:15] Códigos con stock disponible: 2 [2025-10-19 13:30:15] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-19 13:30:15] Stock total calculado para ID 18: 192 [2025-10-19 13:30:15] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-19 13:30:15] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"} [2025-10-19 13:30:15] Producto por nombre agregado a resultados (ID: 18) [2025-10-19 13:30:15] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":192,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"92.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":192,"stock_disponible":true} [2025-10-19 13:30:15] Se encontraron 1 resultados en total. [2025-10-19 13:30:15] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-19 13:30:18] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-19 13:30:18] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-19 13:30:18] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-19 13:30:18] DEBUG SESSION: {"last_regeneration":1760888131,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-19 13:30:18] DEBUG SESSION ID: lmfirrli7t4pc17br4714dt95u [2025-10-19 13:30:18] DEBUG SESSION STATUS: 2 [2025-10-19 13:30:18] Negocio en sesión: 78.216.219-5 [2025-10-19 13:30:18] Nombre: SGB-ERP SpA [2025-10-19 13:30:18] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-19 13:30:18] Conexión exitosa a la base de datos [2025-10-19 13:30:18] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-19 13:30:18] Buscando producto con código/nombre: * [2025-10-19 13:30:18] DEBUG: Código recibido: '*' (longitud: 1) [2025-10-19 13:30:18] Solicitud para mostrar todos los productos [2025-10-19 13:30:18] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-10-19 13:30:18] Productos encontrados: 6 [2025-10-19 13:30:18] Producto 0: COCACOLA 2LT DESECHABLE - Códigos adicionales: 17606528721072||manual;;COCAL2|Código alternativo para Coca-Cola|manual [2025-10-19 13:30:18] Producto 1: EMBUDO - Códigos adicionales: NULL [2025-10-19 13:30:18] Producto 2: PAN EMBASADO - Códigos adicionales: NULL [2025-10-19 13:30:18] Producto 3: PAN HALLULLA - Códigos adicionales: NULL [2025-10-19 13:30:18] Producto 4: PEPSI 3LT DESECHABLE - Códigos adicionales: 67890||diferente [2025-10-19 13:30:18] Producto 5: QUESO CHANCO - Códigos adicionales: NULL [2025-10-19 13:30:18] Producto agregado a resultados (ID: 18): COCACOLA 2LT DESECHABLE [2025-10-19 13:30:18] Producto agregado a resultados (ID: 20): EMBUDO [2025-10-19 13:30:18] Producto agregado a resultados (ID: 23): PAN EMBASADO [2025-10-19 13:30:18] Producto agregado a resultados (ID: 22): PAN HALLULLA [2025-10-19 13:30:18] Producto agregado a resultados (ID: 21): PEPSI 3LT DESECHABLE [2025-10-19 13:30:18] Producto agregado a resultados (ID: 19): QUESO CHANCO [2025-10-19 13:30:18] Total de productos únicos encontrados: 6 [2025-10-19 17:23:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-19 17:23:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-19 17:23:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-19 17:23:45] DEBUG SESSION: {"last_regeneration":1760903830,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-19 17:23:45] DEBUG SESSION ID: mtu6hmof48bur6tn0ntp6rvdav [2025-10-19 17:23:45] DEBUG SESSION STATUS: 2 [2025-10-19 17:23:45] Negocio en sesión: 78.216.219-5 [2025-10-19 17:23:45] Nombre: SGB-ERP SpA [2025-10-19 17:23:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-19 17:23:45] Conexión exitosa a la base de datos [2025-10-19 17:23:45] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-19 17:23:45] Buscando producto con código/nombre: bebidas [2025-10-19 17:23:45] DEBUG: Código recibido: 'bebidas' (longitud: 7) [2025-10-19 17:23:45] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-19 17:23:45] No se encontró producto_id para el código exacto 'bebidas'. Intentando búsqueda parcial... [2025-10-19 17:23:45] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-19 17:23:45] Códigos parciales encontrados: 0 [2025-10-19 17:23:45] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-19 17:23:45] Productos encontrados por nombre: 2 [2025-10-19 17:23:45] Procesando producto encontrado por nombre: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"192.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual"} [2025-10-19 17:23:45] Usando lote específico detectado: ninguno para producto ID: 18 [2025-10-19 17:23:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-19 17:23:45] Códigos encontrados para ID 18: 3 [2025-10-19 17:23:45] Detalle de códigos: [{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"},{"id":38,"codigo":"COCAL2","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-10-19 17:23:45] Códigos con stock disponible: 2 [2025-10-19 17:23:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-19 17:23:45] Stock total calculado para ID 18: 192 [2025-10-19 17:23:45] Producto NORMAL ID: 18 - Tiene lotes: SÍ (cantidad: 3) [2025-10-19 17:23:45] Usando primer código disponible en orden FIFO para ID 18: {"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"} [2025-10-19 17:23:45] Producto por nombre agregado a resultados (ID: 18) [2025-10-19 17:23:45] Datos finales del producto: {"id":18,"codigo":"17606528723077","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":192,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2,5 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17606528721072||manual;;COCAL2|C\u00f3digo alternativo para Coca-Cola|manual","cantidad_codigo":"92.00","fecha_vencimiento":"2025-10-31","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":32,"codigo":"17606528723077","tipo_codigo":"manual","cantidad":"92.00","fecha_vencimiento":"2025-10-31"},{"id":33,"codigo":"17606528721072","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-11-28"}],"precio":"2101.00","stock_texto":192,"stock_disponible":true} [2025-10-19 17:23:45] Procesando producto encontrado por nombre: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"148.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente"} [2025-10-19 17:23:45] Usando lote específico detectado: ninguno para producto ID: 21 [2025-10-19 17:23:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-19 17:23:45] Códigos encontrados para ID 21: 2 [2025-10-19 17:23:45] Detalle de códigos: [{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}] [2025-10-19 17:23:45] Códigos con stock disponible: 2 [2025-10-19 17:23:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-19 17:23:45] Stock total calculado para ID 21: 148 [2025-10-19 17:23:45] Producto NORMAL ID: 21 - Tiene lotes: SÍ (cantidad: 2) [2025-10-19 17:23:45] Usando primer código disponible en orden FIFO para ID 21: {"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"} [2025-10-19 17:23:45] Producto por nombre agregado a resultados (ID: 21) [2025-10-19 17:23:45] Datos finales del producto: {"id":21,"codigo":"12345","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"2941.00","precio_final_publico":"3500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":148,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"67890||diferente","cantidad_codigo":"98.00","fecha_vencimiento":"2025-12-26","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":36,"codigo":"12345","tipo_codigo":"diferente","cantidad":"98.00","fecha_vencimiento":"2025-12-26"},{"id":37,"codigo":"67890","tipo_codigo":"diferente","cantidad":"50.00","fecha_vencimiento":"2026-01-30"}],"precio":"2941.00","stock_texto":148,"stock_disponible":true} [2025-10-19 17:23:45] Se encontraron 2 resultados en total. [2025-10-19 17:23:45] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-19 17:48:32] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-19 17:48:32] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-19 17:48:32] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-19 17:48:32] DEBUG SESSION: {"last_regeneration":1760903830,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-19 17:48:32] DEBUG SESSION ID: mtu6hmof48bur6tn0ntp6rvdav [2025-10-19 17:48:32] DEBUG SESSION STATUS: 2 [2025-10-19 17:48:32] Negocio en sesión: 78.216.219-5 [2025-10-19 17:48:32] Nombre: SGB-ERP SpA [2025-10-19 17:48:32] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-19 17:48:32] Conexión exitosa a la base de datos [2025-10-19 17:48:32] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-19 17:48:32] Buscando producto con código/nombre: embudo [2025-10-19 17:48:32] DEBUG: Código recibido: 'embudo' (longitud: 6) [2025-10-19 17:48:32] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-19 17:48:32] No se encontró producto_id para el código exacto 'embudo'. Intentando búsqueda parcial... [2025-10-19 17:48:32] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-19 17:48:32] Códigos parciales encontrados: 0 [2025-10-19 17:48:32] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-19 17:48:32] Productos encontrados por nombre: 1 [2025-10-19 17:48:32] Procesando producto encontrado por nombre: {"id":20,"codigo":"17606530606522","nombre":"EMBUDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"1.00","tipo_codigo":"masivo","marca_nombre":"China","tipo_nombre":"Utensilios de cocina","categoria_nombre":"Hogar","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-19 17:48:32] Usando lote específico detectado: ninguno para producto ID: 20 [2025-10-19 17:48:32] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-19 17:48:32] Códigos encontrados para ID 20: 1 [2025-10-19 17:48:32] Detalle de códigos: [{"id":35,"codigo":"17606530606522","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}] [2025-10-19 17:48:32] Códigos con stock disponible: 1 [2025-10-19 17:48:32] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-10-19 17:48:32] Stock total calculado para ID 20: 100 [2025-10-19 17:48:32] Producto NORMAL ID: 20 - Tiene lotes: NO (cantidad: 0) [2025-10-19 17:48:32] Usando primer código disponible en orden FIFO para ID 20: {"id":35,"codigo":"17606530606522","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null} [2025-10-19 17:48:32] Producto por nombre agregado a resultados (ID: 20) [2025-10-19 17:48:32] Datos finales del producto: {"id":20,"codigo":"17606530606522","nombre":"EMBUDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","tipo_codigo":"masivo","marca_nombre":"China","tipo_nombre":"Utensilios de cocina","categoria_nombre":"Hogar","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":35,"codigo":"17606530606522","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}],"precio":"1008.00","stock_texto":100,"stock_disponible":true} [2025-10-19 17:48:32] Se encontraron 1 resultados en total. [2025-10-19 17:48:32] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 13:18:19] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 13:18:19] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 13:18:19] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 13:18:19] DEBUG SESSION: {"last_regeneration":1761230407,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA). Compra registrada (ID: 80)."} [2025-10-23 13:18:19] DEBUG SESSION ID: 8b1p7hhc6k4903fltfer7n0dc6 [2025-10-23 13:18:19] DEBUG SESSION STATUS: 2 [2025-10-23 13:18:19] Negocio en sesión: 78.216.219-5 [2025-10-23 13:18:19] Nombre: SGB-ERP SpA [2025-10-23 13:18:19] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 13:18:19] Conexión exitosa a la base de datos [2025-10-23 13:18:19] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 13:18:19] Buscando producto con código/nombre: t [2025-10-23 13:18:19] DEBUG: Código recibido: 't' (longitud: 1) [2025-10-23 13:18:19] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 13:18:19] No se encontró producto_id para el código exacto 't'. Intentando búsqueda parcial... [2025-10-23 13:18:19] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 13:18:19] Códigos parciales encontrados: 0 [2025-10-23 13:18:19] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 13:18:19] Productos encontrados por nombre: 1 [2025-10-23 13:18:19] Procesando producto encontrado por nombre: {"id":46,"codigo":"17612362792239","nombre":"TEST","precio_venta":"10000.00","precio_final_publico":"11900.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"1865","tipo_nombre":"Aceites","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 13:18:19] Usando lote específico detectado: ninguno para producto ID: 46 [2025-10-23 13:18:19] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 13:18:19] Códigos encontrados para ID 46: 1 [2025-10-23 13:18:19] Detalle de códigos: [{"id":70,"codigo":"17612362792239","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-10-23 13:18:19] Códigos con stock disponible: 1 [2025-10-23 13:18:19] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 13:18:19] Stock total calculado para ID 46: 100 [2025-10-23 13:18:19] Producto NORMAL ID: 46 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 13:18:19] Usando primer código disponible en orden FIFO para ID 46: {"id":70,"codigo":"17612362792239","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-10-23 13:18:19] Producto por nombre agregado a resultados (ID: 46) [2025-10-23 13:18:19] Datos finales del producto: {"id":46,"codigo":"17612362792239","nombre":"TEST","precio_venta":"10000.00","precio_final_publico":"11900.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"1865","tipo_nombre":"Aceites","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":70,"codigo":"17612362792239","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"10000.00","stock_texto":100,"stock_disponible":true} [2025-10-23 13:18:19] Se encontraron 1 resultados en total. [2025-10-23 13:18:19] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:22:38] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:22:38] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:22:38] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:22:38] DEBUG SESSION: {"last_regeneration":1761271871,"negocio_rut":"16.414.902-1","negocio_id":"16.414.902-1","negocio_nombre":"Venta de Abarrotes Don Alejandro","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1","id_sesion_caja":"12","sesion_caja_id":"12","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1"}} [2025-10-23 23:22:38] DEBUG SESSION ID: UU0HqBoUKpHtXEfUJMEEydRfMJbbQqCUL0Wqw2kUbROguaGu [2025-10-23 23:22:38] DEBUG SESSION STATUS: 2 [2025-10-23 23:22:38] Negocio en sesión: 16.414.902-1 [2025-10-23 23:22:38] Nombre: Venta de Abarrotes Don Alejandro [2025-10-23 23:22:38] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:22:38] Conexión exitosa a la base de datos [2025-10-23 23:22:38] RUT del negocio en sesión para filtro: 16.414.902-1 [2025-10-23 23:22:38] Buscando producto con código/nombre: MEMORIA [2025-10-23 23:22:38] DEBUG: Código recibido: 'MEMORIA' (longitud: 7) [2025-10-23 23:22:38] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:22:38] No se encontró producto_id para el código exacto 'MEMORIA'. Intentando búsqueda parcial... [2025-10-23 23:22:38] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:22:38] Códigos parciales encontrados: 0 [2025-10-23 23:22:38] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:22:38] Productos encontrados por nombre: 2 [2025-10-23 23:22:38] Procesando producto encontrado por nombre: {"id":56,"codigo":"11112","nombre":"MEMORIAS RAM KINGSTON DDR5 16GB 5600MHZ","precio_venta":"46218.00","precio_final_publico":"55000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"China","tipo_nombre":"Tarjetas de memoria","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":"34565||diferente;;123242||diferente"} [2025-10-23 23:22:38] Usando lote específico detectado: ninguno para producto ID: 56 [2025-10-23 23:22:38] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:22:38] Códigos encontrados para ID 56: 3 [2025-10-23 23:22:38] Detalle de códigos: [{"id":79,"codigo":"11112","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":80,"codigo":"34565","tipo_codigo":"diferente","cantidad":"20.00","fecha_vencimiento":null},{"id":81,"codigo":"123242","tipo_codigo":"diferente","cantidad":"30.00","fecha_vencimiento":null}] [2025-10-23 23:22:38] Códigos con stock disponible: 3 [2025-10-23 23:22:38] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-23 23:22:38] Stock total calculado para ID 56: 60 [2025-10-23 23:22:38] Producto NORMAL ID: 56 - Tiene lotes: SÍ (cantidad: 3) [2025-10-23 23:22:38] Usando primer código disponible en orden FIFO para ID 56: {"id":79,"codigo":"11112","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null} [2025-10-23 23:22:38] Producto por nombre agregado a resultados (ID: 56) [2025-10-23 23:22:38] Datos finales del producto: {"id":56,"codigo":"11112","nombre":"MEMORIAS RAM KINGSTON DDR5 16GB 5600MHZ","precio_venta":"46218.00","precio_final_publico":"55000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":60,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"China","tipo_nombre":"Tarjetas de memoria","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":"34565||diferente;;123242||diferente","cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":79,"codigo":"11112","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":80,"codigo":"34565","tipo_codigo":"diferente","cantidad":"20.00","fecha_vencimiento":null},{"id":81,"codigo":"123242","tipo_codigo":"diferente","cantidad":"30.00","fecha_vencimiento":null}],"precio":"46218.00","stock_texto":60,"stock_disponible":true} [2025-10-23 23:22:38] Procesando producto encontrado por nombre: {"id":57,"codigo":"17612725059165","nombre":"MEMORIA USB 128 GB","precio_venta":"3500.00","precio_final_publico":"4165.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Samsung","tipo_nombre":"Memorias USB","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:22:38] Usando lote específico detectado: ninguno para producto ID: 57 [2025-10-23 23:22:38] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:22:38] Códigos encontrados para ID 57: 1 [2025-10-23 23:22:38] Detalle de códigos: [{"id":82,"codigo":"17612725059165","tipo_codigo":"manual","cantidad":"150.00","fecha_vencimiento":null}] [2025-10-23 23:22:38] Códigos con stock disponible: 1 [2025-10-23 23:22:38] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:22:38] Stock total calculado para ID 57: 150 [2025-10-23 23:22:38] Producto NORMAL ID: 57 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:22:38] Usando primer código disponible en orden FIFO para ID 57: {"id":82,"codigo":"17612725059165","tipo_codigo":"manual","cantidad":"150.00","fecha_vencimiento":null} [2025-10-23 23:22:38] Producto por nombre agregado a resultados (ID: 57) [2025-10-23 23:22:38] Datos finales del producto: {"id":57,"codigo":"17612725059165","nombre":"MEMORIA USB 128 GB","precio_venta":"3500.00","precio_final_publico":"4165.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":150,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Samsung","tipo_nombre":"Memorias USB","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"150.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":82,"codigo":"17612725059165","tipo_codigo":"manual","cantidad":"150.00","fecha_vencimiento":null}],"precio":"3500.00","stock_texto":150,"stock_disponible":true} [2025-10-23 23:22:38] Se encontraron 2 resultados en total. [2025-10-23 23:22:38] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-23 23:22:53] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:22:53] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:22:53] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:22:53] DEBUG SESSION: {"last_regeneration":1761271871,"negocio_rut":"16.414.902-1","negocio_id":"16.414.902-1","negocio_nombre":"Venta de Abarrotes Don Alejandro","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1","id_sesion_caja":"12","sesion_caja_id":"12","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1"}} [2025-10-23 23:22:53] DEBUG SESSION ID: UU0HqBoUKpHtXEfUJMEEydRfMJbbQqCUL0Wqw2kUbROguaGu [2025-10-23 23:22:53] DEBUG SESSION STATUS: 2 [2025-10-23 23:22:53] Negocio en sesión: 16.414.902-1 [2025-10-23 23:22:53] Nombre: Venta de Abarrotes Don Alejandro [2025-10-23 23:22:53] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:22:53] Conexión exitosa a la base de datos [2025-10-23 23:22:53] RUT del negocio en sesión para filtro: 16.414.902-1 [2025-10-23 23:22:53] Buscando producto con código/nombre: USB [2025-10-23 23:22:53] DEBUG: Código recibido: 'USB' (longitud: 3) [2025-10-23 23:22:53] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:22:53] No se encontró producto_id para el código exacto 'USB'. Intentando búsqueda parcial... [2025-10-23 23:22:53] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:22:53] Códigos parciales encontrados: 0 [2025-10-23 23:22:53] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:22:53] Productos encontrados por nombre: 1 [2025-10-23 23:22:53] Procesando producto encontrado por nombre: {"id":57,"codigo":"17612725059165","nombre":"MEMORIA USB 128 GB","precio_venta":"3500.00","precio_final_publico":"4165.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Samsung","tipo_nombre":"Memorias USB","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:22:53] Usando lote específico detectado: ninguno para producto ID: 57 [2025-10-23 23:22:53] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:22:53] Códigos encontrados para ID 57: 1 [2025-10-23 23:22:53] Detalle de códigos: [{"id":82,"codigo":"17612725059165","tipo_codigo":"manual","cantidad":"150.00","fecha_vencimiento":null}] [2025-10-23 23:22:53] Códigos con stock disponible: 1 [2025-10-23 23:22:53] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:22:53] Stock total calculado para ID 57: 150 [2025-10-23 23:22:53] Producto NORMAL ID: 57 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:22:53] Usando primer código disponible en orden FIFO para ID 57: {"id":82,"codigo":"17612725059165","tipo_codigo":"manual","cantidad":"150.00","fecha_vencimiento":null} [2025-10-23 23:22:53] Producto por nombre agregado a resultados (ID: 57) [2025-10-23 23:22:53] Datos finales del producto: {"id":57,"codigo":"17612725059165","nombre":"MEMORIA USB 128 GB","precio_venta":"3500.00","precio_final_publico":"4165.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":150,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Samsung","tipo_nombre":"Memorias USB","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"150.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":82,"codigo":"17612725059165","tipo_codigo":"manual","cantidad":"150.00","fecha_vencimiento":null}],"precio":"3500.00","stock_texto":150,"stock_disponible":true} [2025-10-23 23:22:53] Se encontraron 1 resultados en total. [2025-10-23 23:22:53] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:23:07] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:23:07] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:23:07] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:23:07] DEBUG SESSION: {"last_regeneration":1761271871,"negocio_rut":"16.414.902-1","negocio_id":"16.414.902-1","negocio_nombre":"Venta de Abarrotes Don Alejandro","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1","id_sesion_caja":"12","sesion_caja_id":"12","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1"}} [2025-10-23 23:23:07] DEBUG SESSION ID: UU0HqBoUKpHtXEfUJMEEydRfMJbbQqCUL0Wqw2kUbROguaGu [2025-10-23 23:23:07] DEBUG SESSION STATUS: 2 [2025-10-23 23:23:07] Negocio en sesión: 16.414.902-1 [2025-10-23 23:23:07] Nombre: Venta de Abarrotes Don Alejandro [2025-10-23 23:23:07] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:23:07] Conexión exitosa a la base de datos [2025-10-23 23:23:07] RUT del negocio en sesión para filtro: 16.414.902-1 [2025-10-23 23:23:07] Buscando producto con código/nombre: CABLE [2025-10-23 23:23:07] DEBUG: Código recibido: 'CABLE' (longitud: 5) [2025-10-23 23:23:07] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:23:07] No se encontró producto_id para el código exacto 'CABLE'. Intentando búsqueda parcial... [2025-10-23 23:23:07] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:23:07] Códigos parciales encontrados: 0 [2025-10-23 23:23:07] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:23:07] Productos encontrados por nombre: 1 [2025-10-23 23:23:07] Procesando producto encontrado por nombre: {"id":54,"codigo":"17612720655999","nombre":"CABLE HDMI 1.8 MTS","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.80","tipo_codigo":"masivo","marca_nombre":"China","tipo_nombre":"Cables","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:23:07] Usando lote específico detectado: ninguno para producto ID: 54 [2025-10-23 23:23:07] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:23:07] Códigos encontrados para ID 54: 1 [2025-10-23 23:23:07] Detalle de códigos: [{"id":77,"codigo":"17612720655999","tipo_codigo":"masivo","cantidad":"30.00","fecha_vencimiento":null}] [2025-10-23 23:23:07] Códigos con stock disponible: 1 [2025-10-23 23:23:07] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-10-23 23:23:07] Stock total calculado para ID 54: 30 [2025-10-23 23:23:07] Producto NORMAL ID: 54 - Tiene lotes: NO (cantidad: 0) [2025-10-23 23:23:07] Usando primer código disponible en orden FIFO para ID 54: {"id":77,"codigo":"17612720655999","tipo_codigo":"masivo","cantidad":"30.00","fecha_vencimiento":null} [2025-10-23 23:23:07] Producto por nombre agregado a resultados (ID: 54) [2025-10-23 23:23:07] Datos finales del producto: {"id":54,"codigo":"17612720655999","nombre":"CABLE HDMI 1.8 MTS","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.80","tipo_codigo":"masivo","marca_nombre":"China","tipo_nombre":"Cables","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":77,"codigo":"17612720655999","tipo_codigo":"masivo","cantidad":"30.00","fecha_vencimiento":null}],"precio":"1765.00","stock_texto":30,"stock_disponible":true} [2025-10-23 23:23:07] Se encontraron 1 resultados en total. [2025-10-23 23:23:07] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:23:20] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:23:20] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:23:20] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:23:20] DEBUG SESSION: {"last_regeneration":1761271871,"negocio_rut":"16.414.902-1","negocio_id":"16.414.902-1","negocio_nombre":"Venta de Abarrotes Don Alejandro","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1","id_sesion_caja":"12","sesion_caja_id":"12","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1"}} [2025-10-23 23:23:20] DEBUG SESSION ID: UU0HqBoUKpHtXEfUJMEEydRfMJbbQqCUL0Wqw2kUbROguaGu [2025-10-23 23:23:20] DEBUG SESSION STATUS: 2 [2025-10-23 23:23:20] Negocio en sesión: 16.414.902-1 [2025-10-23 23:23:20] Nombre: Venta de Abarrotes Don Alejandro [2025-10-23 23:23:20] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:23:20] Conexión exitosa a la base de datos [2025-10-23 23:23:20] RUT del negocio en sesión para filtro: 16.414.902-1 [2025-10-23 23:23:20] Buscando producto con código/nombre: CALC [2025-10-23 23:23:20] DEBUG: Código recibido: 'CALC' (longitud: 4) [2025-10-23 23:23:20] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:23:20] No se encontró producto_id para el código exacto 'CALC'. Intentando búsqueda parcial... [2025-10-23 23:23:20] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:23:20] Códigos parciales encontrados: 0 [2025-10-23 23:23:20] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:23:20] Productos encontrados por nombre: 1 [2025-10-23 23:23:20] Procesando producto encontrado por nombre: {"id":53,"codigo":"17612719981936","nombre":"CALCULADORA CIENTIFICA ESCOLAR","precio_venta":"3361.00","precio_final_publico":"4000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Casio","tipo_nombre":"Calculadoras","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:23:20] Usando lote específico detectado: ninguno para producto ID: 53 [2025-10-23 23:23:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:23:20] Códigos encontrados para ID 53: 1 [2025-10-23 23:23:20] Detalle de códigos: [{"id":76,"codigo":"17612719981936","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-10-23 23:23:20] Códigos con stock disponible: 1 [2025-10-23 23:23:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:23:20] Stock total calculado para ID 53: 20 [2025-10-23 23:23:20] Producto NORMAL ID: 53 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:23:20] Usando primer código disponible en orden FIFO para ID 53: {"id":76,"codigo":"17612719981936","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-10-23 23:23:20] Producto por nombre agregado a resultados (ID: 53) [2025-10-23 23:23:20] Datos finales del producto: {"id":53,"codigo":"17612719981936","nombre":"CALCULADORA CIENTIFICA ESCOLAR","precio_venta":"3361.00","precio_final_publico":"4000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Casio","tipo_nombre":"Calculadoras","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":76,"codigo":"17612719981936","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3361.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:23:20] Se encontraron 1 resultados en total. [2025-10-23 23:23:20] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:23:27] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:23:27] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:23:27] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:23:27] DEBUG SESSION: {"last_regeneration":1761271871,"negocio_rut":"16.414.902-1","negocio_id":"16.414.902-1","negocio_nombre":"Venta de Abarrotes Don Alejandro","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1","id_sesion_caja":"12","sesion_caja_id":"12","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=16.414.902-1"}} [2025-10-23 23:23:27] DEBUG SESSION ID: UU0HqBoUKpHtXEfUJMEEydRfMJbbQqCUL0Wqw2kUbROguaGu [2025-10-23 23:23:27] DEBUG SESSION STATUS: 2 [2025-10-23 23:23:27] Negocio en sesión: 16.414.902-1 [2025-10-23 23:23:27] Nombre: Venta de Abarrotes Don Alejandro [2025-10-23 23:23:27] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:23:27] Conexión exitosa a la base de datos [2025-10-23 23:23:27] RUT del negocio en sesión para filtro: 16.414.902-1 [2025-10-23 23:23:27] Buscando producto con código/nombre: CALCULADORA [2025-10-23 23:23:27] DEBUG: Código recibido: 'CALCULADORA' (longitud: 11) [2025-10-23 23:23:27] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:23:27] No se encontró producto_id para el código exacto 'CALCULADORA'. Intentando búsqueda parcial... [2025-10-23 23:23:27] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:23:27] Códigos parciales encontrados: 0 [2025-10-23 23:23:27] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:23:27] Productos encontrados por nombre: 1 [2025-10-23 23:23:27] Procesando producto encontrado por nombre: {"id":53,"codigo":"17612719981936","nombre":"CALCULADORA CIENTIFICA ESCOLAR","precio_venta":"3361.00","precio_final_publico":"4000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"19.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Casio","tipo_nombre":"Calculadoras","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:23:27] Usando lote específico detectado: ninguno para producto ID: 53 [2025-10-23 23:23:27] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:23:27] Códigos encontrados para ID 53: 1 [2025-10-23 23:23:27] Detalle de códigos: [{"id":76,"codigo":"17612719981936","tipo_codigo":"manual","cantidad":"19.00","fecha_vencimiento":null}] [2025-10-23 23:23:27] Códigos con stock disponible: 1 [2025-10-23 23:23:27] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:23:27] Stock total calculado para ID 53: 19 [2025-10-23 23:23:27] Producto NORMAL ID: 53 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:23:27] Usando primer código disponible en orden FIFO para ID 53: {"id":76,"codigo":"17612719981936","tipo_codigo":"manual","cantidad":"19.00","fecha_vencimiento":null} [2025-10-23 23:23:27] Producto por nombre agregado a resultados (ID: 53) [2025-10-23 23:23:27] Datos finales del producto: {"id":53,"codigo":"17612719981936","nombre":"CALCULADORA CIENTIFICA ESCOLAR","precio_venta":"3361.00","precio_final_publico":"4000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":19,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Casio","tipo_nombre":"Calculadoras","categoria_nombre":"Electr\u00f3nica","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"19.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":76,"codigo":"17612719981936","tipo_codigo":"manual","cantidad":"19.00","fecha_vencimiento":null}],"precio":"3361.00","stock_texto":19,"stock_disponible":true} [2025-10-23 23:23:27] Se encontraron 1 resultados en total. [2025-10-23 23:23:27] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:29:32] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:29:32] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:29:32] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:29:32] DEBUG SESSION: {"last_regeneration":1761272620,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-01","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":11,"sesion_caja_id":11,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-10-23 23:29:32] DEBUG SESSION ID: qdqa80hc42fbh1hjp08jqlnnko [2025-10-23 23:29:32] DEBUG SESSION STATUS: 2 [2025-10-23 23:29:32] Negocio en sesión: 17.612.457-1 [2025-10-23 23:29:32] Nombre: Mis dos princesas [2025-10-23 23:29:32] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:29:32] Conexión exitosa a la base de datos [2025-10-23 23:29:32] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-10-23 23:29:32] Buscando producto con código/nombre: perf [2025-10-23 23:29:32] DEBUG: Código recibido: 'perf' (longitud: 4) [2025-10-23 23:29:32] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:29:32] No se encontró producto_id para el código exacto 'perf'. Intentando búsqueda parcial... [2025-10-23 23:29:32] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:29:32] Códigos parciales encontrados: 0 [2025-10-23 23:29:32] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:29:32] Productos encontrados por nombre: 4 [2025-10-23 23:29:32] Procesando producto encontrado por nombre: {"id":58,"codigo":"17612727071462","nombre":"DORSAY PERMUFE","precio_venta":"12605.00","precio_final_publico":"15000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:32] Usando lote específico detectado: ninguno para producto ID: 58 [2025-10-23 23:29:32] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:32] Códigos encontrados para ID 58: 1 [2025-10-23 23:29:32] Detalle de códigos: [{"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}] [2025-10-23 23:29:32] Códigos con stock disponible: 1 [2025-10-23 23:29:32] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:29:32] Stock total calculado para ID 58: 10 [2025-10-23 23:29:32] Producto NORMAL ID: 58 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:29:32] Usando primer código disponible en orden FIFO para ID 58: {"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null} [2025-10-23 23:29:32] Producto por nombre agregado a resultados (ID: 58) [2025-10-23 23:29:32] Datos finales del producto: {"id":58,"codigo":"17612727071462","nombre":"DORSAY PERMUFE","precio_venta":"12605.00","precio_final_publico":"15000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}],"precio":"12605.00","stock_texto":10,"stock_disponible":true} [2025-10-23 23:29:32] Procesando producto encontrado por nombre: {"id":59,"codigo":"17612727794675","nombre":"ALFA PERFUME","precio_venta":"27731.00","precio_final_publico":"33000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"40.00","cantidad_por_unidad":"75.00","tipo_codigo":"masivo","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:32] Usando lote específico detectado: ninguno para producto ID: 59 [2025-10-23 23:29:32] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:32] Códigos encontrados para ID 59: 1 [2025-10-23 23:29:32] Detalle de códigos: [{"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}] [2025-10-23 23:29:32] Códigos con stock disponible: 1 [2025-10-23 23:29:32] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-10-23 23:29:32] Stock total calculado para ID 59: 40 [2025-10-23 23:29:32] Producto NORMAL ID: 59 - Tiene lotes: NO (cantidad: 0) [2025-10-23 23:29:32] Usando primer código disponible en orden FIFO para ID 59: {"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null} [2025-10-23 23:29:32] Producto por nombre agregado a resultados (ID: 59) [2025-10-23 23:29:32] Datos finales del producto: {"id":59,"codigo":"17612727794675","nombre":"ALFA PERFUME","precio_venta":"27731.00","precio_final_publico":"33000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":40,"cantidad_por_unidad":"75.00","tipo_codigo":"masivo","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"40.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}],"precio":"27731.00","stock_texto":40,"stock_disponible":true} [2025-10-23 23:29:32] Procesando producto encontrado por nombre: {"id":60,"codigo":"17612728564199","nombre":"DREAM PERFUME","precio_venta":"10084.00","precio_final_publico":"12000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"45.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:32] Usando lote específico detectado: ninguno para producto ID: 60 [2025-10-23 23:29:32] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:32] Códigos encontrados para ID 60: 1 [2025-10-23 23:29:32] Detalle de códigos: [{"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-10-23 23:29:32] Códigos con stock disponible: 1 [2025-10-23 23:29:32] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:29:32] Stock total calculado para ID 60: 20 [2025-10-23 23:29:32] Producto NORMAL ID: 60 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:29:32] Usando primer código disponible en orden FIFO para ID 60: {"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-10-23 23:29:32] Producto por nombre agregado a resultados (ID: 60) [2025-10-23 23:29:32] Datos finales del producto: {"id":60,"codigo":"17612728564199","nombre":"DREAM PERFUME","precio_venta":"10084.00","precio_final_publico":"12000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":20,"cantidad_por_unidad":"45.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"10084.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:29:32] Procesando producto encontrado por nombre: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente"} [2025-10-23 23:29:32] Usando lote específico detectado: ninguno para producto ID: 61 [2025-10-23 23:29:32] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:32] Códigos encontrados para ID 61: 3 [2025-10-23 23:29:32] Detalle de códigos: [{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}] [2025-10-23 23:29:32] Códigos con stock disponible: 3 [2025-10-23 23:29:32] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-23 23:29:32] Stock total calculado para ID 61: 20 [2025-10-23 23:29:32] Producto NORMAL ID: 61 - Tiene lotes: SÍ (cantidad: 3) [2025-10-23 23:29:32] Usando primer código disponible en orden FIFO para ID 61: {"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null} [2025-10-23 23:29:32] Producto por nombre agregado a resultados (ID: 61) [2025-10-23 23:29:32] Datos finales del producto: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":20,"cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente","cantidad_codigo":"7.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}],"precio":"25210.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:29:32] Se encontraron 4 resultados en total. [2025-10-23 23:29:32] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-10-23 23:29:44] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:29:44] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:29:44] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:29:44] DEBUG SESSION: {"last_regeneration":1761272620,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-01","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":11,"sesion_caja_id":11,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-10-23 23:29:44] DEBUG SESSION ID: qdqa80hc42fbh1hjp08jqlnnko [2025-10-23 23:29:44] DEBUG SESSION STATUS: 2 [2025-10-23 23:29:44] Negocio en sesión: 17.612.457-1 [2025-10-23 23:29:44] Nombre: Mis dos princesas [2025-10-23 23:29:44] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:29:44] Conexión exitosa a la base de datos [2025-10-23 23:29:44] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-10-23 23:29:44] Buscando producto con código/nombre: perfum [2025-10-23 23:29:44] DEBUG: Código recibido: 'perfum' (longitud: 6) [2025-10-23 23:29:44] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:29:44] No se encontró producto_id para el código exacto 'perfum'. Intentando búsqueda parcial... [2025-10-23 23:29:44] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:29:44] Códigos parciales encontrados: 0 [2025-10-23 23:29:44] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:29:44] Productos encontrados por nombre: 4 [2025-10-23 23:29:44] Procesando producto encontrado por nombre: {"id":58,"codigo":"17612727071462","nombre":"DORSAY PERMUFE","precio_venta":"12605.00","precio_final_publico":"15000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":"9.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:44] Usando lote específico detectado: ninguno para producto ID: 58 [2025-10-23 23:29:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:44] Códigos encontrados para ID 58: 1 [2025-10-23 23:29:44] Detalle de códigos: [{"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null}] [2025-10-23 23:29:44] Códigos con stock disponible: 1 [2025-10-23 23:29:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:29:44] Stock total calculado para ID 58: 9 [2025-10-23 23:29:44] Producto NORMAL ID: 58 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:29:44] Usando primer código disponible en orden FIFO para ID 58: {"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null} [2025-10-23 23:29:44] Producto por nombre agregado a resultados (ID: 58) [2025-10-23 23:29:44] Datos finales del producto: {"id":58,"codigo":"17612727071462","nombre":"DORSAY PERMUFE","precio_venta":"12605.00","precio_final_publico":"15000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":9,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"9.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null}],"precio":"12605.00","stock_texto":9,"stock_disponible":true} [2025-10-23 23:29:44] Procesando producto encontrado por nombre: {"id":59,"codigo":"17612727794675","nombre":"ALFA PERFUME","precio_venta":"27731.00","precio_final_publico":"33000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"40.00","cantidad_por_unidad":"75.00","tipo_codigo":"masivo","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:44] Usando lote específico detectado: ninguno para producto ID: 59 [2025-10-23 23:29:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:44] Códigos encontrados para ID 59: 1 [2025-10-23 23:29:44] Detalle de códigos: [{"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}] [2025-10-23 23:29:44] Códigos con stock disponible: 1 [2025-10-23 23:29:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-10-23 23:29:44] Stock total calculado para ID 59: 40 [2025-10-23 23:29:44] Producto NORMAL ID: 59 - Tiene lotes: NO (cantidad: 0) [2025-10-23 23:29:44] Usando primer código disponible en orden FIFO para ID 59: {"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null} [2025-10-23 23:29:44] Producto por nombre agregado a resultados (ID: 59) [2025-10-23 23:29:44] Datos finales del producto: {"id":59,"codigo":"17612727794675","nombre":"ALFA PERFUME","precio_venta":"27731.00","precio_final_publico":"33000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":40,"cantidad_por_unidad":"75.00","tipo_codigo":"masivo","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"40.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}],"precio":"27731.00","stock_texto":40,"stock_disponible":true} [2025-10-23 23:29:44] Procesando producto encontrado por nombre: {"id":60,"codigo":"17612728564199","nombre":"DREAM PERFUME","precio_venta":"10084.00","precio_final_publico":"12000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"45.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:44] Usando lote específico detectado: ninguno para producto ID: 60 [2025-10-23 23:29:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:44] Códigos encontrados para ID 60: 1 [2025-10-23 23:29:44] Detalle de códigos: [{"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-10-23 23:29:44] Códigos con stock disponible: 1 [2025-10-23 23:29:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:29:44] Stock total calculado para ID 60: 20 [2025-10-23 23:29:44] Producto NORMAL ID: 60 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:29:44] Usando primer código disponible en orden FIFO para ID 60: {"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-10-23 23:29:44] Producto por nombre agregado a resultados (ID: 60) [2025-10-23 23:29:44] Datos finales del producto: {"id":60,"codigo":"17612728564199","nombre":"DREAM PERFUME","precio_venta":"10084.00","precio_final_publico":"12000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":20,"cantidad_por_unidad":"45.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"10084.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:29:44] Procesando producto encontrado por nombre: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente"} [2025-10-23 23:29:44] Usando lote específico detectado: ninguno para producto ID: 61 [2025-10-23 23:29:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:44] Códigos encontrados para ID 61: 3 [2025-10-23 23:29:44] Detalle de códigos: [{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}] [2025-10-23 23:29:44] Códigos con stock disponible: 3 [2025-10-23 23:29:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-23 23:29:44] Stock total calculado para ID 61: 20 [2025-10-23 23:29:44] Producto NORMAL ID: 61 - Tiene lotes: SÍ (cantidad: 3) [2025-10-23 23:29:44] Usando primer código disponible en orden FIFO para ID 61: {"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null} [2025-10-23 23:29:44] Producto por nombre agregado a resultados (ID: 61) [2025-10-23 23:29:44] Datos finales del producto: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":20,"cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente","cantidad_codigo":"7.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}],"precio":"25210.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:29:44] Se encontraron 4 resultados en total. [2025-10-23 23:29:44] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-10-23 23:29:56] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:29:56] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:29:56] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:29:56] DEBUG SESSION: {"last_regeneration":1761272620,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-01","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":11,"sesion_caja_id":11,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-10-23 23:29:56] DEBUG SESSION ID: qdqa80hc42fbh1hjp08jqlnnko [2025-10-23 23:29:56] DEBUG SESSION STATUS: 2 [2025-10-23 23:29:56] Negocio en sesión: 17.612.457-1 [2025-10-23 23:29:56] Nombre: Mis dos princesas [2025-10-23 23:29:56] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:29:56] Conexión exitosa a la base de datos [2025-10-23 23:29:56] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-10-23 23:29:56] Buscando producto con código/nombre: perfume [2025-10-23 23:29:56] DEBUG: Código recibido: 'perfume' (longitud: 7) [2025-10-23 23:29:56] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:29:56] No se encontró producto_id para el código exacto 'perfume'. Intentando búsqueda parcial... [2025-10-23 23:29:56] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:29:56] Códigos parciales encontrados: 0 [2025-10-23 23:29:56] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:29:56] Productos encontrados por nombre: 4 [2025-10-23 23:29:56] Procesando producto encontrado por nombre: {"id":58,"codigo":"17612727071462","nombre":"DORSAY PERMUFE","precio_venta":"12605.00","precio_final_publico":"15000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":"9.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:56] Usando lote específico detectado: ninguno para producto ID: 58 [2025-10-23 23:29:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:56] Códigos encontrados para ID 58: 1 [2025-10-23 23:29:56] Detalle de códigos: [{"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null}] [2025-10-23 23:29:56] Códigos con stock disponible: 1 [2025-10-23 23:29:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:29:56] Stock total calculado para ID 58: 9 [2025-10-23 23:29:56] Producto NORMAL ID: 58 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:29:56] Usando primer código disponible en orden FIFO para ID 58: {"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null} [2025-10-23 23:29:56] Producto por nombre agregado a resultados (ID: 58) [2025-10-23 23:29:56] Datos finales del producto: {"id":58,"codigo":"17612727071462","nombre":"DORSAY PERMUFE","precio_venta":"12605.00","precio_final_publico":"15000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":9,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"9.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null}],"precio":"12605.00","stock_texto":9,"stock_disponible":true} [2025-10-23 23:29:56] Procesando producto encontrado por nombre: {"id":59,"codigo":"17612727794675","nombre":"ALFA PERFUME","precio_venta":"27731.00","precio_final_publico":"33000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"40.00","cantidad_por_unidad":"75.00","tipo_codigo":"masivo","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:56] Usando lote específico detectado: ninguno para producto ID: 59 [2025-10-23 23:29:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:56] Códigos encontrados para ID 59: 1 [2025-10-23 23:29:56] Detalle de códigos: [{"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}] [2025-10-23 23:29:56] Códigos con stock disponible: 1 [2025-10-23 23:29:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-10-23 23:29:56] Stock total calculado para ID 59: 40 [2025-10-23 23:29:56] Producto NORMAL ID: 59 - Tiene lotes: NO (cantidad: 0) [2025-10-23 23:29:56] Usando primer código disponible en orden FIFO para ID 59: {"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null} [2025-10-23 23:29:56] Producto por nombre agregado a resultados (ID: 59) [2025-10-23 23:29:56] Datos finales del producto: {"id":59,"codigo":"17612727794675","nombre":"ALFA PERFUME","precio_venta":"27731.00","precio_final_publico":"33000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":40,"cantidad_por_unidad":"75.00","tipo_codigo":"masivo","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"40.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}],"precio":"27731.00","stock_texto":40,"stock_disponible":true} [2025-10-23 23:29:56] Procesando producto encontrado por nombre: {"id":60,"codigo":"17612728564199","nombre":"DREAM PERFUME","precio_venta":"10084.00","precio_final_publico":"12000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":"18.00","cantidad_por_unidad":"45.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:29:56] Usando lote específico detectado: ninguno para producto ID: 60 [2025-10-23 23:29:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:56] Códigos encontrados para ID 60: 1 [2025-10-23 23:29:56] Detalle de códigos: [{"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"18.00","fecha_vencimiento":null}] [2025-10-23 23:29:56] Códigos con stock disponible: 1 [2025-10-23 23:29:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:29:56] Stock total calculado para ID 60: 18 [2025-10-23 23:29:56] Producto NORMAL ID: 60 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:29:56] Usando primer código disponible en orden FIFO para ID 60: {"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"18.00","fecha_vencimiento":null} [2025-10-23 23:29:56] Producto por nombre agregado a resultados (ID: 60) [2025-10-23 23:29:56] Datos finales del producto: {"id":60,"codigo":"17612728564199","nombre":"DREAM PERFUME","precio_venta":"10084.00","precio_final_publico":"12000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":18,"cantidad_por_unidad":"45.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"18.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"18.00","fecha_vencimiento":null}],"precio":"10084.00","stock_texto":18,"stock_disponible":true} [2025-10-23 23:29:56] Procesando producto encontrado por nombre: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente"} [2025-10-23 23:29:56] Usando lote específico detectado: ninguno para producto ID: 61 [2025-10-23 23:29:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:29:56] Códigos encontrados para ID 61: 3 [2025-10-23 23:29:56] Detalle de códigos: [{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}] [2025-10-23 23:29:56] Códigos con stock disponible: 3 [2025-10-23 23:29:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-23 23:29:56] Stock total calculado para ID 61: 20 [2025-10-23 23:29:56] Producto NORMAL ID: 61 - Tiene lotes: SÍ (cantidad: 3) [2025-10-23 23:29:56] Usando primer código disponible en orden FIFO para ID 61: {"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null} [2025-10-23 23:29:56] Producto por nombre agregado a resultados (ID: 61) [2025-10-23 23:29:56] Datos finales del producto: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":20,"cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente","cantidad_codigo":"7.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}],"precio":"25210.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:29:56] Se encontraron 4 resultados en total. [2025-10-23 23:29:56] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-10-23 23:30:14] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:30:14] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:30:14] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:30:14] DEBUG SESSION: {"last_regeneration":1761272620,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-01","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":11,"sesion_caja_id":11,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-10-23 23:30:14] DEBUG SESSION ID: qdqa80hc42fbh1hjp08jqlnnko [2025-10-23 23:30:14] DEBUG SESSION STATUS: 2 [2025-10-23 23:30:14] Negocio en sesión: 17.612.457-1 [2025-10-23 23:30:14] Nombre: Mis dos princesas [2025-10-23 23:30:14] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:30:14] Conexión exitosa a la base de datos [2025-10-23 23:30:14] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-10-23 23:30:14] Buscando producto con código/nombre: perfume [2025-10-23 23:30:14] DEBUG: Código recibido: 'perfume' (longitud: 7) [2025-10-23 23:30:14] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:30:14] No se encontró producto_id para el código exacto 'perfume'. Intentando búsqueda parcial... [2025-10-23 23:30:14] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:30:14] Códigos parciales encontrados: 0 [2025-10-23 23:30:14] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:30:14] Productos encontrados por nombre: 4 [2025-10-23 23:30:14] Procesando producto encontrado por nombre: {"id":58,"codigo":"17612727071462","nombre":"DORSAY PERMUFE","precio_venta":"12605.00","precio_final_publico":"15000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":"9.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:30:14] Usando lote específico detectado: ninguno para producto ID: 58 [2025-10-23 23:30:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:30:14] Códigos encontrados para ID 58: 1 [2025-10-23 23:30:14] Detalle de códigos: [{"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null}] [2025-10-23 23:30:14] Códigos con stock disponible: 1 [2025-10-23 23:30:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:30:14] Stock total calculado para ID 58: 9 [2025-10-23 23:30:14] Producto NORMAL ID: 58 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:30:14] Usando primer código disponible en orden FIFO para ID 58: {"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null} [2025-10-23 23:30:14] Producto por nombre agregado a resultados (ID: 58) [2025-10-23 23:30:14] Datos finales del producto: {"id":58,"codigo":"17612727071462","nombre":"DORSAY PERMUFE","precio_venta":"12605.00","precio_final_publico":"15000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":9,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"9.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":83,"codigo":"17612727071462","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null}],"precio":"12605.00","stock_texto":9,"stock_disponible":true} [2025-10-23 23:30:14] Procesando producto encontrado por nombre: {"id":59,"codigo":"17612727794675","nombre":"ALFA PERFUME","precio_venta":"27731.00","precio_final_publico":"33000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"39.00","cantidad_por_unidad":"75.00","tipo_codigo":"masivo","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:30:14] Usando lote específico detectado: ninguno para producto ID: 59 [2025-10-23 23:30:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:30:14] Códigos encontrados para ID 59: 1 [2025-10-23 23:30:14] Detalle de códigos: [{"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"39.00","fecha_vencimiento":null}] [2025-10-23 23:30:14] Códigos con stock disponible: 1 [2025-10-23 23:30:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-10-23 23:30:14] Stock total calculado para ID 59: 39 [2025-10-23 23:30:14] Producto NORMAL ID: 59 - Tiene lotes: NO (cantidad: 0) [2025-10-23 23:30:14] Usando primer código disponible en orden FIFO para ID 59: {"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"39.00","fecha_vencimiento":null} [2025-10-23 23:30:14] Producto por nombre agregado a resultados (ID: 59) [2025-10-23 23:30:14] Datos finales del producto: {"id":59,"codigo":"17612727794675","nombre":"ALFA PERFUME","precio_venta":"27731.00","precio_final_publico":"33000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":39,"cantidad_por_unidad":"75.00","tipo_codigo":"masivo","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"39.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":84,"codigo":"17612727794675","tipo_codigo":"masivo","cantidad":"39.00","fecha_vencimiento":null}],"precio":"27731.00","stock_texto":39,"stock_disponible":true} [2025-10-23 23:30:14] Procesando producto encontrado por nombre: {"id":60,"codigo":"17612728564199","nombre":"DREAM PERFUME","precio_venta":"10084.00","precio_final_publico":"12000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":"18.00","cantidad_por_unidad":"45.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:30:14] Usando lote específico detectado: ninguno para producto ID: 60 [2025-10-23 23:30:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:30:14] Códigos encontrados para ID 60: 1 [2025-10-23 23:30:14] Detalle de códigos: [{"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"18.00","fecha_vencimiento":null}] [2025-10-23 23:30:14] Códigos con stock disponible: 1 [2025-10-23 23:30:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:30:14] Stock total calculado para ID 60: 18 [2025-10-23 23:30:14] Producto NORMAL ID: 60 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:30:14] Usando primer código disponible en orden FIFO para ID 60: {"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"18.00","fecha_vencimiento":null} [2025-10-23 23:30:14] Producto por nombre agregado a resultados (ID: 60) [2025-10-23 23:30:14] Datos finales del producto: {"id":60,"codigo":"17612728564199","nombre":"DREAM PERFUME","precio_venta":"10084.00","precio_final_publico":"12000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"ml","controla_stock":1,"stock":18,"cantidad_por_unidad":"45.00","tipo_codigo":"manual","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"18.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":85,"codigo":"17612728564199","tipo_codigo":"manual","cantidad":"18.00","fecha_vencimiento":null}],"precio":"10084.00","stock_texto":18,"stock_disponible":true} [2025-10-23 23:30:14] Procesando producto encontrado por nombre: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente"} [2025-10-23 23:30:14] Usando lote específico detectado: ninguno para producto ID: 61 [2025-10-23 23:30:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:30:14] Códigos encontrados para ID 61: 3 [2025-10-23 23:30:14] Detalle de códigos: [{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}] [2025-10-23 23:30:14] Códigos con stock disponible: 3 [2025-10-23 23:30:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-23 23:30:14] Stock total calculado para ID 61: 20 [2025-10-23 23:30:14] Producto NORMAL ID: 61 - Tiene lotes: SÍ (cantidad: 3) [2025-10-23 23:30:14] Usando primer código disponible en orden FIFO para ID 61: {"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null} [2025-10-23 23:30:14] Producto por nombre agregado a resultados (ID: 61) [2025-10-23 23:30:14] Datos finales del producto: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":20,"cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente","cantidad_codigo":"7.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}],"precio":"25210.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:30:14] Se encontraron 4 resultados en total. [2025-10-23 23:30:14] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-10-23 23:37:52] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:37:52] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:37:52] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:37:52] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:37:52] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:37:52] DEBUG SESSION STATUS: 2 [2025-10-23 23:37:52] Negocio en sesión: 78.216.219-5 [2025-10-23 23:37:52] Nombre: SGB-ERP SpA [2025-10-23 23:37:52] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:37:52] Conexión exitosa a la base de datos [2025-10-23 23:37:52] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:37:52] Buscando producto con código/nombre: berlines [2025-10-23 23:37:52] DEBUG: Código recibido: 'berlines' (longitud: 8) [2025-10-23 23:37:52] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:37:52] No se encontró producto_id para el código exacto 'berlines'. Intentando búsqueda parcial... [2025-10-23 23:37:52] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:37:52] Códigos parciales encontrados: 0 [2025-10-23 23:37:52] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:37:52] Productos encontrados por nombre: 1 [2025-10-23 23:37:52] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:37:52] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-23 23:37:52] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:37:52] Códigos encontrados para ID 62: 1 [2025-10-23 23:37:52] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}] [2025-10-23 23:37:52] Códigos con stock disponible: 1 [2025-10-23 23:37:52] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-23 23:37:52] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-23 23:37:52] Producto especial por nombre con stock disponible: 50 [2025-10-23 23:37:52] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:37:52] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null} [2025-10-23 23:37:52] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-23 23:37:52] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-23 23:37:52] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-23 23:37:52] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-23 23:37:52] Producto por nombre agregado a resultados (ID: 62) [2025-10-23 23:37:52] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-23 23:37:52] Se encontraron 1 resultados en total. [2025-10-23 23:37:52] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:38:01] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:38:01] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:38:01] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:38:01] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:38:01] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:38:01] DEBUG SESSION STATUS: 2 [2025-10-23 23:38:01] Negocio en sesión: 78.216.219-5 [2025-10-23 23:38:01] Nombre: SGB-ERP SpA [2025-10-23 23:38:01] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:38:01] Conexión exitosa a la base de datos [2025-10-23 23:38:01] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:38:01] Buscando producto con código/nombre: berli [2025-10-23 23:38:01] DEBUG: Código recibido: 'berli' (longitud: 5) [2025-10-23 23:38:01] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:38:01] No se encontró producto_id para el código exacto 'berli'. Intentando búsqueda parcial... [2025-10-23 23:38:01] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:38:01] Códigos parciales encontrados: 0 [2025-10-23 23:38:01] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:38:01] Productos encontrados por nombre: 1 [2025-10-23 23:38:01] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:38:01] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-23 23:38:01] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:38:01] Códigos encontrados para ID 62: 1 [2025-10-23 23:38:01] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}] [2025-10-23 23:38:01] Códigos con stock disponible: 1 [2025-10-23 23:38:01] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-23 23:38:01] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-23 23:38:01] Producto especial por nombre con stock disponible: 50 [2025-10-23 23:38:01] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:38:01] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null} [2025-10-23 23:38:01] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-23 23:38:01] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-23 23:38:01] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-23 23:38:01] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-23 23:38:01] Producto por nombre agregado a resultados (ID: 62) [2025-10-23 23:38:01] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-23 23:38:01] Se encontraron 1 resultados en total. [2025-10-23 23:38:01] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:38:31] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:38:31] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:38:31] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:38:31] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:38:31] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:38:31] DEBUG SESSION STATUS: 2 [2025-10-23 23:38:31] Negocio en sesión: 78.216.219-5 [2025-10-23 23:38:31] Nombre: SGB-ERP SpA [2025-10-23 23:38:31] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:38:31] Conexión exitosa a la base de datos [2025-10-23 23:38:31] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:38:31] Buscando producto con código/nombre: berlines [2025-10-23 23:38:31] DEBUG: Código recibido: 'berlines' (longitud: 8) [2025-10-23 23:38:31] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:38:31] No se encontró producto_id para el código exacto 'berlines'. Intentando búsqueda parcial... [2025-10-23 23:38:31] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:38:31] Códigos parciales encontrados: 0 [2025-10-23 23:38:31] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:38:31] Productos encontrados por nombre: 1 [2025-10-23 23:38:31] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:38:31] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-23 23:38:31] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:38:31] Códigos encontrados para ID 62: 1 [2025-10-23 23:38:31] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}] [2025-10-23 23:38:31] Códigos con stock disponible: 1 [2025-10-23 23:38:31] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-23 23:38:31] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-23 23:38:31] Producto especial por nombre con stock disponible: 50 [2025-10-23 23:38:31] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:38:31] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null} [2025-10-23 23:38:31] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-23 23:38:31] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-23 23:38:31] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-23 23:38:31] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-23 23:38:31] Producto por nombre agregado a resultados (ID: 62) [2025-10-23 23:38:31] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-23 23:38:31] Se encontraron 1 resultados en total. [2025-10-23 23:38:31] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:38:34] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:38:34] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:38:34] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:38:34] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:38:34] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:38:34] DEBUG SESSION STATUS: 2 [2025-10-23 23:38:34] Negocio en sesión: 78.216.219-5 [2025-10-23 23:38:34] Nombre: SGB-ERP SpA [2025-10-23 23:38:34] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:38:34] Conexión exitosa a la base de datos [2025-10-23 23:38:34] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:38:34] Buscando producto con código/nombre: * [2025-10-23 23:38:34] DEBUG: Código recibido: '*' (longitud: 1) [2025-10-23 23:38:34] Solicitud para mostrar todos los productos [2025-10-23 23:38:34] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-10-23 23:38:34] Productos encontrados: 5 [2025-10-23 23:38:34] Producto 0: BERLINES CON MANJAR - Códigos adicionales: NULL [2025-10-23 23:38:34] Producto 1: COCACOLA 2LT DESECHABLE - Códigos adicionales: NULL [2025-10-23 23:38:34] Producto 2: GALLETAS OBLEA - Códigos adicionales: 17612733489089||manual [2025-10-23 23:38:34] Producto 3: PAN MARRAQUETA - Códigos adicionales: NULL [2025-10-23 23:38:34] Producto 4: PEPSI 3LT DESECHABLE - Códigos adicionales: 23423||diferente;;4234234||diferente [2025-10-23 23:38:34] Producto agregado a resultados (ID: 62): BERLINES CON MANJAR [2025-10-23 23:38:34] Producto agregado a resultados (ID: 51): COCACOLA 2LT DESECHABLE [2025-10-23 23:38:34] Producto agregado a resultados (ID: 65): GALLETAS OBLEA [2025-10-23 23:38:34] Producto agregado a resultados (ID: 64): PAN MARRAQUETA [2025-10-23 23:38:34] Producto agregado a resultados (ID: 66): PEPSI 3LT DESECHABLE [2025-10-23 23:38:34] Total de productos únicos encontrados: 5 [2025-10-23 23:38:56] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:38:56] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:38:56] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:38:56] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:38:56] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:38:56] DEBUG SESSION STATUS: 2 [2025-10-23 23:38:56] Negocio en sesión: 78.216.219-5 [2025-10-23 23:38:56] Nombre: SGB-ERP SpA [2025-10-23 23:38:56] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:38:56] Conexión exitosa a la base de datos [2025-10-23 23:38:56] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:38:56] Buscando producto con código/nombre: marra [2025-10-23 23:38:56] DEBUG: Código recibido: 'marra' (longitud: 5) [2025-10-23 23:38:56] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:38:56] No se encontró producto_id para el código exacto 'marra'. Intentando búsqueda parcial... [2025-10-23 23:38:56] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:38:56] Códigos parciales encontrados: 0 [2025-10-23 23:38:56] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:38:56] Productos encontrados por nombre: 1 [2025-10-23 23:38:56] Procesando producto encontrado por nombre: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:38:56] Usando lote específico detectado: ninguno para producto ID: 64 [2025-10-23 23:38:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:38:56] Códigos encontrados para ID 64: 1 [2025-10-23 23:38:56] Detalle de códigos: [{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}] [2025-10-23 23:38:56] Códigos con stock disponible: 1 [2025-10-23 23:38:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-23 23:38:56] Producto especial por nombre - Stock desde productos/inventario: 25 [2025-10-23 23:38:56] Producto especial por nombre con stock disponible: 25 [2025-10-23 23:38:56] Producto ESPECIAL ID: 64 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:38:56] Usando primer código disponible en orden FIFO para ID 64: {"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null} [2025-10-23 23:38:56] DEBUGGING STOCK (nombre): stockTotal original = 25 (tipo: double) [2025-10-23 23:38:56] DEBUGGING STOCK (nombre): después de number_format = 25. [2025-10-23 23:38:56] DEBUGGING STOCK (nombre): después de rtrim = 25 [2025-10-23 23:38:56] DEBUGGING STOCK (nombre): stock_texto final = 25 kg [2025-10-23 23:38:56] Producto por nombre agregado a resultados (ID: 64) [2025-10-23 23:38:56] Datos finales del producto: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}],"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-23 23:38:56] Se encontraron 1 resultados en total. [2025-10-23 23:38:56] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:39:04] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:39:04] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:39:04] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:39:04] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:39:04] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:39:04] DEBUG SESSION STATUS: 2 [2025-10-23 23:39:04] Negocio en sesión: 78.216.219-5 [2025-10-23 23:39:04] Nombre: SGB-ERP SpA [2025-10-23 23:39:04] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:39:04] Conexión exitosa a la base de datos [2025-10-23 23:39:04] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:39:04] Buscando producto con código/nombre: marra [2025-10-23 23:39:04] DEBUG: Código recibido: 'marra' (longitud: 5) [2025-10-23 23:39:04] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:39:04] No se encontró producto_id para el código exacto 'marra'. Intentando búsqueda parcial... [2025-10-23 23:39:04] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:39:04] Códigos parciales encontrados: 0 [2025-10-23 23:39:04] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:39:04] Productos encontrados por nombre: 1 [2025-10-23 23:39:04] Procesando producto encontrado por nombre: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:39:04] Usando lote específico detectado: ninguno para producto ID: 64 [2025-10-23 23:39:04] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:39:04] Códigos encontrados para ID 64: 1 [2025-10-23 23:39:04] Detalle de códigos: [{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}] [2025-10-23 23:39:04] Códigos con stock disponible: 1 [2025-10-23 23:39:04] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-23 23:39:04] Producto especial por nombre - Stock desde productos/inventario: 25 [2025-10-23 23:39:04] Producto especial por nombre con stock disponible: 25 [2025-10-23 23:39:04] Producto ESPECIAL ID: 64 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:39:04] Usando primer código disponible en orden FIFO para ID 64: {"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null} [2025-10-23 23:39:04] DEBUGGING STOCK (nombre): stockTotal original = 25 (tipo: double) [2025-10-23 23:39:04] DEBUGGING STOCK (nombre): después de number_format = 25. [2025-10-23 23:39:04] DEBUGGING STOCK (nombre): después de rtrim = 25 [2025-10-23 23:39:04] DEBUGGING STOCK (nombre): stock_texto final = 25 kg [2025-10-23 23:39:04] Producto por nombre agregado a resultados (ID: 64) [2025-10-23 23:39:04] Datos finales del producto: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}],"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-23 23:39:04] Se encontraron 1 resultados en total. [2025-10-23 23:39:04] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:39:38] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:39:38] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:39:38] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:39:38] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:39:38] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:39:38] DEBUG SESSION STATUS: 2 [2025-10-23 23:39:38] Negocio en sesión: 78.216.219-5 [2025-10-23 23:39:38] Nombre: SGB-ERP SpA [2025-10-23 23:39:38] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:39:38] Conexión exitosa a la base de datos [2025-10-23 23:39:38] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:39:38] Buscando producto con código/nombre: coca [2025-10-23 23:39:38] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-10-23 23:39:38] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:39:38] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-10-23 23:39:38] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:39:38] Códigos parciales encontrados: 0 [2025-10-23 23:39:38] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:39:38] Productos encontrados por nombre: 1 [2025-10-23 23:39:38] Procesando producto encontrado por nombre: {"id":51,"codigo":"17612461268521","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:39:38] Usando lote específico detectado: ninguno para producto ID: 51 [2025-10-23 23:39:38] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:39:38] Códigos encontrados para ID 51: 1 [2025-10-23 23:39:38] Detalle de códigos: [{"id":74,"codigo":"17612461268521","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-10-23 23:39:38] Códigos con stock disponible: 1 [2025-10-23 23:39:38] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:39:38] Stock total calculado para ID 51: 100 [2025-10-23 23:39:38] Producto NORMAL ID: 51 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:39:38] Usando primer código disponible en orden FIFO para ID 51: {"id":74,"codigo":"17612461268521","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-10-23 23:39:38] Producto por nombre agregado a resultados (ID: 51) [2025-10-23 23:39:38] Datos finales del producto: {"id":51,"codigo":"17612461268521","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":74,"codigo":"17612461268521","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2000.00","stock_texto":100,"stock_disponible":true} [2025-10-23 23:39:38] Se encontraron 1 resultados en total. [2025-10-23 23:39:38] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:39:57] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:39:57] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:39:57] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:39:57] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/inventario.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:39:57] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:39:57] DEBUG SESSION STATUS: 2 [2025-10-23 23:39:57] Negocio en sesión: 78.216.219-5 [2025-10-23 23:39:57] Nombre: SGB-ERP SpA [2025-10-23 23:39:57] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:39:57] Conexión exitosa a la base de datos [2025-10-23 23:39:57] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:39:57] Buscando producto con código/nombre: pepsi [2025-10-23 23:39:57] DEBUG: Código recibido: 'pepsi' (longitud: 5) [2025-10-23 23:39:57] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:39:57] No se encontró producto_id para el código exacto 'pepsi'. Intentando búsqueda parcial... [2025-10-23 23:39:57] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:39:57] Códigos parciales encontrados: 0 [2025-10-23 23:39:57] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:39:57] Productos encontrados por nombre: 1 [2025-10-23 23:39:57] Procesando producto encontrado por nombre: {"id":66,"codigo":"234234","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"1840.00","precio_final_publico":"2190.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"67.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"23423||diferente;;4234234||diferente"} [2025-10-23 23:39:57] Usando lote específico detectado: ninguno para producto ID: 66 [2025-10-23 23:39:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:39:57] Códigos encontrados para ID 66: 3 [2025-10-23 23:39:57] Detalle de códigos: [{"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"20.00","fecha_vencimiento":null},{"id":95,"codigo":"23423","tipo_codigo":"diferente","cantidad":"32.00","fecha_vencimiento":null},{"id":96,"codigo":"4234234","tipo_codigo":"diferente","cantidad":"15.00","fecha_vencimiento":null}] [2025-10-23 23:39:57] Códigos con stock disponible: 3 [2025-10-23 23:39:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-23 23:39:57] Stock total calculado para ID 66: 67 [2025-10-23 23:39:57] Producto NORMAL ID: 66 - Tiene lotes: SÍ (cantidad: 3) [2025-10-23 23:39:57] Usando primer código disponible en orden FIFO para ID 66: {"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"20.00","fecha_vencimiento":null} [2025-10-23 23:39:57] Producto por nombre agregado a resultados (ID: 66) [2025-10-23 23:39:57] Datos finales del producto: {"id":66,"codigo":"234234","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"1840.00","precio_final_publico":"2190.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":67,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Pepsi","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"23423||diferente;;4234234||diferente","cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"20.00","fecha_vencimiento":null},{"id":95,"codigo":"23423","tipo_codigo":"diferente","cantidad":"32.00","fecha_vencimiento":null},{"id":96,"codigo":"4234234","tipo_codigo":"diferente","cantidad":"15.00","fecha_vencimiento":null}],"precio":"1840.00","stock_texto":67,"stock_disponible":true} [2025-10-23 23:39:57] Se encontraron 1 resultados en total. [2025-10-23 23:39:57] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:40:07] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:40:07] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:40:07] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:40:07] DEBUG SESSION: {"last_regeneration":1761273037,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/inventario.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-23 23:40:07] DEBUG SESSION ID: f9866dv1b1994ovaqpcor2dabj [2025-10-23 23:40:07] DEBUG SESSION STATUS: 2 [2025-10-23 23:40:07] Negocio en sesión: 78.216.219-5 [2025-10-23 23:40:07] Nombre: SGB-ERP SpA [2025-10-23 23:40:07] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:40:07] Conexión exitosa a la base de datos [2025-10-23 23:40:07] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-23 23:40:07] Buscando producto con código/nombre: galletas [2025-10-23 23:40:07] DEBUG: Código recibido: 'galletas' (longitud: 8) [2025-10-23 23:40:07] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:40:07] No se encontró producto_id para el código exacto 'galletas'. Intentando búsqueda parcial... [2025-10-23 23:40:07] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:40:07] Códigos parciales encontrados: 0 [2025-10-23 23:40:07] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:40:07] Productos encontrados por nombre: 1 [2025-10-23 23:40:07] Procesando producto encontrado por nombre: {"id":65,"codigo":"17612733457569","nombre":"GALLETAS OBLEA","precio_venta":"1370.00","precio_final_publico":"1630.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"27.00","cantidad_por_unidad":"140.00","tipo_codigo":"manual","marca_nombre":"Mckay","tipo_nombre":"Galletas","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":"17612733489089||manual"} [2025-10-23 23:40:07] Usando lote específico detectado: ninguno para producto ID: 65 [2025-10-23 23:40:07] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:40:07] Códigos encontrados para ID 65: 2 [2025-10-23 23:40:07] Detalle de códigos: [{"id":92,"codigo":"17612733457569","tipo_codigo":"manual","cantidad":"15.00","fecha_vencimiento":null},{"id":93,"codigo":"17612733489089","tipo_codigo":"manual","cantidad":"12.00","fecha_vencimiento":null}] [2025-10-23 23:40:07] Códigos con stock disponible: 2 [2025-10-23 23:40:07] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:40:07] Stock total calculado para ID 65: 27 [2025-10-23 23:40:07] Producto NORMAL ID: 65 - Tiene lotes: SÍ (cantidad: 2) [2025-10-23 23:40:07] Usando primer código disponible en orden FIFO para ID 65: {"id":92,"codigo":"17612733457569","tipo_codigo":"manual","cantidad":"15.00","fecha_vencimiento":null} [2025-10-23 23:40:07] Producto por nombre agregado a resultados (ID: 65) [2025-10-23 23:40:07] Datos finales del producto: {"id":65,"codigo":"17612733457569","nombre":"GALLETAS OBLEA","precio_venta":"1370.00","precio_final_publico":"1630.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":27,"cantidad_por_unidad":"140.00","tipo_codigo":"manual","marca_nombre":"Mckay","tipo_nombre":"Galletas","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":"17612733489089||manual","cantidad_codigo":"15.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":92,"codigo":"17612733457569","tipo_codigo":"manual","cantidad":"15.00","fecha_vencimiento":null},{"id":93,"codigo":"17612733489089","tipo_codigo":"manual","cantidad":"12.00","fecha_vencimiento":null}],"precio":"1370.00","stock_texto":27,"stock_disponible":true} [2025-10-23 23:40:07] Se encontraron 1 resultados en total. [2025-10-23 23:40:07] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:47:29] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:47:29] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:47:29] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:47:29] DEBUG SESSION: {"last_regeneration":1761273767,"negocio_rut":"17.669.023-2","negocio_id":"17.669.023-2","negocio_nombre":"Consultora de Catalogo Esika","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2","id_sesion_caja":"13","sesion_caja_id":"13","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2"}} [2025-10-23 23:47:29] DEBUG SESSION ID: 0ffg4v1r35mtp48ob0tpqkf369 [2025-10-23 23:47:29] DEBUG SESSION STATUS: 2 [2025-10-23 23:47:29] Negocio en sesión: 17.669.023-2 [2025-10-23 23:47:29] Nombre: Consultora de Catalogo Esika [2025-10-23 23:47:29] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:47:29] Conexión exitosa a la base de datos [2025-10-23 23:47:29] RUT del negocio en sesión para filtro: 17.669.023-2 [2025-10-23 23:47:29] Buscando producto con código/nombre: parecetamol [2025-10-23 23:47:29] DEBUG: Código recibido: 'parecetamol' (longitud: 11) [2025-10-23 23:47:29] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:47:29] No se encontró producto_id para el código exacto 'parecetamol'. Intentando búsqueda parcial... [2025-10-23 23:47:29] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:47:29] Códigos parciales encontrados: 0 [2025-10-23 23:47:29] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:47:29] Productos encontrados por nombre: 0 [2025-10-23 23:47:29] No se encontró ningún producto con stock por ningún método [2025-10-23 23:47:29] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-10-23 23:47:32] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:47:32] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:47:32] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:47:32] DEBUG SESSION: {"last_regeneration":1761273767,"negocio_rut":"17.669.023-2","negocio_id":"17.669.023-2","negocio_nombre":"Consultora de Catalogo Esika","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2","id_sesion_caja":"13","sesion_caja_id":"13","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2"}} [2025-10-23 23:47:32] DEBUG SESSION ID: 0ffg4v1r35mtp48ob0tpqkf369 [2025-10-23 23:47:32] DEBUG SESSION STATUS: 2 [2025-10-23 23:47:32] Negocio en sesión: 17.669.023-2 [2025-10-23 23:47:32] Nombre: Consultora de Catalogo Esika [2025-10-23 23:47:32] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:47:32] Conexión exitosa a la base de datos [2025-10-23 23:47:32] RUT del negocio en sesión para filtro: 17.669.023-2 [2025-10-23 23:47:32] Buscando producto con código/nombre: pareceta [2025-10-23 23:47:32] DEBUG: Código recibido: 'pareceta' (longitud: 8) [2025-10-23 23:47:32] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:47:32] No se encontró producto_id para el código exacto 'pareceta'. Intentando búsqueda parcial... [2025-10-23 23:47:32] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:47:32] Códigos parciales encontrados: 0 [2025-10-23 23:47:32] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:47:32] Productos encontrados por nombre: 0 [2025-10-23 23:47:32] No se encontró ningún producto con stock por ningún método [2025-10-23 23:47:32] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-10-23 23:47:35] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:47:35] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:47:35] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:47:35] DEBUG SESSION: {"last_regeneration":1761273767,"negocio_rut":"17.669.023-2","negocio_id":"17.669.023-2","negocio_nombre":"Consultora de Catalogo Esika","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2","id_sesion_caja":"13","sesion_caja_id":"13","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2"}} [2025-10-23 23:47:35] DEBUG SESSION ID: 0ffg4v1r35mtp48ob0tpqkf369 [2025-10-23 23:47:35] DEBUG SESSION STATUS: 2 [2025-10-23 23:47:35] Negocio en sesión: 17.669.023-2 [2025-10-23 23:47:35] Nombre: Consultora de Catalogo Esika [2025-10-23 23:47:35] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:47:35] Conexión exitosa a la base de datos [2025-10-23 23:47:35] RUT del negocio en sesión para filtro: 17.669.023-2 [2025-10-23 23:47:35] Buscando producto con código/nombre: * [2025-10-23 23:47:35] DEBUG: Código recibido: '*' (longitud: 1) [2025-10-23 23:47:35] Solicitud para mostrar todos los productos [2025-10-23 23:47:35] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-10-23 23:47:35] Productos encontrados: 3 [2025-10-23 23:47:35] Producto 0: CUADERNO UNIVERSITARIO 100 HOJAS - Códigos adicionales: NULL [2025-10-23 23:47:35] Producto 1: PAÑOS DESINFECTANTE - Códigos adicionales: NULL [2025-10-23 23:47:35] Producto 2: PARACETAMOL - Códigos adicionales: NULL [2025-10-23 23:47:35] Producto agregado a resultados (ID: 69): CUADERNO UNIVERSITARIO 100 HOJAS [2025-10-23 23:47:35] Producto agregado a resultados (ID: 68): PAÑOS DESINFECTANTE [2025-10-23 23:47:35] Producto agregado a resultados (ID: 67): PARACETAMOL [2025-10-23 23:47:35] Total de productos únicos encontrados: 3 [2025-10-23 23:47:44] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:47:44] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:47:44] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:47:44] DEBUG SESSION: {"last_regeneration":1761273767,"negocio_rut":"17.669.023-2","negocio_id":"17.669.023-2","negocio_nombre":"Consultora de Catalogo Esika","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2","id_sesion_caja":"13","sesion_caja_id":"13","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2"}} [2025-10-23 23:47:44] DEBUG SESSION ID: 0ffg4v1r35mtp48ob0tpqkf369 [2025-10-23 23:47:44] DEBUG SESSION STATUS: 2 [2025-10-23 23:47:44] Negocio en sesión: 17.669.023-2 [2025-10-23 23:47:44] Nombre: Consultora de Catalogo Esika [2025-10-23 23:47:44] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:47:44] Conexión exitosa a la base de datos [2025-10-23 23:47:44] RUT del negocio en sesión para filtro: 17.669.023-2 [2025-10-23 23:47:44] Buscando producto con código/nombre: Paracetamol [2025-10-23 23:47:44] DEBUG: Código recibido: 'Paracetamol' (longitud: 11) [2025-10-23 23:47:44] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:47:44] No se encontró producto_id para el código exacto 'Paracetamol'. Intentando búsqueda parcial... [2025-10-23 23:47:44] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:47:44] Códigos parciales encontrados: 0 [2025-10-23 23:47:44] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:47:44] Productos encontrados por nombre: 1 [2025-10-23 23:47:44] Procesando producto encontrado por nombre: {"id":67,"codigo":"17612738372223","nombre":"PARACETAMOL","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"19.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Bayer","tipo_nombre":"Analg\u00e9sicos","categoria_nombre":"Farmacia","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:47:44] Usando lote específico detectado: ninguno para producto ID: 67 [2025-10-23 23:47:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:47:44] Códigos encontrados para ID 67: 1 [2025-10-23 23:47:44] Detalle de códigos: [{"id":97,"codigo":"17612738372223","tipo_codigo":"manual","cantidad":"19.00","fecha_vencimiento":null}] [2025-10-23 23:47:44] Códigos con stock disponible: 1 [2025-10-23 23:47:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:47:44] Stock total calculado para ID 67: 19 [2025-10-23 23:47:44] Producto NORMAL ID: 67 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:47:44] Usando primer código disponible en orden FIFO para ID 67: {"id":97,"codigo":"17612738372223","tipo_codigo":"manual","cantidad":"19.00","fecha_vencimiento":null} [2025-10-23 23:47:44] Producto por nombre agregado a resultados (ID: 67) [2025-10-23 23:47:44] Datos finales del producto: {"id":67,"codigo":"17612738372223","nombre":"PARACETAMOL","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":19,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Bayer","tipo_nombre":"Analg\u00e9sicos","categoria_nombre":"Farmacia","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"19.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":97,"codigo":"17612738372223","tipo_codigo":"manual","cantidad":"19.00","fecha_vencimiento":null}],"precio":"840.00","stock_texto":19,"stock_disponible":true} [2025-10-23 23:47:44] Se encontraron 1 resultados en total. [2025-10-23 23:47:44] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:48:01] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:48:01] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:48:01] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:48:01] DEBUG SESSION: {"last_regeneration":1761273767,"negocio_rut":"17.669.023-2","negocio_id":"17.669.023-2","negocio_nombre":"Consultora de Catalogo Esika","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2","id_sesion_caja":"13","sesion_caja_id":"13","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2"}} [2025-10-23 23:48:01] DEBUG SESSION ID: 0ffg4v1r35mtp48ob0tpqkf369 [2025-10-23 23:48:01] DEBUG SESSION STATUS: 2 [2025-10-23 23:48:01] Negocio en sesión: 17.669.023-2 [2025-10-23 23:48:01] Nombre: Consultora de Catalogo Esika [2025-10-23 23:48:01] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:48:01] Conexión exitosa a la base de datos [2025-10-23 23:48:01] RUT del negocio en sesión para filtro: 17.669.023-2 [2025-10-23 23:48:01] Buscando producto con código/nombre: paño [2025-10-23 23:48:01] DEBUG: Código recibido: 'paño' (longitud: 5) [2025-10-23 23:48:01] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:48:01] No se encontró producto_id para el código exacto 'paño'. Intentando búsqueda parcial... [2025-10-23 23:48:01] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:48:01] Códigos parciales encontrados: 0 [2025-10-23 23:48:01] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:48:01] Productos encontrados por nombre: 1 [2025-10-23 23:48:01] Procesando producto encontrado por nombre: {"id":68,"codigo":"17612739162759","nombre":"PA\u00d1OS DESINFECTANTE","precio_venta":"3353.00","precio_final_publico":"3990.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"3.00","tipo_codigo":"masivo","marca_nombre":"Cif","tipo_nombre":"Esponjas y Pa\u00d1\u00b1os","categoria_nombre":"Limpieza para el Hogar","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:48:01] Usando lote específico detectado: ninguno para producto ID: 68 [2025-10-23 23:48:01] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:48:01] Códigos encontrados para ID 68: 1 [2025-10-23 23:48:01] Detalle de códigos: [{"id":98,"codigo":"17612739162759","tipo_codigo":"masivo","cantidad":"20.00","fecha_vencimiento":null}] [2025-10-23 23:48:01] Códigos con stock disponible: 1 [2025-10-23 23:48:01] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-10-23 23:48:01] Stock total calculado para ID 68: 20 [2025-10-23 23:48:01] Producto NORMAL ID: 68 - Tiene lotes: NO (cantidad: 0) [2025-10-23 23:48:01] Usando primer código disponible en orden FIFO para ID 68: {"id":98,"codigo":"17612739162759","tipo_codigo":"masivo","cantidad":"20.00","fecha_vencimiento":null} [2025-10-23 23:48:01] Producto por nombre agregado a resultados (ID: 68) [2025-10-23 23:48:01] Datos finales del producto: {"id":68,"codigo":"17612739162759","nombre":"PA\u00d1OS DESINFECTANTE","precio_venta":"3353.00","precio_final_publico":"3990.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"3.00","tipo_codigo":"masivo","marca_nombre":"Cif","tipo_nombre":"Esponjas y Pa\u00d1\u00b1os","categoria_nombre":"Limpieza para el Hogar","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":98,"codigo":"17612739162759","tipo_codigo":"masivo","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3353.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:48:01] Se encontraron 1 resultados en total. [2025-10-23 23:48:01] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-23 23:48:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-23 23:48:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-23 23:48:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-23 23:48:06] DEBUG SESSION: {"last_regeneration":1761273767,"negocio_rut":"17.669.023-2","negocio_id":"17.669.023-2","negocio_nombre":"Consultora de Catalogo Esika","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2","id_sesion_caja":"13","sesion_caja_id":"13","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2"}} [2025-10-23 23:48:06] DEBUG SESSION ID: 0ffg4v1r35mtp48ob0tpqkf369 [2025-10-23 23:48:06] DEBUG SESSION STATUS: 2 [2025-10-23 23:48:06] Negocio en sesión: 17.669.023-2 [2025-10-23 23:48:06] Nombre: Consultora de Catalogo Esika [2025-10-23 23:48:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-23 23:48:06] Conexión exitosa a la base de datos [2025-10-23 23:48:06] RUT del negocio en sesión para filtro: 17.669.023-2 [2025-10-23 23:48:06] Buscando producto con código/nombre: cuaderno [2025-10-23 23:48:06] DEBUG: Código recibido: 'cuaderno' (longitud: 8) [2025-10-23 23:48:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-23 23:48:06] No se encontró producto_id para el código exacto 'cuaderno'. Intentando búsqueda parcial... [2025-10-23 23:48:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-23 23:48:06] Códigos parciales encontrados: 0 [2025-10-23 23:48:06] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-23 23:48:06] Productos encontrados por nombre: 1 [2025-10-23 23:48:06] Procesando producto encontrado por nombre: {"id":69,"codigo":"17612739947545","nombre":"CUADERNO UNIVERSITARIO 100 HOJAS","precio_venta":"1496.00","precio_final_publico":"1780.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Torre","tipo_nombre":"Cuadernos","categoria_nombre":"Papeler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-23 23:48:06] Usando lote específico detectado: ninguno para producto ID: 69 [2025-10-23 23:48:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-23 23:48:06] Códigos encontrados para ID 69: 1 [2025-10-23 23:48:06] Detalle de códigos: [{"id":99,"codigo":"17612739947545","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-10-23 23:48:06] Códigos con stock disponible: 1 [2025-10-23 23:48:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-23 23:48:06] Stock total calculado para ID 69: 20 [2025-10-23 23:48:06] Producto NORMAL ID: 69 - Tiene lotes: SÍ (cantidad: 1) [2025-10-23 23:48:06] Usando primer código disponible en orden FIFO para ID 69: {"id":99,"codigo":"17612739947545","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-10-23 23:48:06] Producto por nombre agregado a resultados (ID: 69) [2025-10-23 23:48:06] Datos finales del producto: {"id":69,"codigo":"17612739947545","nombre":"CUADERNO UNIVERSITARIO 100 HOJAS","precio_venta":"1496.00","precio_final_publico":"1780.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Torre","tipo_nombre":"Cuadernos","categoria_nombre":"Papeler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":99,"codigo":"17612739947545","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"1496.00","stock_texto":20,"stock_disponible":true} [2025-10-23 23:48:06] Se encontraron 1 resultados en total. [2025-10-23 23:48:06] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-24 01:01:43] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-24 01:01:43] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-24 01:01:43] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-24 01:01:43] DEBUG SESSION: {"last_regeneration":1761278358,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":10,"sesion_caja_id":10,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-24 01:01:43] DEBUG SESSION ID: veYaHdmrMfBPHDxuM3oCv-wNHa9hqn3swKPeObxzdarMuWn, [2025-10-24 01:01:43] DEBUG SESSION STATUS: 2 [2025-10-24 01:01:43] Negocio en sesión: 78.216.219-5 [2025-10-24 01:01:43] Nombre: SGB-ERP SpA [2025-10-24 01:01:43] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-24 01:01:43] Conexión exitosa a la base de datos [2025-10-24 01:01:43] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-24 01:01:43] Buscando producto con código/nombre: Ber [2025-10-24 01:01:43] DEBUG: Código recibido: 'Ber' (longitud: 3) [2025-10-24 01:01:43] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-24 01:01:43] No se encontró producto_id para el código exacto 'Ber'. Intentando búsqueda parcial... [2025-10-24 01:01:43] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-24 01:01:43] Códigos parciales encontrados: 1 [2025-10-24 01:01:43] Procesando código parcial: BER-062 (ID: 62) [2025-10-24 01:01:43] Producto ID: 62 - Tiene lotes: NO (cantidad: 0) [2025-10-24 01:01:43] Producto ID: 62 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-24 01:01:43] DEBUGGING STOCK (código parcial): stockTotal original = 50 (tipo: double) [2025-10-24 01:01:43] DEBUGGING STOCK (código parcial): después de number_format = 50. [2025-10-24 01:01:43] DEBUGGING STOCK (código parcial): después de rtrim = 50 [2025-10-24 01:01:43] DEBUGGING STOCK (código parcial): stock_texto final = 50 kg [2025-10-24 01:01:43] Añadido producto con código parcial: {"id":62,"nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"BER-062","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":89,"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-24 01:01:43] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-24 01:01:43] Productos encontrados por nombre: 1 [2025-10-24 01:01:43] Omitiendo producto por nombre duplicado (ID: 62) - ya procesado por código [2025-10-24 01:01:43] Se encontraron 1 resultados en total. [2025-10-24 01:01:43] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-24 01:01:53] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-24 01:01:53] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-24 01:01:53] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-24 01:01:53] DEBUG SESSION: {"last_regeneration":1761278358,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":10,"sesion_caja_id":10,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-24 01:01:53] DEBUG SESSION ID: veYaHdmrMfBPHDxuM3oCv-wNHa9hqn3swKPeObxzdarMuWn, [2025-10-24 01:01:53] DEBUG SESSION STATUS: 2 [2025-10-24 01:01:53] Negocio en sesión: 78.216.219-5 [2025-10-24 01:01:53] Nombre: SGB-ERP SpA [2025-10-24 01:01:53] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-24 01:01:53] Conexión exitosa a la base de datos [2025-10-24 01:01:53] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-24 01:01:53] Buscando producto con código/nombre: * [2025-10-24 01:01:53] DEBUG: Código recibido: '*' (longitud: 1) [2025-10-24 01:01:53] Solicitud para mostrar todos los productos [2025-10-24 01:01:53] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-10-24 01:01:53] Productos encontrados: 5 [2025-10-24 01:01:53] Producto 0: BERLINES CON MANJAR - Códigos adicionales: NULL [2025-10-24 01:01:53] Producto 1: COCACOLA 2LT DESECHABLE - Códigos adicionales: NULL [2025-10-24 01:01:53] Producto 2: GALLETAS OBLEA - Códigos adicionales: 17612733489089||manual [2025-10-24 01:01:53] Producto 3: PAN MARRAQUETA - Códigos adicionales: NULL [2025-10-24 01:01:53] Producto 4: PEPSI 3LT DESECHABLE - Códigos adicionales: 23423||diferente;;4234234||diferente [2025-10-24 01:01:53] Producto agregado a resultados (ID: 62): BERLINES CON MANJAR [2025-10-24 01:01:53] Producto agregado a resultados (ID: 51): COCACOLA 2LT DESECHABLE [2025-10-24 01:01:53] Producto agregado a resultados (ID: 65): GALLETAS OBLEA [2025-10-24 01:01:53] Producto agregado a resultados (ID: 64): PAN MARRAQUETA [2025-10-24 01:01:53] Producto agregado a resultados (ID: 66): PEPSI 3LT DESECHABLE [2025-10-24 01:01:53] Total de productos únicos encontrados: 5 [2025-10-24 01:03:34] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-24 01:03:34] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-24 01:03:34] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-24 01:03:34] DEBUG SESSION: {"last_regeneration":1761278358,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":10,"sesion_caja_id":10,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-24 01:03:34] DEBUG SESSION ID: veYaHdmrMfBPHDxuM3oCv-wNHa9hqn3swKPeObxzdarMuWn, [2025-10-24 01:03:34] DEBUG SESSION STATUS: 2 [2025-10-24 01:03:34] Negocio en sesión: 78.216.219-5 [2025-10-24 01:03:34] Nombre: SGB-ERP SpA [2025-10-24 01:03:34] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-24 01:03:34] Conexión exitosa a la base de datos [2025-10-24 01:03:34] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-24 01:03:34] Buscando producto con código/nombre: Ber [2025-10-24 01:03:34] DEBUG: Código recibido: 'Ber' (longitud: 3) [2025-10-24 01:03:34] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-24 01:03:34] No se encontró producto_id para el código exacto 'Ber'. Intentando búsqueda parcial... [2025-10-24 01:03:34] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-24 01:03:34] Códigos parciales encontrados: 1 [2025-10-24 01:03:34] Procesando código parcial: BER-062 (ID: 62) [2025-10-24 01:03:34] Producto ID: 62 - Tiene lotes: NO (cantidad: 0) [2025-10-24 01:03:34] Producto ID: 62 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-24 01:03:34] DEBUGGING STOCK (código parcial): stockTotal original = 50 (tipo: double) [2025-10-24 01:03:34] DEBUGGING STOCK (código parcial): después de number_format = 50. [2025-10-24 01:03:34] DEBUGGING STOCK (código parcial): después de rtrim = 50 [2025-10-24 01:03:34] DEBUGGING STOCK (código parcial): stock_texto final = 50 kg [2025-10-24 01:03:34] Añadido producto con código parcial: {"id":62,"nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"BER-062","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":89,"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-24 01:03:34] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-24 01:03:34] Productos encontrados por nombre: 1 [2025-10-24 01:03:34] Omitiendo producto por nombre duplicado (ID: 62) - ya procesado por código [2025-10-24 01:03:34] Se encontraron 1 resultados en total. [2025-10-24 01:03:34] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-24 20:30:18] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-24 20:30:18] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-24 20:30:18] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-24 20:30:18] DEBUG SESSION: {"last_regeneration":1761348560} [2025-10-24 20:30:18] DEBUG SESSION ID: jlihqesi69lkn3li6j1p6k8vs5 [2025-10-24 20:30:18] DEBUG SESSION STATUS: 2 [2025-10-24 20:30:18] Error de autenticación. SESSION: {"last_regeneration":1761348560} [2025-10-24 23:11:03] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-24 23:11:03] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-24 23:11:03] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-24 23:11:03] DEBUG SESSION: {"last_regeneration":1761358212,"negocio_rut":"17.669.023-2","negocio_id":"17.669.023-2","negocio_nombre":"Consultora de Catalogo Esika","negocio_vencimiento":"2025-11-22","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2","id_sesion_caja":13,"sesion_caja_id":13,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.669.023-2"}} [2025-10-24 23:11:03] DEBUG SESSION ID: 8rp4gk0ljocbuo690b6q4bcsg8 [2025-10-24 23:11:03] DEBUG SESSION STATUS: 2 [2025-10-24 23:11:03] Negocio en sesión: 17.669.023-2 [2025-10-24 23:11:03] Nombre: Consultora de Catalogo Esika [2025-10-24 23:11:03] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-24 23:11:03] Conexión exitosa a la base de datos [2025-10-24 23:11:03] RUT del negocio en sesión para filtro: 17.669.023-2 [2025-10-24 23:11:03] Buscando producto con código/nombre: coca [2025-10-24 23:11:03] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-10-24 23:11:03] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-24 23:11:03] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-10-24 23:11:03] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-24 23:11:03] Códigos parciales encontrados: 0 [2025-10-24 23:11:03] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-24 23:11:03] Productos encontrados por nombre: 0 [2025-10-24 23:11:03] No se encontró ningún producto con stock por ningún método [2025-10-24 23:11:03] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-10-25 01:50:18] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 01:50:18] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 01:50:18] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 01:50:18] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 01:50:18] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 01:50:18] DEBUG SESSION STATUS: 2 [2025-10-25 01:50:18] Negocio en sesión: 78.216.219-5 [2025-10-25 01:50:18] Nombre: SGB-ERP SpA [2025-10-25 01:50:18] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 01:50:18] Conexión exitosa a la base de datos [2025-10-25 01:50:18] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 01:50:18] Buscando producto con código/nombre: BERLINE [2025-10-25 01:50:18] DEBUG: Código recibido: 'BERLINE' (longitud: 7) [2025-10-25 01:50:18] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 01:50:18] No se encontró producto_id para el código exacto 'BERLINE'. Intentando búsqueda parcial... [2025-10-25 01:50:18] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 01:50:18] Códigos parciales encontrados: 0 [2025-10-25 01:50:18] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 01:50:18] Productos encontrados por nombre: 1 [2025-10-25 01:50:18] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-25 01:50:18] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-25 01:50:18] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-25 01:50:18] Códigos encontrados para ID 62: 1 [2025-10-25 01:50:18] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}] [2025-10-25 01:50:18] Códigos con stock disponible: 1 [2025-10-25 01:50:18] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-25 01:50:18] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-25 01:50:18] Producto especial por nombre con stock disponible: 50 [2025-10-25 01:50:18] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-25 01:50:18] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null} [2025-10-25 01:50:18] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-25 01:50:18] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-25 01:50:18] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-25 01:50:18] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-25 01:50:18] Producto por nombre agregado a resultados (ID: 62) [2025-10-25 01:50:18] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-25 01:50:18] Se encontraron 1 resultados en total. [2025-10-25 01:50:18] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 01:51:52] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 01:51:52] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 01:51:52] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 01:51:52] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 01:51:52] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 01:51:52] DEBUG SESSION STATUS: 2 [2025-10-25 01:51:52] Negocio en sesión: 78.216.219-5 [2025-10-25 01:51:52] Nombre: SGB-ERP SpA [2025-10-25 01:51:52] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 01:51:52] Conexión exitosa a la base de datos [2025-10-25 01:51:52] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 01:51:52] Buscando producto con código/nombre: BER [2025-10-25 01:51:52] DEBUG: Código recibido: 'BER' (longitud: 3) [2025-10-25 01:51:52] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 01:51:52] No se encontró producto_id para el código exacto 'BER'. Intentando búsqueda parcial... [2025-10-25 01:51:52] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 01:51:52] Códigos parciales encontrados: 1 [2025-10-25 01:51:52] Procesando código parcial: BER-062 (ID: 62) [2025-10-25 01:51:52] Producto ID: 62 - Tiene lotes: NO (cantidad: 0) [2025-10-25 01:51:52] Producto ID: 62 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 01:51:52] DEBUGGING STOCK (código parcial): stockTotal original = 50 (tipo: double) [2025-10-25 01:51:52] DEBUGGING STOCK (código parcial): después de number_format = 50. [2025-10-25 01:51:52] DEBUGGING STOCK (código parcial): después de rtrim = 50 [2025-10-25 01:51:52] DEBUGGING STOCK (código parcial): stock_texto final = 50 kg [2025-10-25 01:51:52] Añadido producto con código parcial: {"id":62,"nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"BER-062","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":89,"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-25 01:51:52] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 01:51:52] Productos encontrados por nombre: 1 [2025-10-25 01:51:52] Omitiendo producto por nombre duplicado (ID: 62) - ya procesado por código [2025-10-25 01:51:52] Se encontraron 1 resultados en total. [2025-10-25 01:51:52] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 01:54:08] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 01:54:08] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 01:54:08] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 01:54:08] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 01:54:08] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 01:54:08] DEBUG SESSION STATUS: 2 [2025-10-25 01:54:08] Negocio en sesión: 78.216.219-5 [2025-10-25 01:54:08] Nombre: SGB-ERP SpA [2025-10-25 01:54:08] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 01:54:08] Conexión exitosa a la base de datos [2025-10-25 01:54:08] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 01:54:08] Buscando producto con código/nombre: BER [2025-10-25 01:54:08] DEBUG: Código recibido: 'BER' (longitud: 3) [2025-10-25 01:54:08] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 01:54:08] No se encontró producto_id para el código exacto 'BER'. Intentando búsqueda parcial... [2025-10-25 01:54:08] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 01:54:08] Códigos parciales encontrados: 1 [2025-10-25 01:54:08] Procesando código parcial: BER-062 (ID: 62) [2025-10-25 01:54:08] Producto ID: 62 - Tiene lotes: NO (cantidad: 0) [2025-10-25 01:54:08] Producto ID: 62 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 01:54:08] DEBUGGING STOCK (código parcial): stockTotal original = 50 (tipo: double) [2025-10-25 01:54:08] DEBUGGING STOCK (código parcial): después de number_format = 50. [2025-10-25 01:54:08] DEBUGGING STOCK (código parcial): después de rtrim = 50 [2025-10-25 01:54:08] DEBUGGING STOCK (código parcial): stock_texto final = 50 kg [2025-10-25 01:54:08] Añadido producto con código parcial: {"id":62,"nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"BER-062","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":89,"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-25 01:54:08] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 01:54:08] Productos encontrados por nombre: 1 [2025-10-25 01:54:08] Omitiendo producto por nombre duplicado (ID: 62) - ya procesado por código [2025-10-25 01:54:08] Se encontraron 1 resultados en total. [2025-10-25 01:54:08] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 01:54:31] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 01:54:31] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 01:54:31] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 01:54:31] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 01:54:31] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 01:54:31] DEBUG SESSION STATUS: 2 [2025-10-25 01:54:31] Negocio en sesión: 78.216.219-5 [2025-10-25 01:54:31] Nombre: SGB-ERP SpA [2025-10-25 01:54:31] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 01:54:31] Conexión exitosa a la base de datos [2025-10-25 01:54:31] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 01:54:31] Buscando producto con código/nombre: BER [2025-10-25 01:54:31] DEBUG: Código recibido: 'BER' (longitud: 3) [2025-10-25 01:54:31] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 01:54:31] No se encontró producto_id para el código exacto 'BER'. Intentando búsqueda parcial... [2025-10-25 01:54:31] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 01:54:31] Códigos parciales encontrados: 1 [2025-10-25 01:54:31] Procesando código parcial: BER-062 (ID: 62) [2025-10-25 01:54:31] Producto ID: 62 - Tiene lotes: NO (cantidad: 0) [2025-10-25 01:54:31] Producto ID: 62 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 01:54:31] DEBUGGING STOCK (código parcial): stockTotal original = 50 (tipo: double) [2025-10-25 01:54:31] DEBUGGING STOCK (código parcial): después de number_format = 50. [2025-10-25 01:54:31] DEBUGGING STOCK (código parcial): después de rtrim = 50 [2025-10-25 01:54:31] DEBUGGING STOCK (código parcial): stock_texto final = 50 kg [2025-10-25 01:54:31] Añadido producto con código parcial: {"id":62,"nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"BER-062","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":89,"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-25 01:54:31] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 01:54:31] Productos encontrados por nombre: 1 [2025-10-25 01:54:31] Omitiendo producto por nombre duplicado (ID: 62) - ya procesado por código [2025-10-25 01:54:31] Se encontraron 1 resultados en total. [2025-10-25 01:54:31] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 01:55:44] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 01:55:44] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 01:55:44] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 01:55:44] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 01:55:44] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 01:55:44] DEBUG SESSION STATUS: 2 [2025-10-25 01:55:44] Negocio en sesión: 78.216.219-5 [2025-10-25 01:55:44] Nombre: SGB-ERP SpA [2025-10-25 01:55:44] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 01:55:44] Conexión exitosa a la base de datos [2025-10-25 01:55:44] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 01:55:44] Buscando producto con código/nombre: berlo [2025-10-25 01:55:44] DEBUG: Código recibido: 'berlo' (longitud: 5) [2025-10-25 01:55:44] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 01:55:44] No se encontró producto_id para el código exacto 'berlo'. Intentando búsqueda parcial... [2025-10-25 01:55:44] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 01:55:44] Códigos parciales encontrados: 0 [2025-10-25 01:55:44] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 01:55:44] Productos encontrados por nombre: 0 [2025-10-25 01:55:44] No se encontró ningún producto con stock por ningún método [2025-10-25 01:55:44] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-10-25 01:55:47] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 01:55:47] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 01:55:47] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 01:55:47] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 01:55:47] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 01:55:47] DEBUG SESSION STATUS: 2 [2025-10-25 01:55:47] Negocio en sesión: 78.216.219-5 [2025-10-25 01:55:47] Nombre: SGB-ERP SpA [2025-10-25 01:55:47] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 01:55:47] Conexión exitosa a la base de datos [2025-10-25 01:55:47] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 01:55:47] Buscando producto con código/nombre: berli [2025-10-25 01:55:47] DEBUG: Código recibido: 'berli' (longitud: 5) [2025-10-25 01:55:47] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 01:55:47] No se encontró producto_id para el código exacto 'berli'. Intentando búsqueda parcial... [2025-10-25 01:55:47] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 01:55:47] Códigos parciales encontrados: 0 [2025-10-25 01:55:47] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 01:55:47] Productos encontrados por nombre: 1 [2025-10-25 01:55:47] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-25 01:55:47] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-25 01:55:47] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-25 01:55:47] Códigos encontrados para ID 62: 1 [2025-10-25 01:55:47] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}] [2025-10-25 01:55:47] Códigos con stock disponible: 1 [2025-10-25 01:55:47] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-25 01:55:47] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-25 01:55:47] Producto especial por nombre con stock disponible: 50 [2025-10-25 01:55:47] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-25 01:55:47] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null} [2025-10-25 01:55:47] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-25 01:55:47] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-25 01:55:47] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-25 01:55:47] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-25 01:55:47] Producto por nombre agregado a resultados (ID: 62) [2025-10-25 01:55:47] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-25 01:55:47] Se encontraron 1 resultados en total. [2025-10-25 01:55:47] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 02:00:46] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 02:00:46] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 02:00:46] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 02:00:46] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=5.179.768-k","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 02:00:46] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 02:00:46] DEBUG SESSION STATUS: 2 [2025-10-25 02:00:46] Negocio en sesión: 78.216.219-5 [2025-10-25 02:00:46] Nombre: SGB-ERP SpA [2025-10-25 02:00:46] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 02:00:46] Conexión exitosa a la base de datos [2025-10-25 02:00:46] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 02:00:46] Buscando producto con código/nombre: berli [2025-10-25 02:00:46] DEBUG: Código recibido: 'berli' (longitud: 5) [2025-10-25 02:00:46] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 02:00:46] No se encontró producto_id para el código exacto 'berli'. Intentando búsqueda parcial... [2025-10-25 02:00:46] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 02:00:46] Códigos parciales encontrados: 0 [2025-10-25 02:00:46] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 02:00:46] Productos encontrados por nombre: 1 [2025-10-25 02:00:46] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-25 02:00:46] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-25 02:00:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-25 02:00:46] Códigos encontrados para ID 62: 1 [2025-10-25 02:00:46] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}] [2025-10-25 02:00:46] Códigos con stock disponible: 1 [2025-10-25 02:00:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-25 02:00:46] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-25 02:00:46] Producto especial por nombre con stock disponible: 50 [2025-10-25 02:00:46] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-25 02:00:46] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null} [2025-10-25 02:00:46] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-25 02:00:46] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-25 02:00:46] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-25 02:00:46] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-25 02:00:46] Producto por nombre agregado a resultados (ID: 62) [2025-10-25 02:00:46] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2101.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-25 02:00:46] Se encontraron 1 resultados en total. [2025-10-25 02:00:46] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 02:03:26] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 02:03:26] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 02:03:26] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 02:03:26] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=5.179.768-k","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 02:03:26] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 02:03:26] DEBUG SESSION STATUS: 2 [2025-10-25 02:03:26] Negocio en sesión: 78.216.219-5 [2025-10-25 02:03:26] Nombre: SGB-ERP SpA [2025-10-25 02:03:26] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 02:03:26] Conexión exitosa a la base de datos [2025-10-25 02:03:26] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 02:03:26] Buscando producto con código/nombre: berli [2025-10-25 02:03:26] DEBUG: Código recibido: 'berli' (longitud: 5) [2025-10-25 02:03:26] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 02:03:26] No se encontró producto_id para el código exacto 'berli'. Intentando búsqueda parcial... [2025-10-25 02:03:26] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 02:03:26] Códigos parciales encontrados: 0 [2025-10-25 02:03:26] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 02:03:26] Productos encontrados por nombre: 1 [2025-10-25 02:03:26] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-25 02:03:26] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-25 02:03:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-25 02:03:26] Códigos encontrados para ID 62: 1 [2025-10-25 02:03:26] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}] [2025-10-25 02:03:26] Códigos con stock disponible: 1 [2025-10-25 02:03:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-25 02:03:26] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-25 02:03:26] Producto especial por nombre con stock disponible: 50 [2025-10-25 02:03:26] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-25 02:03:26] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null} [2025-10-25 02:03:26] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-25 02:03:26] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-25 02:03:26] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-25 02:03:26] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-25 02:03:26] Producto por nombre agregado a resultados (ID: 62) [2025-10-25 02:03:26] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-25 02:03:26] Se encontraron 1 resultados en total. [2025-10-25 02:03:26] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 02:04:34] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 02:04:34] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 02:04:34] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 02:04:34] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 02:04:34] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 02:04:34] DEBUG SESSION STATUS: 2 [2025-10-25 02:04:34] Negocio en sesión: 78.216.219-5 [2025-10-25 02:04:34] Nombre: SGB-ERP SpA [2025-10-25 02:04:34] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 02:04:34] Conexión exitosa a la base de datos [2025-10-25 02:04:34] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 02:04:34] Buscando producto con código/nombre: * [2025-10-25 02:04:34] DEBUG: Código recibido: '*' (longitud: 1) [2025-10-25 02:04:34] Solicitud para mostrar todos los productos [2025-10-25 02:04:34] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-10-25 02:04:34] Productos encontrados: 5 [2025-10-25 02:04:34] Producto 0: BERLINES CON MANJAR - Códigos adicionales: NULL [2025-10-25 02:04:34] Producto 1: COCACOLA 2LT DESECHABLE - Códigos adicionales: NULL [2025-10-25 02:04:34] Producto 2: GALLETAS OBLEA - Códigos adicionales: 17612733489089||manual [2025-10-25 02:04:34] Producto 3: PAN MARRAQUETA - Códigos adicionales: NULL [2025-10-25 02:04:34] Producto 4: PEPSI 3LT DESECHABLE - Códigos adicionales: 23423||diferente;;4234234||diferente [2025-10-25 02:04:34] Producto agregado a resultados (ID: 62): BERLINES CON MANJAR [2025-10-25 02:04:34] Producto agregado a resultados (ID: 51): COCACOLA 2LT DESECHABLE [2025-10-25 02:04:34] Producto agregado a resultados (ID: 65): GALLETAS OBLEA [2025-10-25 02:04:34] Producto agregado a resultados (ID: 64): PAN MARRAQUETA [2025-10-25 02:04:34] Producto agregado a resultados (ID: 66): PEPSI 3LT DESECHABLE [2025-10-25 02:04:34] Total de productos únicos encontrados: 5 [2025-10-25 02:04:49] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 02:04:49] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 02:04:49] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 02:04:49] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 02:04:49] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 02:04:49] DEBUG SESSION STATUS: 2 [2025-10-25 02:04:49] Negocio en sesión: 78.216.219-5 [2025-10-25 02:04:49] Nombre: SGB-ERP SpA [2025-10-25 02:04:49] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 02:04:49] Conexión exitosa a la base de datos [2025-10-25 02:04:49] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 02:04:49] Buscando producto con código/nombre: marra [2025-10-25 02:04:49] DEBUG: Código recibido: 'marra' (longitud: 5) [2025-10-25 02:04:49] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 02:04:49] No se encontró producto_id para el código exacto 'marra'. Intentando búsqueda parcial... [2025-10-25 02:04:49] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 02:04:49] Códigos parciales encontrados: 0 [2025-10-25 02:04:49] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 02:04:49] Productos encontrados por nombre: 1 [2025-10-25 02:04:49] Procesando producto encontrado por nombre: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-25 02:04:49] Usando lote específico detectado: ninguno para producto ID: 64 [2025-10-25 02:04:49] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-25 02:04:49] Códigos encontrados para ID 64: 1 [2025-10-25 02:04:49] Detalle de códigos: [{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}] [2025-10-25 02:04:49] Códigos con stock disponible: 1 [2025-10-25 02:04:49] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-25 02:04:49] Producto especial por nombre - Stock desde productos/inventario: 25 [2025-10-25 02:04:49] Producto especial por nombre con stock disponible: 25 [2025-10-25 02:04:49] Producto ESPECIAL ID: 64 - Tiene lotes: SÍ (cantidad: 1) [2025-10-25 02:04:49] Usando primer código disponible en orden FIFO para ID 64: {"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null} [2025-10-25 02:04:49] DEBUGGING STOCK (nombre): stockTotal original = 25 (tipo: double) [2025-10-25 02:04:49] DEBUGGING STOCK (nombre): después de number_format = 25. [2025-10-25 02:04:49] DEBUGGING STOCK (nombre): después de rtrim = 25 [2025-10-25 02:04:49] DEBUGGING STOCK (nombre): stock_texto final = 25 kg [2025-10-25 02:04:49] Producto por nombre agregado a resultados (ID: 64) [2025-10-25 02:04:49] Datos finales del producto: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"0.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}],"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-25 02:04:49] Se encontraron 1 resultados en total. [2025-10-25 02:04:49] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 02:05:25] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 02:05:25] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 02:05:25] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 02:05:25] DEBUG SESSION: {"last_regeneration":1761367501,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 02:05:25] DEBUG SESSION ID: c9gg9mjm7jkpf47bh8s319tg4a [2025-10-25 02:05:25] DEBUG SESSION STATUS: 2 [2025-10-25 02:05:25] Negocio en sesión: 78.216.219-5 [2025-10-25 02:05:25] Nombre: SGB-ERP SpA [2025-10-25 02:05:25] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 02:05:25] Conexión exitosa a la base de datos [2025-10-25 02:05:25] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 02:05:25] Buscando producto con código/nombre: marra [2025-10-25 02:05:25] DEBUG: Código recibido: 'marra' (longitud: 5) [2025-10-25 02:05:25] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 02:05:25] No se encontró producto_id para el código exacto 'marra'. Intentando búsqueda parcial... [2025-10-25 02:05:25] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 02:05:25] Códigos parciales encontrados: 0 [2025-10-25 02:05:25] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 02:05:25] Productos encontrados por nombre: 1 [2025-10-25 02:05:25] Procesando producto encontrado por nombre: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-25 02:05:25] Usando lote específico detectado: ninguno para producto ID: 64 [2025-10-25 02:05:25] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-25 02:05:25] Códigos encontrados para ID 64: 1 [2025-10-25 02:05:25] Detalle de códigos: [{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}] [2025-10-25 02:05:25] Códigos con stock disponible: 1 [2025-10-25 02:05:25] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-25 02:05:25] Producto especial por nombre - Stock desde productos/inventario: 25 [2025-10-25 02:05:25] Producto especial por nombre con stock disponible: 25 [2025-10-25 02:05:25] Producto ESPECIAL ID: 64 - Tiene lotes: SÍ (cantidad: 1) [2025-10-25 02:05:25] Usando primer código disponible en orden FIFO para ID 64: {"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null} [2025-10-25 02:05:25] DEBUGGING STOCK (nombre): stockTotal original = 25 (tipo: double) [2025-10-25 02:05:25] DEBUGGING STOCK (nombre): después de number_format = 25. [2025-10-25 02:05:25] DEBUGGING STOCK (nombre): después de rtrim = 25 [2025-10-25 02:05:25] DEBUGGING STOCK (nombre): stock_texto final = 25 kg [2025-10-25 02:05:25] Producto por nombre agregado a resultados (ID: 64) [2025-10-25 02:05:25] Datos finales del producto: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}],"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-25 02:05:25] Se encontraron 1 resultados en total. [2025-10-25 02:05:25] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-25 02:18:17] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 02:18:17] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 02:18:17] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 02:18:17] DEBUG SESSION: {"last_regeneration":1761312968,"negocio_rut":"5.179.768-k","negocio_id":"5.179.768-k","negocio_nombre":"Don Pepito","negocio_vencimiento":"2025-11-28","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":"14","sesion_caja_id":"14","last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=5.179.768-k","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=5.179.768-k"}} [2025-10-25 02:18:17] DEBUG SESSION ID: WTWVKuecKqCuQYH8xDz73JCJvurHcny,RHJDUsuWKLg4Z0YU [2025-10-25 02:18:17] DEBUG SESSION STATUS: 2 [2025-10-25 02:18:17] Negocio en sesión: 5.179.768-k [2025-10-25 02:18:17] Nombre: Don Pepito [2025-10-25 02:18:17] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 02:18:17] Conexión exitosa a la base de datos [2025-10-25 02:18:17] RUT del negocio en sesión para filtro: 5.179.768-k [2025-10-25 02:18:17] Buscando producto con código/nombre: * [2025-10-25 02:18:17] DEBUG: Código recibido: '*' (longitud: 1) [2025-10-25 02:18:17] Solicitud para mostrar todos los productos [2025-10-25 02:18:17] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-10-25 02:18:17] Productos encontrados: 6 [2025-10-25 02:18:17] Producto 0: DESTORNILLADOR PHILLIPS - Códigos adicionales: NULL [2025-10-25 02:18:17] Producto 1: DETERGENTE LÍQUIDO 1L - Códigos adicionales: NULL [2025-10-25 02:18:17] Producto 2: JABÓN DE TOCADOR - Códigos adicionales: NULL [2025-10-25 02:18:17] Producto 3: MARTILLO HERRERO 500G - Códigos adicionales: NULL [2025-10-25 02:18:17] Producto 4: MESA DE CENTRO - Códigos adicionales: NULL [2025-10-25 02:18:17] Producto 5: TEST TORNILLO - Códigos adicionales: NULL [2025-10-25 02:18:17] Producto agregado a resultados (ID: 71): DESTORNILLADOR PHILLIPS [2025-10-25 02:18:17] Producto agregado a resultados (ID: 72): DETERGENTE LÍQUIDO 1L [2025-10-25 02:18:17] Producto agregado a resultados (ID: 73): JABÓN DE TOCADOR [2025-10-25 02:18:17] Producto agregado a resultados (ID: 70): MARTILLO HERRERO 500G [2025-10-25 02:18:17] Producto agregado a resultados (ID: 74): MESA DE CENTRO [2025-10-25 02:18:17] Producto agregado a resultados (ID: 85): TEST TORNILLO [2025-10-25 02:18:17] Total de productos únicos encontrados: 6 [2025-10-25 11:48:53] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 11:48:53] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 11:48:53] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 11:48:53] DEBUG SESSION: {"last_regeneration":1761403644,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 11:48:53] DEBUG SESSION ID: suf6gjnc9iapgnmbb7t28r18h3 [2025-10-25 11:48:53] DEBUG SESSION STATUS: 2 [2025-10-25 11:48:53] Negocio en sesión: 78.216.219-5 [2025-10-25 11:48:53] Nombre: SGB-ERP SpA [2025-10-25 11:48:53] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 11:48:53] Conexión exitosa a la base de datos [2025-10-25 11:48:53] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 11:48:53] Buscando producto con código/nombre: pan [2025-10-25 11:48:53] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-10-25 11:48:53] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 11:48:53] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-10-25 11:48:53] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 11:48:53] Códigos parciales encontrados: 2 [2025-10-25 11:48:53] Procesando código parcial: PAN-064 (ID: 64) [2025-10-25 11:48:53] Producto ID: 64 - Tiene lotes: NO (cantidad: 0) [2025-10-25 11:48:53] Producto ID: 64 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 11:48:53] DEBUGGING STOCK (código parcial): stockTotal original = 25 (tipo: double) [2025-10-25 11:48:53] DEBUGGING STOCK (código parcial): después de number_format = 25. [2025-10-25 11:48:53] DEBUGGING STOCK (código parcial): después de rtrim = 25 [2025-10-25 11:48:53] DEBUGGING STOCK (código parcial): stock_texto final = 25 kg [2025-10-25 11:48:53] Añadido producto con código parcial: {"id":64,"nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-064","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":91,"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-25 11:48:53] Procesando código parcial: PAN-087 (ID: 87) [2025-10-25 11:48:53] Producto ID: 87 - Tiene lotes: NO (cantidad: 0) [2025-10-25 11:48:53] Producto ID: 87 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 11:48:53] DEBUGGING STOCK (código parcial): stockTotal original = 20 (tipo: double) [2025-10-25 11:48:53] DEBUGGING STOCK (código parcial): después de number_format = 20. [2025-10-25 11:48:53] DEBUGGING STOCK (código parcial): después de rtrim = 20 [2025-10-25 11:48:53] DEBUGGING STOCK (código parcial): stock_texto final = 20 kg [2025-10-25 11:48:53] Añadido producto con código parcial: {"id":87,"nombre":"PAN HALLULA","precio_venta":"2353.00","precio_final_publico":"0.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-087","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":101,"precio":"2353.00","stock_texto":"20 kg","stock_disponible":true} [2025-10-25 11:48:53] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 11:48:53] Productos encontrados por nombre: 2 [2025-10-25 11:48:53] Omitiendo producto por nombre duplicado (ID: 64) - ya procesado por código [2025-10-25 11:48:53] Omitiendo producto por nombre duplicado (ID: 87) - ya procesado por código [2025-10-25 11:48:53] Se encontraron 2 resultados en total. [2025-10-25 11:48:53] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-25 11:54:11] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 11:54:11] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 11:54:11] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 11:54:11] DEBUG SESSION: {"last_regeneration":1761403644,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 11:54:11] DEBUG SESSION ID: suf6gjnc9iapgnmbb7t28r18h3 [2025-10-25 11:54:11] DEBUG SESSION STATUS: 2 [2025-10-25 11:54:11] Negocio en sesión: 78.216.219-5 [2025-10-25 11:54:11] Nombre: SGB-ERP SpA [2025-10-25 11:54:11] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 11:54:11] Conexión exitosa a la base de datos [2025-10-25 11:54:11] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 11:54:11] Buscando producto con código/nombre: pan [2025-10-25 11:54:11] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-10-25 11:54:11] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 11:54:11] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-10-25 11:54:11] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 11:54:11] Códigos parciales encontrados: 2 [2025-10-25 11:54:11] Procesando código parcial: PAN-088 (ID: 88) [2025-10-25 11:54:11] Producto ID: 88 - Tiene lotes: NO (cantidad: 0) [2025-10-25 11:54:11] Producto ID: 88 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 11:54:11] DEBUGGING STOCK (código parcial): stockTotal original = 100 (tipo: double) [2025-10-25 11:54:11] DEBUGGING STOCK (código parcial): después de number_format = 100. [2025-10-25 11:54:11] DEBUGGING STOCK (código parcial): después de rtrim = 100 [2025-10-25 11:54:11] DEBUGGING STOCK (código parcial): stock_texto final = 100 kg [2025-10-25 11:54:11] Añadido producto con código parcial: {"id":88,"nombre":"PAN HALLULA","precio_venta":"3000.00","precio_final_publico":"3570.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-088","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":102,"precio":"3000.00","stock_texto":"100 kg","stock_disponible":true} [2025-10-25 11:54:11] Procesando código parcial: PAN-064 (ID: 64) [2025-10-25 11:54:11] Producto ID: 64 - Tiene lotes: NO (cantidad: 0) [2025-10-25 11:54:11] Producto ID: 64 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 11:54:11] DEBUGGING STOCK (código parcial): stockTotal original = 25 (tipo: double) [2025-10-25 11:54:11] DEBUGGING STOCK (código parcial): después de number_format = 25. [2025-10-25 11:54:11] DEBUGGING STOCK (código parcial): después de rtrim = 25 [2025-10-25 11:54:11] DEBUGGING STOCK (código parcial): stock_texto final = 25 kg [2025-10-25 11:54:11] Añadido producto con código parcial: {"id":64,"nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-064","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":91,"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-25 11:54:11] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 11:54:11] Productos encontrados por nombre: 2 [2025-10-25 11:54:11] Omitiendo producto por nombre duplicado (ID: 64) - ya procesado por código [2025-10-25 11:54:11] Omitiendo producto por nombre duplicado (ID: 88) - ya procesado por código [2025-10-25 11:54:11] Se encontraron 2 resultados en total. [2025-10-25 11:54:11] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-25 11:59:51] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-25 11:59:51] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-25 11:59:51] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-25 11:59:51] DEBUG SESSION: {"last_regeneration":1761403644,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-25 11:59:51] DEBUG SESSION ID: suf6gjnc9iapgnmbb7t28r18h3 [2025-10-25 11:59:51] DEBUG SESSION STATUS: 2 [2025-10-25 11:59:51] Negocio en sesión: 78.216.219-5 [2025-10-25 11:59:51] Nombre: SGB-ERP SpA [2025-10-25 11:59:51] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-25 11:59:51] Conexión exitosa a la base de datos [2025-10-25 11:59:51] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-25 11:59:51] Buscando producto con código/nombre: pan [2025-10-25 11:59:51] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-10-25 11:59:51] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-25 11:59:51] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-10-25 11:59:51] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-25 11:59:51] Códigos parciales encontrados: 2 [2025-10-25 11:59:51] Procesando código parcial: PAN-064 (ID: 64) [2025-10-25 11:59:51] Producto ID: 64 - Tiene lotes: NO (cantidad: 0) [2025-10-25 11:59:51] Producto ID: 64 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 11:59:51] DEBUGGING STOCK (código parcial): stockTotal original = 25 (tipo: double) [2025-10-25 11:59:51] DEBUGGING STOCK (código parcial): después de number_format = 25. [2025-10-25 11:59:51] DEBUGGING STOCK (código parcial): después de rtrim = 25 [2025-10-25 11:59:51] DEBUGGING STOCK (código parcial): stock_texto final = 25 kg [2025-10-25 11:59:51] Añadido producto con código parcial: {"id":64,"nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-064","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":91,"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-25 11:59:51] Procesando código parcial: PAN-088 (ID: 88) [2025-10-25 11:59:51] Producto ID: 88 - Tiene lotes: NO (cantidad: 0) [2025-10-25 11:59:51] Producto ID: 88 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-25 11:59:51] DEBUGGING STOCK (código parcial): stockTotal original = 110 (tipo: double) [2025-10-25 11:59:51] DEBUGGING STOCK (código parcial): después de number_format = 110. [2025-10-25 11:59:51] DEBUGGING STOCK (código parcial): después de rtrim = 110 [2025-10-25 11:59:51] DEBUGGING STOCK (código parcial): stock_texto final = 110 kg [2025-10-25 11:59:51] Añadido producto con código parcial: {"id":88,"nombre":"PAN HALLULA","precio_venta":"3193.00","precio_final_publico":"3800.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Kg","controla_stock":1,"stock":110,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-088","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":110,"fecha_vencimiento":null,"codigo_barras_id":102,"precio":"3193.00","stock_texto":"110 kg","stock_disponible":true} [2025-10-25 11:59:51] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-25 11:59:51] Productos encontrados por nombre: 2 [2025-10-25 11:59:51] Omitiendo producto por nombre duplicado (ID: 64) - ya procesado por código [2025-10-25 11:59:51] Omitiendo producto por nombre duplicado (ID: 88) - ya procesado por código [2025-10-25 11:59:51] Se encontraron 2 resultados en total. [2025-10-25 11:59:51] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-27 22:38:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-27 22:38:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-27 22:38:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-27 22:38:45] DEBUG SESSION: {"last_regeneration":1761614434,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-27 22:38:45] DEBUG SESSION ID: crcn51utr7kietg2a6tmrvmhnr [2025-10-27 22:38:45] DEBUG SESSION STATUS: 2 [2025-10-27 22:38:45] Negocio en sesión: 78.216.219-5 [2025-10-27 22:38:45] Nombre: SGB-ERP SpA [2025-10-27 22:38:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-27 22:38:45] Conexión exitosa a la base de datos [2025-10-27 22:38:45] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-27 22:38:45] Buscando producto con código/nombre: berli [2025-10-27 22:38:45] DEBUG: Código recibido: 'berli' (longitud: 5) [2025-10-27 22:38:45] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-27 22:38:45] No se encontró producto_id para el código exacto 'berli'. Intentando búsqueda parcial... [2025-10-27 22:38:45] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-27 22:38:45] Códigos parciales encontrados: 0 [2025-10-27 22:38:45] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-27 22:38:45] Productos encontrados por nombre: 1 [2025-10-27 22:38:45] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-27 22:38:45] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-27 22:38:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-27 22:38:45] Códigos encontrados para ID 62: 1 [2025-10-27 22:38:45] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}] [2025-10-27 22:38:45] Códigos con stock disponible: 1 [2025-10-27 22:38:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-27 22:38:45] Producto especial por nombre - Stock desde productos/inventario: 50 [2025-10-27 22:38:45] Producto especial por nombre con stock disponible: 50 [2025-10-27 22:38:45] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-27 22:38:45] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null} [2025-10-27 22:38:45] DEBUGGING STOCK (nombre): stockTotal original = 50 (tipo: double) [2025-10-27 22:38:45] DEBUGGING STOCK (nombre): después de number_format = 50. [2025-10-27 22:38:45] DEBUGGING STOCK (nombre): después de rtrim = 50 [2025-10-27 22:38:45] DEBUGGING STOCK (nombre): stock_texto final = 50 kg [2025-10-27 22:38:45] Producto por nombre agregado a resultados (ID: 62) [2025-10-27 22:38:45] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"50 kg","stock_disponible":true} [2025-10-27 22:38:45] Se encontraron 1 resultados en total. [2025-10-27 22:38:45] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-27 22:39:05] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-27 22:39:05] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-27 22:39:05] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-27 22:39:05] DEBUG SESSION: {"last_regeneration":1761614434,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-27 22:39:05] DEBUG SESSION ID: crcn51utr7kietg2a6tmrvmhnr [2025-10-27 22:39:05] DEBUG SESSION STATUS: 2 [2025-10-27 22:39:05] Negocio en sesión: 78.216.219-5 [2025-10-27 22:39:05] Nombre: SGB-ERP SpA [2025-10-27 22:39:05] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-27 22:39:05] Conexión exitosa a la base de datos [2025-10-27 22:39:05] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-27 22:39:05] Buscando producto con código/nombre: coca [2025-10-27 22:39:05] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-10-27 22:39:05] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-27 22:39:05] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-10-27 22:39:05] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-27 22:39:05] Códigos parciales encontrados: 0 [2025-10-27 22:39:05] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-27 22:39:05] Productos encontrados por nombre: 1 [2025-10-27 22:39:05] Procesando producto encontrado por nombre: {"id":51,"codigo":"17612461268521","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"99.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Maravilla","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-27 22:39:05] Usando lote específico detectado: ninguno para producto ID: 51 [2025-10-27 22:39:05] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-27 22:39:05] Códigos encontrados para ID 51: 1 [2025-10-27 22:39:05] Detalle de códigos: [{"id":74,"codigo":"17612461268521","tipo_codigo":"manual","cantidad":"99.00","fecha_vencimiento":null}] [2025-10-27 22:39:05] Códigos con stock disponible: 1 [2025-10-27 22:39:05] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-10-27 22:39:05] Stock total calculado para ID 51: 99 [2025-10-27 22:39:05] Producto NORMAL ID: 51 - Tiene lotes: SÍ (cantidad: 1) [2025-10-27 22:39:05] Usando primer código disponible en orden FIFO para ID 51: {"id":74,"codigo":"17612461268521","tipo_codigo":"manual","cantidad":"99.00","fecha_vencimiento":null} [2025-10-27 22:39:05] Producto por nombre agregado a resultados (ID: 51) [2025-10-27 22:39:05] Datos finales del producto: {"id":51,"codigo":"17612461268521","nombre":"COCACOLA 2LT DESECHABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":99,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Maravilla","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"99.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":74,"codigo":"17612461268521","tipo_codigo":"manual","cantidad":"99.00","fecha_vencimiento":null}],"precio":"2000.00","stock_texto":99,"stock_disponible":true} [2025-10-27 22:39:05] Se encontraron 1 resultados en total. [2025-10-27 22:39:05] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-27 22:39:08] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-27 22:39:08] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-27 22:39:08] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-27 22:39:08] DEBUG SESSION: {"last_regeneration":1761614434,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-27 22:39:08] DEBUG SESSION ID: crcn51utr7kietg2a6tmrvmhnr [2025-10-27 22:39:08] DEBUG SESSION STATUS: 2 [2025-10-27 22:39:08] Negocio en sesión: 78.216.219-5 [2025-10-27 22:39:08] Nombre: SGB-ERP SpA [2025-10-27 22:39:08] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-27 22:39:08] Conexión exitosa a la base de datos [2025-10-27 22:39:08] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-27 22:39:08] Buscando producto con código/nombre: pepso [2025-10-27 22:39:08] DEBUG: Código recibido: 'pepso' (longitud: 5) [2025-10-27 22:39:08] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-27 22:39:08] No se encontró producto_id para el código exacto 'pepso'. Intentando búsqueda parcial... [2025-10-27 22:39:08] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-27 22:39:08] Códigos parciales encontrados: 0 [2025-10-27 22:39:08] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-27 22:39:08] Productos encontrados por nombre: 0 [2025-10-27 22:39:08] No se encontró ningún producto con stock por ningún método [2025-10-27 22:39:08] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-10-27 22:39:11] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-27 22:39:11] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-27 22:39:11] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-27 22:39:11] DEBUG SESSION: {"last_regeneration":1761614434,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-27 22:39:11] DEBUG SESSION ID: crcn51utr7kietg2a6tmrvmhnr [2025-10-27 22:39:11] DEBUG SESSION STATUS: 2 [2025-10-27 22:39:11] Negocio en sesión: 78.216.219-5 [2025-10-27 22:39:11] Nombre: SGB-ERP SpA [2025-10-27 22:39:11] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-27 22:39:11] Conexión exitosa a la base de datos [2025-10-27 22:39:11] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-27 22:39:11] Buscando producto con código/nombre: pepsi [2025-10-27 22:39:11] DEBUG: Código recibido: 'pepsi' (longitud: 5) [2025-10-27 22:39:11] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-27 22:39:11] No se encontró producto_id para el código exacto 'pepsi'. Intentando búsqueda parcial... [2025-10-27 22:39:11] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-27 22:39:11] Códigos parciales encontrados: 0 [2025-10-27 22:39:11] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-27 22:39:11] Productos encontrados por nombre: 1 [2025-10-27 22:39:11] Procesando producto encontrado por nombre: {"id":66,"codigo":"234234","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"1840.00","precio_final_publico":"2190.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"66.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Belmont","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"23423||diferente;;4234234||diferente"} [2025-10-27 22:39:11] Usando lote específico detectado: ninguno para producto ID: 66 [2025-10-27 22:39:11] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-27 22:39:11] Códigos encontrados para ID 66: 3 [2025-10-27 22:39:11] Detalle de códigos: [{"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"19.00","fecha_vencimiento":null},{"id":95,"codigo":"23423","tipo_codigo":"diferente","cantidad":"32.00","fecha_vencimiento":null},{"id":96,"codigo":"4234234","tipo_codigo":"diferente","cantidad":"15.00","fecha_vencimiento":null}] [2025-10-27 22:39:11] Códigos con stock disponible: 3 [2025-10-27 22:39:11] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-27 22:39:11] Stock total calculado para ID 66: 66 [2025-10-27 22:39:11] Producto NORMAL ID: 66 - Tiene lotes: SÍ (cantidad: 3) [2025-10-27 22:39:11] Usando primer código disponible en orden FIFO para ID 66: {"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"19.00","fecha_vencimiento":null} [2025-10-27 22:39:11] Producto por nombre agregado a resultados (ID: 66) [2025-10-27 22:39:11] Datos finales del producto: {"id":66,"codigo":"234234","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"1840.00","precio_final_publico":"2190.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":66,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Belmont","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"23423||diferente;;4234234||diferente","cantidad_codigo":"19.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"19.00","fecha_vencimiento":null},{"id":95,"codigo":"23423","tipo_codigo":"diferente","cantidad":"32.00","fecha_vencimiento":null},{"id":96,"codigo":"4234234","tipo_codigo":"diferente","cantidad":"15.00","fecha_vencimiento":null}],"precio":"1840.00","stock_texto":66,"stock_disponible":true} [2025-10-27 22:39:11] Se encontraron 1 resultados en total. [2025-10-27 22:39:11] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-28 09:06:18] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-28 09:06:18] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-28 09:06:18] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-28 09:06:18] DEBUG SESSION: {"last_regeneration":1761652488,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-28 09:06:18] DEBUG SESSION ID: f6fqc08spukbsvue4fm88eb24f [2025-10-28 09:06:18] DEBUG SESSION STATUS: 2 [2025-10-28 09:06:18] Negocio en sesión: 78.216.219-5 [2025-10-28 09:06:18] Nombre: SGB-ERP SpA [2025-10-28 09:06:18] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-28 09:06:18] Conexión exitosa a la base de datos [2025-10-28 09:06:18] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-28 09:06:18] Buscando producto con código/nombre: peps [2025-10-28 09:06:18] DEBUG: Código recibido: 'peps' (longitud: 4) [2025-10-28 09:06:18] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-28 09:06:18] No se encontró producto_id para el código exacto 'peps'. Intentando búsqueda parcial... [2025-10-28 09:06:18] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-28 09:06:18] Códigos parciales encontrados: 0 [2025-10-28 09:06:18] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-28 09:06:18] Productos encontrados por nombre: 1 [2025-10-28 09:06:18] Procesando producto encontrado por nombre: {"id":66,"codigo":"234234","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"1840.00","precio_final_publico":"2190.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"65.00","cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Belmont","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"23423||diferente;;4234234||diferente"} [2025-10-28 09:06:18] Usando lote específico detectado: ninguno para producto ID: 66 [2025-10-28 09:06:18] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-28 09:06:18] Códigos encontrados para ID 66: 3 [2025-10-28 09:06:18] Detalle de códigos: [{"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"18.00","fecha_vencimiento":null},{"id":95,"codigo":"23423","tipo_codigo":"diferente","cantidad":"32.00","fecha_vencimiento":null},{"id":96,"codigo":"4234234","tipo_codigo":"diferente","cantidad":"15.00","fecha_vencimiento":null}] [2025-10-28 09:06:18] Códigos con stock disponible: 3 [2025-10-28 09:06:18] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-28 09:06:18] Stock total calculado para ID 66: 65 [2025-10-28 09:06:18] Producto NORMAL ID: 66 - Tiene lotes: SÍ (cantidad: 3) [2025-10-28 09:06:18] Usando primer código disponible en orden FIFO para ID 66: {"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"18.00","fecha_vencimiento":null} [2025-10-28 09:06:18] Producto por nombre agregado a resultados (ID: 66) [2025-10-28 09:06:18] Datos finales del producto: {"id":66,"codigo":"234234","nombre":"PEPSI 3LT DESECHABLE","precio_venta":"1840.00","precio_final_publico":"2190.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":65,"cantidad_por_unidad":"3.00","tipo_codigo":"diferente","marca_nombre":"Belmont","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"23423||diferente;;4234234||diferente","cantidad_codigo":"18.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":94,"codigo":"234234","tipo_codigo":"diferente","cantidad":"18.00","fecha_vencimiento":null},{"id":95,"codigo":"23423","tipo_codigo":"diferente","cantidad":"32.00","fecha_vencimiento":null},{"id":96,"codigo":"4234234","tipo_codigo":"diferente","cantidad":"15.00","fecha_vencimiento":null}],"precio":"1840.00","stock_texto":65,"stock_disponible":true} [2025-10-28 09:06:18] Se encontraron 1 resultados en total. [2025-10-28 09:06:18] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-28 09:42:19] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-28 09:42:19] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-28 09:42:19] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-28 09:42:19] DEBUG SESSION: {"last_regeneration":1761652488,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-28 09:42:19] DEBUG SESSION ID: f6fqc08spukbsvue4fm88eb24f [2025-10-28 09:42:19] DEBUG SESSION STATUS: 2 [2025-10-28 09:42:19] Negocio en sesión: 78.216.219-5 [2025-10-28 09:42:19] Nombre: SGB-ERP SpA [2025-10-28 09:42:19] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-28 09:42:19] Conexión exitosa a la base de datos [2025-10-28 09:42:19] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-28 09:42:19] Buscando producto con código/nombre: panb [2025-10-28 09:42:19] DEBUG: Código recibido: 'panb' (longitud: 4) [2025-10-28 09:42:19] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-28 09:42:19] No se encontró producto_id para el código exacto 'panb'. Intentando búsqueda parcial... [2025-10-28 09:42:19] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-28 09:42:19] Códigos parciales encontrados: 0 [2025-10-28 09:42:19] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-28 09:42:19] Productos encontrados por nombre: 0 [2025-10-28 09:42:19] No se encontró ningún producto con stock por ningún método [2025-10-28 09:42:19] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-10-28 09:42:21] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-28 09:42:21] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-28 09:42:21] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-28 09:42:21] DEBUG SESSION: {"last_regeneration":1761652488,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-28 09:42:21] DEBUG SESSION ID: f6fqc08spukbsvue4fm88eb24f [2025-10-28 09:42:21] DEBUG SESSION STATUS: 2 [2025-10-28 09:42:21] Negocio en sesión: 78.216.219-5 [2025-10-28 09:42:21] Nombre: SGB-ERP SpA [2025-10-28 09:42:21] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-28 09:42:21] Conexión exitosa a la base de datos [2025-10-28 09:42:21] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-28 09:42:21] Buscando producto con código/nombre: pan [2025-10-28 09:42:21] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-10-28 09:42:21] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-28 09:42:21] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-10-28 09:42:21] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-28 09:42:21] Códigos parciales encontrados: 2 [2025-10-28 09:42:21] Procesando código parcial: PAN-089 (ID: 89) [2025-10-28 09:42:21] Producto ID: 89 - Tiene lotes: NO (cantidad: 0) [2025-10-28 09:42:21] Producto ID: 89 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-28 09:42:21] DEBUGGING STOCK (código parcial): stockTotal original = 20 (tipo: double) [2025-10-28 09:42:21] DEBUGGING STOCK (código parcial): después de number_format = 20. [2025-10-28 09:42:21] DEBUGGING STOCK (código parcial): después de rtrim = 20 [2025-10-28 09:42:21] DEBUGGING STOCK (código parcial): stock_texto final = 20 kg [2025-10-28 09:42:21] Añadido producto con código parcial: {"id":89,"nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-089","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":103,"precio":"2101.00","stock_texto":"20 kg","stock_disponible":true} [2025-10-28 09:42:21] Procesando código parcial: PAN-064 (ID: 64) [2025-10-28 09:42:21] Producto ID: 64 - Tiene lotes: NO (cantidad: 0) [2025-10-28 09:42:21] Producto ID: 64 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-28 09:42:21] DEBUGGING STOCK (código parcial): stockTotal original = 25 (tipo: double) [2025-10-28 09:42:21] DEBUGGING STOCK (código parcial): después de number_format = 25. [2025-10-28 09:42:21] DEBUGGING STOCK (código parcial): después de rtrim = 25 [2025-10-28 09:42:21] DEBUGGING STOCK (código parcial): stock_texto final = 25 kg [2025-10-28 09:42:21] Añadido producto con código parcial: {"id":64,"nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-064","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":91,"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-28 09:42:21] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-28 09:42:21] Productos encontrados por nombre: 2 [2025-10-28 09:42:21] Omitiendo producto por nombre duplicado (ID: 64) - ya procesado por código [2025-10-28 09:42:21] Omitiendo producto por nombre duplicado (ID: 89) - ya procesado por código [2025-10-28 09:42:21] Se encontraron 2 resultados en total. [2025-10-28 09:42:21] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-28 09:42:29] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-28 09:42:29] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-28 09:42:29] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-28 09:42:29] DEBUG SESSION: {"last_regeneration":1761652488,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-28 09:42:29] DEBUG SESSION ID: f6fqc08spukbsvue4fm88eb24f [2025-10-28 09:42:29] DEBUG SESSION STATUS: 2 [2025-10-28 09:42:29] Negocio en sesión: 78.216.219-5 [2025-10-28 09:42:29] Nombre: SGB-ERP SpA [2025-10-28 09:42:29] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-28 09:42:29] Conexión exitosa a la base de datos [2025-10-28 09:42:29] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-28 09:42:29] Buscando producto con código/nombre: hallu [2025-10-28 09:42:29] DEBUG: Código recibido: 'hallu' (longitud: 5) [2025-10-28 09:42:29] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-28 09:42:29] No se encontró producto_id para el código exacto 'hallu'. Intentando búsqueda parcial... [2025-10-28 09:42:29] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-28 09:42:29] Códigos parciales encontrados: 0 [2025-10-28 09:42:29] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-28 09:42:29] Productos encontrados por nombre: 1 [2025-10-28 09:42:29] Procesando producto encontrado por nombre: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-28 09:42:29] Usando lote específico detectado: ninguno para producto ID: 89 [2025-10-28 09:42:29] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-28 09:42:29] Códigos encontrados para ID 89: 1 [2025-10-28 09:42:29] Detalle de códigos: [{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null}] [2025-10-28 09:42:29] Códigos con stock disponible: 1 [2025-10-28 09:42:29] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-28 09:42:29] Producto especial por nombre - Stock desde productos/inventario: 20 [2025-10-28 09:42:29] Producto especial por nombre con stock disponible: 20 [2025-10-28 09:42:29] Producto ESPECIAL ID: 89 - Tiene lotes: SÍ (cantidad: 1) [2025-10-28 09:42:29] Usando primer código disponible en orden FIFO para ID 89: {"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null} [2025-10-28 09:42:29] DEBUGGING STOCK (nombre): stockTotal original = 20 (tipo: double) [2025-10-28 09:42:29] DEBUGGING STOCK (nombre): después de number_format = 20. [2025-10-28 09:42:29] DEBUGGING STOCK (nombre): después de rtrim = 20 [2025-10-28 09:42:29] DEBUGGING STOCK (nombre): stock_texto final = 20 kg [2025-10-28 09:42:29] Producto por nombre agregado a resultados (ID: 89) [2025-10-28 09:42:29] Datos finales del producto: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"20 kg","stock_disponible":true} [2025-10-28 09:42:29] Se encontraron 1 resultados en total. [2025-10-28 09:42:29] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-28 09:43:20] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-28 09:43:20] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-28 09:43:20] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-28 09:43:20] DEBUG SESSION: {"last_regeneration":1761652488,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-28 09:43:20] DEBUG SESSION ID: f6fqc08spukbsvue4fm88eb24f [2025-10-28 09:43:20] DEBUG SESSION STATUS: 2 [2025-10-28 09:43:20] Negocio en sesión: 78.216.219-5 [2025-10-28 09:43:20] Nombre: SGB-ERP SpA [2025-10-28 09:43:20] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-28 09:43:20] Conexión exitosa a la base de datos [2025-10-28 09:43:20] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-28 09:43:20] Buscando producto con código/nombre: pan marra [2025-10-28 09:43:20] DEBUG: Código recibido: 'pan marra' (longitud: 9) [2025-10-28 09:43:20] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-28 09:43:20] No se encontró producto_id para el código exacto 'pan marra'. Intentando búsqueda parcial... [2025-10-28 09:43:20] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-28 09:43:20] Códigos parciales encontrados: 0 [2025-10-28 09:43:20] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-28 09:43:20] Productos encontrados por nombre: 2 [2025-10-28 09:43:20] Procesando producto encontrado por nombre: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-28 09:43:20] Usando lote específico detectado: ninguno para producto ID: 64 [2025-10-28 09:43:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-28 09:43:20] Códigos encontrados para ID 64: 1 [2025-10-28 09:43:20] Detalle de códigos: [{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}] [2025-10-28 09:43:20] Códigos con stock disponible: 1 [2025-10-28 09:43:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-28 09:43:20] Producto especial por nombre - Stock desde productos/inventario: 25 [2025-10-28 09:43:20] Producto especial por nombre con stock disponible: 25 [2025-10-28 09:43:20] Producto ESPECIAL ID: 64 - Tiene lotes: SÍ (cantidad: 1) [2025-10-28 09:43:20] Usando primer código disponible en orden FIFO para ID 64: {"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null} [2025-10-28 09:43:20] DEBUGGING STOCK (nombre): stockTotal original = 25 (tipo: double) [2025-10-28 09:43:20] DEBUGGING STOCK (nombre): después de number_format = 25. [2025-10-28 09:43:20] DEBUGGING STOCK (nombre): después de rtrim = 25 [2025-10-28 09:43:20] DEBUGGING STOCK (nombre): stock_texto final = 25 kg [2025-10-28 09:43:20] Producto por nombre agregado a resultados (ID: 64) [2025-10-28 09:43:20] Datos finales del producto: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}],"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-28 09:43:20] Procesando producto encontrado por nombre: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"18.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-28 09:43:20] Usando lote específico detectado: ninguno para producto ID: 89 [2025-10-28 09:43:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-28 09:43:20] Códigos encontrados para ID 89: 1 [2025-10-28 09:43:20] Detalle de códigos: [{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null}] [2025-10-28 09:43:20] Códigos con stock disponible: 1 [2025-10-28 09:43:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-28 09:43:20] Producto especial por nombre - Stock desde productos/inventario: 18 [2025-10-28 09:43:20] Producto especial por nombre con stock disponible: 18 [2025-10-28 09:43:20] Producto ESPECIAL ID: 89 - Tiene lotes: SÍ (cantidad: 1) [2025-10-28 09:43:20] Usando primer código disponible en orden FIFO para ID 89: {"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null} [2025-10-28 09:43:20] DEBUGGING STOCK (nombre): stockTotal original = 18 (tipo: double) [2025-10-28 09:43:20] DEBUGGING STOCK (nombre): después de number_format = 18. [2025-10-28 09:43:20] DEBUGGING STOCK (nombre): después de rtrim = 18 [2025-10-28 09:43:20] DEBUGGING STOCK (nombre): stock_texto final = 18 kg [2025-10-28 09:43:20] Producto por nombre agregado a resultados (ID: 89) [2025-10-28 09:43:20] Datos finales del producto: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":18,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"18.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"18 kg","stock_disponible":true} [2025-10-28 09:43:20] Se encontraron 2 resultados en total. [2025-10-28 09:43:20] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-28 09:43:34] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-28 09:43:34] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-28 09:43:34] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-28 09:43:34] DEBUG SESSION: {"last_regeneration":1761652488,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-28 09:43:34] DEBUG SESSION ID: f6fqc08spukbsvue4fm88eb24f [2025-10-28 09:43:34] DEBUG SESSION STATUS: 2 [2025-10-28 09:43:34] Negocio en sesión: 78.216.219-5 [2025-10-28 09:43:34] Nombre: SGB-ERP SpA [2025-10-28 09:43:34] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-28 09:43:34] Conexión exitosa a la base de datos [2025-10-28 09:43:34] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-28 09:43:34] Buscando producto con código/nombre: hallu [2025-10-28 09:43:34] DEBUG: Código recibido: 'hallu' (longitud: 5) [2025-10-28 09:43:34] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-28 09:43:34] No se encontró producto_id para el código exacto 'hallu'. Intentando búsqueda parcial... [2025-10-28 09:43:34] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-28 09:43:34] Códigos parciales encontrados: 0 [2025-10-28 09:43:34] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-28 09:43:34] Productos encontrados por nombre: 1 [2025-10-28 09:43:34] Procesando producto encontrado por nombre: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"18.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-28 09:43:34] Usando lote específico detectado: ninguno para producto ID: 89 [2025-10-28 09:43:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-28 09:43:34] Códigos encontrados para ID 89: 1 [2025-10-28 09:43:34] Detalle de códigos: [{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null}] [2025-10-28 09:43:34] Códigos con stock disponible: 1 [2025-10-28 09:43:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-28 09:43:34] Producto especial por nombre - Stock desde productos/inventario: 18 [2025-10-28 09:43:34] Producto especial por nombre con stock disponible: 18 [2025-10-28 09:43:34] Producto ESPECIAL ID: 89 - Tiene lotes: SÍ (cantidad: 1) [2025-10-28 09:43:34] Usando primer código disponible en orden FIFO para ID 89: {"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null} [2025-10-28 09:43:34] DEBUGGING STOCK (nombre): stockTotal original = 18 (tipo: double) [2025-10-28 09:43:34] DEBUGGING STOCK (nombre): después de number_format = 18. [2025-10-28 09:43:34] DEBUGGING STOCK (nombre): después de rtrim = 18 [2025-10-28 09:43:34] DEBUGGING STOCK (nombre): stock_texto final = 18 kg [2025-10-28 09:43:34] Producto por nombre agregado a resultados (ID: 89) [2025-10-28 09:43:34] Datos finales del producto: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":18,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"18.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"18 kg","stock_disponible":true} [2025-10-28 09:43:34] Se encontraron 1 resultados en total. [2025-10-28 09:43:34] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-28 09:43:39] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-28 09:43:39] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-28 09:43:39] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-28 09:43:39] DEBUG SESSION: {"last_regeneration":1761652488,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-28 09:43:39] DEBUG SESSION ID: f6fqc08spukbsvue4fm88eb24f [2025-10-28 09:43:39] DEBUG SESSION STATUS: 2 [2025-10-28 09:43:39] Negocio en sesión: 78.216.219-5 [2025-10-28 09:43:39] Nombre: SGB-ERP SpA [2025-10-28 09:43:39] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-28 09:43:39] Conexión exitosa a la base de datos [2025-10-28 09:43:39] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-28 09:43:39] Buscando producto con código/nombre: marra [2025-10-28 09:43:39] DEBUG: Código recibido: 'marra' (longitud: 5) [2025-10-28 09:43:39] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-28 09:43:39] No se encontró producto_id para el código exacto 'marra'. Intentando búsqueda parcial... [2025-10-28 09:43:39] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-28 09:43:39] Códigos parciales encontrados: 0 [2025-10-28 09:43:39] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-28 09:43:39] Productos encontrados por nombre: 2 [2025-10-28 09:43:39] Procesando producto encontrado por nombre: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-28 09:43:39] Usando lote específico detectado: ninguno para producto ID: 64 [2025-10-28 09:43:39] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-28 09:43:39] Códigos encontrados para ID 64: 1 [2025-10-28 09:43:39] Detalle de códigos: [{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}] [2025-10-28 09:43:39] Códigos con stock disponible: 1 [2025-10-28 09:43:39] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-28 09:43:39] Producto especial por nombre - Stock desde productos/inventario: 25 [2025-10-28 09:43:39] Producto especial por nombre con stock disponible: 25 [2025-10-28 09:43:39] Producto ESPECIAL ID: 64 - Tiene lotes: SÍ (cantidad: 1) [2025-10-28 09:43:39] Usando primer código disponible en orden FIFO para ID 64: {"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null} [2025-10-28 09:43:39] DEBUGGING STOCK (nombre): stockTotal original = 25 (tipo: double) [2025-10-28 09:43:39] DEBUGGING STOCK (nombre): después de number_format = 25. [2025-10-28 09:43:39] DEBUGGING STOCK (nombre): después de rtrim = 25 [2025-10-28 09:43:39] DEBUGGING STOCK (nombre): stock_texto final = 25 kg [2025-10-28 09:43:39] Producto por nombre agregado a resultados (ID: 64) [2025-10-28 09:43:39] Datos finales del producto: {"id":64,"codigo":"PAN-064","nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":91,"codigo":"PAN-064","tipo_codigo":"especial","cantidad":"25.00","fecha_vencimiento":null}],"precio":"1849.00","stock_texto":"25 kg","stock_disponible":true} [2025-10-28 09:43:39] Procesando producto encontrado por nombre: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"18.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-28 09:43:39] Usando lote específico detectado: ninguno para producto ID: 89 [2025-10-28 09:43:39] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-28 09:43:39] Códigos encontrados para ID 89: 1 [2025-10-28 09:43:39] Detalle de códigos: [{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null}] [2025-10-28 09:43:39] Códigos con stock disponible: 1 [2025-10-28 09:43:39] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-28 09:43:39] Producto especial por nombre - Stock desde productos/inventario: 18 [2025-10-28 09:43:39] Producto especial por nombre con stock disponible: 18 [2025-10-28 09:43:39] Producto ESPECIAL ID: 89 - Tiene lotes: SÍ (cantidad: 1) [2025-10-28 09:43:39] Usando primer código disponible en orden FIFO para ID 89: {"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null} [2025-10-28 09:43:39] DEBUGGING STOCK (nombre): stockTotal original = 18 (tipo: double) [2025-10-28 09:43:39] DEBUGGING STOCK (nombre): después de number_format = 18. [2025-10-28 09:43:39] DEBUGGING STOCK (nombre): después de rtrim = 18 [2025-10-28 09:43:39] DEBUGGING STOCK (nombre): stock_texto final = 18 kg [2025-10-28 09:43:39] Producto por nombre agregado a resultados (ID: 89) [2025-10-28 09:43:39] Datos finales del producto: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":18,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"18.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"18.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"18 kg","stock_disponible":true} [2025-10-28 09:43:39] Se encontraron 2 resultados en total. [2025-10-28 09:43:39] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-28 14:01:37] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-28 14:01:37] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-28 14:01:37] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-28 14:01:37] DEBUG SESSION: {"last_regeneration":1761670876,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-01","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":11,"sesion_caja_id":11,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-10-28 14:01:37] DEBUG SESSION ID: i7q96sro3md3js1ha9f0nhevor [2025-10-28 14:01:37] DEBUG SESSION STATUS: 2 [2025-10-28 14:01:37] Negocio en sesión: 17.612.457-1 [2025-10-28 14:01:37] Nombre: Mis dos princesas [2025-10-28 14:01:37] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-28 14:01:37] Conexión exitosa a la base de datos [2025-10-28 14:01:37] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-10-28 14:01:37] Buscando producto con código/nombre: dancing [2025-10-28 14:01:37] DEBUG: Código recibido: 'dancing' (longitud: 7) [2025-10-28 14:01:37] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-28 14:01:37] No se encontró producto_id para el código exacto 'dancing'. Intentando búsqueda parcial... [2025-10-28 14:01:37] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-28 14:01:37] Códigos parciales encontrados: 0 [2025-10-28 14:01:37] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-28 14:01:37] Productos encontrados por nombre: 1 [2025-10-28 14:01:37] Procesando producto encontrado por nombre: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente"} [2025-10-28 14:01:37] Usando lote específico detectado: ninguno para producto ID: 61 [2025-10-28 14:01:37] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-28 14:01:37] Códigos encontrados para ID 61: 3 [2025-10-28 14:01:37] Detalle de códigos: [{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}] [2025-10-28 14:01:37] Códigos con stock disponible: 3 [2025-10-28 14:01:37] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-10-28 14:01:37] Stock total calculado para ID 61: 20 [2025-10-28 14:01:37] Producto NORMAL ID: 61 - Tiene lotes: SÍ (cantidad: 3) [2025-10-28 14:01:37] Usando primer código disponible en orden FIFO para ID 61: {"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null} [2025-10-28 14:01:37] Producto por nombre agregado a resultados (ID: 61) [2025-10-28 14:01:37] Datos finales del producto: {"id":61,"codigo":"453467","nombre":"DANCING NIGHT PERFUME","precio_venta":"25210.00","precio_final_publico":"30000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":20,"cantidad_por_unidad":"90.00","tipo_codigo":"diferente","marca_nombre":"Esika","tipo_nombre":"Perfumes","categoria_nombre":"Cuidado Personal","tipo_control_peso":"riguroso","codigos_adicionales":"23645||diferente;;623436||diferente","cantidad_codigo":"7.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":86,"codigo":"453467","tipo_codigo":"diferente","cantidad":"7.00","fecha_vencimiento":null},{"id":87,"codigo":"23645","tipo_codigo":"diferente","cantidad":"10.00","fecha_vencimiento":null},{"id":88,"codigo":"623436","tipo_codigo":"diferente","cantidad":"3.00","fecha_vencimiento":null}],"precio":"25210.00","stock_texto":20,"stock_disponible":true} [2025-10-28 14:01:37] Se encontraron 1 resultados en total. [2025-10-28 14:01:37] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-10-29 20:34:55] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-29 20:34:55] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-29 20:34:55] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-29 20:34:55] DEBUG SESSION: {"last_regeneration":1761780293,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-29 20:34:55] DEBUG SESSION ID: obmfjqqva54rn2e4vgbgoq1tum [2025-10-29 20:34:55] DEBUG SESSION STATUS: 2 [2025-10-29 20:34:55] Negocio en sesión: 78.216.219-5 [2025-10-29 20:34:55] Nombre: SGB-ERP SpA [2025-10-29 20:34:55] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-29 20:34:55] Conexión exitosa a la base de datos [2025-10-29 20:34:55] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-29 20:34:55] Buscando producto con código/nombre: pan [2025-10-29 20:34:55] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-10-29 20:34:55] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-29 20:34:55] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-10-29 20:34:55] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-29 20:34:55] Códigos parciales encontrados: 3 [2025-10-29 20:34:55] Procesando código parcial: PAN-091 (ID: 91) [2025-10-29 20:34:55] Producto ID: 91 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:34:55] Producto ID: 91 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): stockTotal original = 100 (tipo: double) [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): después de number_format = 100. [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): después de rtrim = 100 [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): stock_texto final = 100 kg [2025-10-29 20:34:55] Añadido producto con código parcial: {"id":91,"nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-091","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":105,"precio":"2101.00","stock_texto":"100 kg","stock_disponible":true} [2025-10-29 20:34:55] Procesando código parcial: PAN-089 (ID: 89) [2025-10-29 20:34:55] Producto ID: 89 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:34:55] Producto ID: 89 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): stockTotal original = 16 (tipo: double) [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): después de number_format = 16. [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): después de rtrim = 16 [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): stock_texto final = 16 kg [2025-10-29 20:34:55] Añadido producto con código parcial: {"id":89,"nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":16,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-089","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":16,"fecha_vencimiento":null,"codigo_barras_id":103,"precio":"2101.00","stock_texto":"16 kg","stock_disponible":true} [2025-10-29 20:34:55] Procesando código parcial: PAN-064 (ID: 64) [2025-10-29 20:34:55] Producto ID: 64 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:34:55] Producto ID: 64 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): stockTotal original = 23 (tipo: double) [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): después de number_format = 23. [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): después de rtrim = 23 [2025-10-29 20:34:55] DEBUGGING STOCK (código parcial): stock_texto final = 23 kg [2025-10-29 20:34:55] Añadido producto con código parcial: {"id":64,"nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":23,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-064","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":23,"fecha_vencimiento":null,"codigo_barras_id":91,"precio":"1849.00","stock_texto":"23 kg","stock_disponible":true} [2025-10-29 20:34:55] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-29 20:34:55] Productos encontrados por nombre: 3 [2025-10-29 20:34:55] Omitiendo producto por nombre duplicado (ID: 64) - ya procesado por código [2025-10-29 20:34:55] Omitiendo producto por nombre duplicado (ID: 89) - ya procesado por código [2025-10-29 20:34:55] Omitiendo producto por nombre duplicado (ID: 91) - ya procesado por código [2025-10-29 20:34:55] Se encontraron 3 resultados en total. [2025-10-29 20:34:55] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-10-29 20:40:21] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-29 20:40:21] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-29 20:40:21] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-29 20:40:21] DEBUG SESSION: {"last_regeneration":1761780293,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-29 20:40:21] DEBUG SESSION ID: obmfjqqva54rn2e4vgbgoq1tum [2025-10-29 20:40:21] DEBUG SESSION STATUS: 2 [2025-10-29 20:40:21] Negocio en sesión: 78.216.219-5 [2025-10-29 20:40:21] Nombre: SGB-ERP SpA [2025-10-29 20:40:21] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-29 20:40:21] Conexión exitosa a la base de datos [2025-10-29 20:40:21] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-29 20:40:21] Buscando producto con código/nombre: hall [2025-10-29 20:40:21] DEBUG: Código recibido: 'hall' (longitud: 4) [2025-10-29 20:40:21] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-29 20:40:21] No se encontró producto_id para el código exacto 'hall'. Intentando búsqueda parcial... [2025-10-29 20:40:21] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-29 20:40:21] Códigos parciales encontrados: 0 [2025-10-29 20:40:21] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-29 20:40:21] Productos encontrados por nombre: 2 [2025-10-29 20:40:21] Procesando producto encontrado por nombre: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"16.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-29 20:40:21] Usando lote específico detectado: ninguno para producto ID: 89 [2025-10-29 20:40:21] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-29 20:40:21] Códigos encontrados para ID 89: 1 [2025-10-29 20:40:21] Detalle de códigos: [{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"16.00","fecha_vencimiento":null}] [2025-10-29 20:40:21] Códigos con stock disponible: 1 [2025-10-29 20:40:21] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-29 20:40:21] Producto especial por nombre - Stock desde productos/inventario: 16 [2025-10-29 20:40:21] Producto especial por nombre con stock disponible: 16 [2025-10-29 20:40:21] Producto ESPECIAL ID: 89 - Tiene lotes: SÍ (cantidad: 1) [2025-10-29 20:40:21] Usando primer código disponible en orden FIFO para ID 89: {"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"16.00","fecha_vencimiento":null} [2025-10-29 20:40:21] DEBUGGING STOCK (nombre): stockTotal original = 16 (tipo: double) [2025-10-29 20:40:21] DEBUGGING STOCK (nombre): después de number_format = 16. [2025-10-29 20:40:21] DEBUGGING STOCK (nombre): después de rtrim = 16 [2025-10-29 20:40:21] DEBUGGING STOCK (nombre): stock_texto final = 16 kg [2025-10-29 20:40:21] Producto por nombre agregado a resultados (ID: 89) [2025-10-29 20:40:21] Datos finales del producto: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":16,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"16.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"16.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"16 kg","stock_disponible":true} [2025-10-29 20:40:21] Procesando producto encontrado por nombre: {"id":91,"codigo":"PAN-091","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-29 20:40:21] Usando lote específico detectado: ninguno para producto ID: 91 [2025-10-29 20:40:21] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-29 20:40:21] Códigos encontrados para ID 91: 1 [2025-10-29 20:40:21] Detalle de códigos: [{"id":105,"codigo":"PAN-091","tipo_codigo":"especial","cantidad":"100.00","fecha_vencimiento":null}] [2025-10-29 20:40:21] Códigos con stock disponible: 1 [2025-10-29 20:40:21] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-29 20:40:21] Producto especial por nombre - Stock desde productos/inventario: 100 [2025-10-29 20:40:21] Producto especial por nombre con stock disponible: 100 [2025-10-29 20:40:21] Producto ESPECIAL ID: 91 - Tiene lotes: SÍ (cantidad: 1) [2025-10-29 20:40:21] Usando primer código disponible en orden FIFO para ID 91: {"id":105,"codigo":"PAN-091","tipo_codigo":"especial","cantidad":"100.00","fecha_vencimiento":null} [2025-10-29 20:40:21] DEBUGGING STOCK (nombre): stockTotal original = 100 (tipo: double) [2025-10-29 20:40:21] DEBUGGING STOCK (nombre): después de number_format = 100. [2025-10-29 20:40:21] DEBUGGING STOCK (nombre): después de rtrim = 100 [2025-10-29 20:40:21] DEBUGGING STOCK (nombre): stock_texto final = 100 kg [2025-10-29 20:40:21] Producto por nombre agregado a resultados (ID: 91) [2025-10-29 20:40:21] Datos finales del producto: {"id":91,"codigo":"PAN-091","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":105,"codigo":"PAN-091","tipo_codigo":"especial","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"100 kg","stock_disponible":true} [2025-10-29 20:40:21] Se encontraron 2 resultados en total. [2025-10-29 20:40:21] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-29 20:43:55] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-29 20:43:55] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-29 20:43:55] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-29 20:43:55] DEBUG SESSION: {"last_regeneration":1761780293,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-29 20:43:55] DEBUG SESSION ID: obmfjqqva54rn2e4vgbgoq1tum [2025-10-29 20:43:55] DEBUG SESSION STATUS: 2 [2025-10-29 20:43:55] Negocio en sesión: 78.216.219-5 [2025-10-29 20:43:55] Nombre: SGB-ERP SpA [2025-10-29 20:43:55] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-29 20:43:55] Conexión exitosa a la base de datos [2025-10-29 20:43:55] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-29 20:43:55] Buscando producto con código/nombre: hallula [2025-10-29 20:43:55] DEBUG: Código recibido: 'hallula' (longitud: 7) [2025-10-29 20:43:55] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-29 20:43:55] No se encontró producto_id para el código exacto 'hallula'. Intentando búsqueda parcial... [2025-10-29 20:43:55] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-29 20:43:55] Códigos parciales encontrados: 0 [2025-10-29 20:43:55] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-29 20:43:55] Productos encontrados por nombre: 2 [2025-10-29 20:43:55] Procesando producto encontrado por nombre: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"16.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-29 20:43:55] Usando lote específico detectado: ninguno para producto ID: 89 [2025-10-29 20:43:55] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-29 20:43:55] Códigos encontrados para ID 89: 1 [2025-10-29 20:43:55] Detalle de códigos: [{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"16.00","fecha_vencimiento":null}] [2025-10-29 20:43:55] Códigos con stock disponible: 1 [2025-10-29 20:43:55] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-29 20:43:55] Producto especial por nombre - Stock desde productos/inventario: 16 [2025-10-29 20:43:55] Producto especial por nombre con stock disponible: 16 [2025-10-29 20:43:55] Producto ESPECIAL ID: 89 - Tiene lotes: SÍ (cantidad: 1) [2025-10-29 20:43:55] Usando primer código disponible en orden FIFO para ID 89: {"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"16.00","fecha_vencimiento":null} [2025-10-29 20:43:55] DEBUGGING STOCK (nombre): stockTotal original = 16 (tipo: double) [2025-10-29 20:43:55] DEBUGGING STOCK (nombre): después de number_format = 16. [2025-10-29 20:43:55] DEBUGGING STOCK (nombre): después de rtrim = 16 [2025-10-29 20:43:55] DEBUGGING STOCK (nombre): stock_texto final = 16 kg [2025-10-29 20:43:55] Producto por nombre agregado a resultados (ID: 89) [2025-10-29 20:43:55] Datos finales del producto: {"id":89,"codigo":"PAN-089","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":16,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"16.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":103,"codigo":"PAN-089","tipo_codigo":"especial","cantidad":"16.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"16 kg","stock_disponible":true} [2025-10-29 20:43:55] Procesando producto encontrado por nombre: {"id":91,"codigo":"PAN-091","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-29 20:43:55] Usando lote específico detectado: ninguno para producto ID: 91 [2025-10-29 20:43:55] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-29 20:43:55] Códigos encontrados para ID 91: 1 [2025-10-29 20:43:55] Detalle de códigos: [{"id":105,"codigo":"PAN-091","tipo_codigo":"especial","cantidad":"100.00","fecha_vencimiento":null}] [2025-10-29 20:43:55] Códigos con stock disponible: 1 [2025-10-29 20:43:55] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-29 20:43:55] Producto especial por nombre - Stock desde productos/inventario: 100 [2025-10-29 20:43:55] Producto especial por nombre con stock disponible: 100 [2025-10-29 20:43:55] Producto ESPECIAL ID: 91 - Tiene lotes: SÍ (cantidad: 1) [2025-10-29 20:43:55] Usando primer código disponible en orden FIFO para ID 91: {"id":105,"codigo":"PAN-091","tipo_codigo":"especial","cantidad":"100.00","fecha_vencimiento":null} [2025-10-29 20:43:55] DEBUGGING STOCK (nombre): stockTotal original = 100 (tipo: double) [2025-10-29 20:43:55] DEBUGGING STOCK (nombre): después de number_format = 100. [2025-10-29 20:43:55] DEBUGGING STOCK (nombre): después de rtrim = 100 [2025-10-29 20:43:55] DEBUGGING STOCK (nombre): stock_texto final = 100 kg [2025-10-29 20:43:55] Producto por nombre agregado a resultados (ID: 91) [2025-10-29 20:43:55] Datos finales del producto: {"id":91,"codigo":"PAN-091","nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Marraqueta","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":105,"codigo":"PAN-091","tipo_codigo":"especial","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"100 kg","stock_disponible":true} [2025-10-29 20:43:55] Se encontraron 2 resultados en total. [2025-10-29 20:43:55] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-10-29 20:44:36] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-29 20:44:36] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-29 20:44:36] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-29 20:44:36] DEBUG SESSION: {"last_regeneration":1761780293,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-29 20:44:36] DEBUG SESSION ID: obmfjqqva54rn2e4vgbgoq1tum [2025-10-29 20:44:36] DEBUG SESSION STATUS: 2 [2025-10-29 20:44:36] Negocio en sesión: 78.216.219-5 [2025-10-29 20:44:36] Nombre: SGB-ERP SpA [2025-10-29 20:44:36] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-29 20:44:36] Conexión exitosa a la base de datos [2025-10-29 20:44:36] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-29 20:44:36] Buscando producto con código/nombre: pa [2025-10-29 20:44:36] DEBUG: Código recibido: 'pa' (longitud: 2) [2025-10-29 20:44:36] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-29 20:44:36] No se encontró producto_id para el código exacto 'pa'. Intentando búsqueda parcial... [2025-10-29 20:44:36] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-29 20:44:36] Códigos parciales encontrados: 3 [2025-10-29 20:44:36] Procesando código parcial: PAN-064 (ID: 64) [2025-10-29 20:44:36] Producto ID: 64 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:44:36] Producto ID: 64 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): stockTotal original = 23 (tipo: double) [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): después de number_format = 23. [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): después de rtrim = 23 [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): stock_texto final = 23 kg [2025-10-29 20:44:36] Añadido producto con código parcial: {"id":64,"nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":23,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-064","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":23,"fecha_vencimiento":null,"codigo_barras_id":91,"precio":"1849.00","stock_texto":"23 kg","stock_disponible":true} [2025-10-29 20:44:36] Procesando código parcial: PAN-091 (ID: 91) [2025-10-29 20:44:36] Producto ID: 91 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:44:36] Producto ID: 91 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): stockTotal original = 100 (tipo: double) [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): después de number_format = 100. [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): después de rtrim = 100 [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): stock_texto final = 100 kg [2025-10-29 20:44:36] Añadido producto con código parcial: {"id":91,"nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-091","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":105,"precio":"2101.00","stock_texto":"100 kg","stock_disponible":true} [2025-10-29 20:44:36] Procesando código parcial: PAN-089 (ID: 89) [2025-10-29 20:44:36] Producto ID: 89 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:44:36] Producto ID: 89 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): stockTotal original = 16 (tipo: double) [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): después de number_format = 16. [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): después de rtrim = 16 [2025-10-29 20:44:36] DEBUGGING STOCK (código parcial): stock_texto final = 16 kg [2025-10-29 20:44:36] Añadido producto con código parcial: {"id":89,"nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":16,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-089","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":16,"fecha_vencimiento":null,"codigo_barras_id":103,"precio":"2101.00","stock_texto":"16 kg","stock_disponible":true} [2025-10-29 20:44:36] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-29 20:44:36] Productos encontrados por nombre: 5 [2025-10-29 20:44:36] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":"46.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-29 20:44:36] Usando lote específico detectado: ninguno para producto ID: 62 [2025-10-29 20:44:36] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-29 20:44:36] Códigos encontrados para ID 62: 1 [2025-10-29 20:44:36] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"46.00","fecha_vencimiento":null}] [2025-10-29 20:44:36] Códigos con stock disponible: 1 [2025-10-29 20:44:36] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-29 20:44:36] Producto especial por nombre - Stock desde productos/inventario: 46 [2025-10-29 20:44:36] Producto especial por nombre con stock disponible: 46 [2025-10-29 20:44:36] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-10-29 20:44:36] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"46.00","fecha_vencimiento":null} [2025-10-29 20:44:36] DEBUGGING STOCK (nombre): stockTotal original = 46 (tipo: double) [2025-10-29 20:44:36] DEBUGGING STOCK (nombre): después de number_format = 46. [2025-10-29 20:44:36] DEBUGGING STOCK (nombre): después de rtrim = 46 [2025-10-29 20:44:36] DEBUGGING STOCK (nombre): stock_texto final = 46 kg [2025-10-29 20:44:36] Producto por nombre agregado a resultados (ID: 62) [2025-10-29 20:44:36] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":46,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"46.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"46.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"46 kg","stock_disponible":true} [2025-10-29 20:44:36] Omitiendo producto por nombre duplicado (ID: 64) - ya procesado por código [2025-10-29 20:44:36] Omitiendo producto por nombre duplicado (ID: 89) - ya procesado por código [2025-10-29 20:44:36] Omitiendo producto por nombre duplicado (ID: 91) - ya procesado por código [2025-10-29 20:44:36] Procesando producto encontrado por nombre: {"id":92,"codigo":"BER-092","nombre":"BERLINES CON CREMA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-10-29 20:44:36] Usando lote específico detectado: ninguno para producto ID: 92 [2025-10-29 20:44:36] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-10-29 20:44:36] Códigos encontrados para ID 92: 1 [2025-10-29 20:44:36] Detalle de códigos: [{"id":106,"codigo":"BER-092","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null}] [2025-10-29 20:44:36] Códigos con stock disponible: 1 [2025-10-29 20:44:36] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-10-29 20:44:36] Producto especial por nombre - Stock desde productos/inventario: 20 [2025-10-29 20:44:36] Producto especial por nombre con stock disponible: 20 [2025-10-29 20:44:36] Producto ESPECIAL ID: 92 - Tiene lotes: SÍ (cantidad: 1) [2025-10-29 20:44:36] Usando primer código disponible en orden FIFO para ID 92: {"id":106,"codigo":"BER-092","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null} [2025-10-29 20:44:36] DEBUGGING STOCK (nombre): stockTotal original = 20 (tipo: double) [2025-10-29 20:44:36] DEBUGGING STOCK (nombre): después de number_format = 20. [2025-10-29 20:44:36] DEBUGGING STOCK (nombre): después de rtrim = 20 [2025-10-29 20:44:36] DEBUGGING STOCK (nombre): stock_texto final = 20 kg [2025-10-29 20:44:36] Producto por nombre agregado a resultados (ID: 92) [2025-10-29 20:44:36] Datos finales del producto: {"id":92,"codigo":"BER-092","nombre":"BERLINES CON CREMA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":106,"codigo":"BER-092","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"20 kg","stock_disponible":true} [2025-10-29 20:44:36] Se encontraron 5 resultados en total. [2025-10-29 20:44:36] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 5 resultados) === [2025-10-29 20:45:04] === INICIO BÚSQUEDA DE PRODUCTO === [2025-10-29 20:45:04] Ruta raíz relativa: [PROYECTO_ROOT] [2025-10-29 20:45:04] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-10-29 20:45:04] DEBUG SESSION: {"last_regeneration":1761780293,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-10-29 20:45:04] DEBUG SESSION ID: obmfjqqva54rn2e4vgbgoq1tum [2025-10-29 20:45:04] DEBUG SESSION STATUS: 2 [2025-10-29 20:45:04] Negocio en sesión: 78.216.219-5 [2025-10-29 20:45:04] Nombre: SGB-ERP SpA [2025-10-29 20:45:04] Intentando conectar a la base de datos usando la función conectarDB() [2025-10-29 20:45:04] Conexión exitosa a la base de datos [2025-10-29 20:45:04] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-10-29 20:45:04] Buscando producto con código/nombre: pan [2025-10-29 20:45:04] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-10-29 20:45:04] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-10-29 20:45:04] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-10-29 20:45:04] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-10-29 20:45:04] Códigos parciales encontrados: 3 [2025-10-29 20:45:04] Procesando código parcial: PAN-091 (ID: 91) [2025-10-29 20:45:04] Producto ID: 91 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:45:04] Producto ID: 91 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): stockTotal original = 100 (tipo: double) [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): después de number_format = 100. [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): después de rtrim = 100 [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): stock_texto final = 100 kg [2025-10-29 20:45:04] Añadido producto con código parcial: {"id":91,"nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-091","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":105,"precio":"2101.00","stock_texto":"100 kg","stock_disponible":true} [2025-10-29 20:45:04] Procesando código parcial: PAN-089 (ID: 89) [2025-10-29 20:45:04] Producto ID: 89 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:45:04] Producto ID: 89 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): stockTotal original = 16 (tipo: double) [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): después de number_format = 16. [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): después de rtrim = 16 [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): stock_texto final = 16 kg [2025-10-29 20:45:04] Añadido producto con código parcial: {"id":89,"nombre":"PAN HALLULA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":16,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-089","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":16,"fecha_vencimiento":null,"codigo_barras_id":103,"precio":"2101.00","stock_texto":"16 kg","stock_disponible":true} [2025-10-29 20:45:04] Procesando código parcial: PAN-064 (ID: 64) [2025-10-29 20:45:04] Producto ID: 64 - Tiene lotes: NO (cantidad: 0) [2025-10-29 20:45:04] Producto ID: 64 no usa lotes (tipo: especial), ignorando comando de lote [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): stockTotal original = 23 (tipo: double) [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): después de number_format = 23. [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): después de rtrim = 23 [2025-10-29 20:45:04] DEBUGGING STOCK (código parcial): stock_texto final = 23 kg [2025-10-29 20:45:04] Añadido producto con código parcial: {"id":64,"nombre":"PAN MARRAQUETA","precio_venta":"1849.00","precio_final_publico":"2200.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"kg","controla_stock":1,"stock":23,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"riguroso","codigo":"PAN-064","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":23,"fecha_vencimiento":null,"codigo_barras_id":91,"precio":"1849.00","stock_texto":"23 kg","stock_disponible":true} [2025-10-29 20:45:04] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-10-29 20:45:04] Productos encontrados por nombre: 3 [2025-10-29 20:45:04] Omitiendo producto por nombre duplicado (ID: 64) - ya procesado por código [2025-10-29 20:45:04] Omitiendo producto por nombre duplicado (ID: 89) - ya procesado por código [2025-10-29 20:45:04] Omitiendo producto por nombre duplicado (ID: 91) - ya procesado por código [2025-10-29 20:45:04] Se encontraron 3 resultados en total. [2025-10-29 20:45:04] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-02 22:25:07] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-02 22:25:07] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-02 22:25:07] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-02 22:25:07] DEBUG SESSION: {"last_regeneration":1762133095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-10-14","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":10,"sesion_caja_id":10,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-02 22:25:07] DEBUG SESSION ID: uq97papj43ujhtafv2h3l2d21h [2025-11-02 22:25:07] DEBUG SESSION STATUS: 2 [2025-11-02 22:25:07] Negocio en sesión: 78.216.219-5 [2025-11-02 22:25:07] Nombre: SGB-ERP SpA [2025-11-02 22:25:07] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-02 22:25:07] Conexión exitosa a la base de datos [2025-11-02 22:25:07] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-02 22:25:07] Buscando producto con código/nombre: BERLINES [2025-11-02 22:25:07] DEBUG: Código recibido: 'BERLINES' (longitud: 8) [2025-11-02 22:25:07] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-02 22:25:07] No se encontró producto_id para el código exacto 'BERLINES'. Intentando búsqueda parcial... [2025-11-02 22:25:07] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-02 22:25:07] Códigos parciales encontrados: 0 [2025-11-02 22:25:07] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-02 22:25:07] Productos encontrados por nombre: 2 [2025-11-02 22:25:07] Procesando producto encontrado por nombre: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":"46.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-02 22:25:07] Usando lote específico detectado: ninguno para producto ID: 62 [2025-11-02 22:25:07] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-02 22:25:07] Códigos encontrados para ID 62: 1 [2025-11-02 22:25:07] Detalle de códigos: [{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"46.00","fecha_vencimiento":null}] [2025-11-02 22:25:07] Códigos con stock disponible: 1 [2025-11-02 22:25:07] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-02 22:25:07] Producto especial por nombre - Stock desde productos/inventario: 46 [2025-11-02 22:25:07] Producto especial por nombre con stock disponible: 46 [2025-11-02 22:25:07] Producto ESPECIAL ID: 62 - Tiene lotes: SÍ (cantidad: 1) [2025-11-02 22:25:07] Usando primer código disponible en orden FIFO para ID 62: {"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"46.00","fecha_vencimiento":null} [2025-11-02 22:25:07] DEBUGGING STOCK (nombre): stockTotal original = 46 (tipo: double) [2025-11-02 22:25:07] DEBUGGING STOCK (nombre): después de number_format = 46. [2025-11-02 22:25:07] DEBUGGING STOCK (nombre): después de rtrim = 46 [2025-11-02 22:25:07] DEBUGGING STOCK (nombre): stock_texto final = 46 kg [2025-11-02 22:25:07] Producto por nombre agregado a resultados (ID: 62) [2025-11-02 22:25:07] Datos finales del producto: {"id":62,"codigo":"BER-062","nombre":"BERLINES CON MANJAR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":46,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"46.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":89,"codigo":"BER-062","tipo_codigo":"especial","cantidad":"46.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"46 kg","stock_disponible":true} [2025-11-02 22:25:07] Procesando producto encontrado por nombre: {"id":92,"codigo":"BER-092","nombre":"BERLINES CON CREMA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-02 22:25:07] Usando lote específico detectado: ninguno para producto ID: 92 [2025-11-02 22:25:07] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-02 22:25:07] Códigos encontrados para ID 92: 1 [2025-11-02 22:25:07] Detalle de códigos: [{"id":106,"codigo":"BER-092","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-02 22:25:07] Códigos con stock disponible: 1 [2025-11-02 22:25:07] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-02 22:25:07] Producto especial por nombre - Stock desde productos/inventario: 20 [2025-11-02 22:25:07] Producto especial por nombre con stock disponible: 20 [2025-11-02 22:25:07] Producto ESPECIAL ID: 92 - Tiene lotes: SÍ (cantidad: 1) [2025-11-02 22:25:07] Usando primer código disponible en orden FIFO para ID 92: {"id":106,"codigo":"BER-092","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null} [2025-11-02 22:25:07] DEBUGGING STOCK (nombre): stockTotal original = 20 (tipo: double) [2025-11-02 22:25:07] DEBUGGING STOCK (nombre): después de number_format = 20. [2025-11-02 22:25:07] DEBUGGING STOCK (nombre): después de rtrim = 20 [2025-11-02 22:25:07] DEBUGGING STOCK (nombre): stock_texto final = 20 kg [2025-11-02 22:25:07] Producto por nombre agregado a resultados (ID: 92) [2025-11-02 22:25:07] Datos finales del producto: {"id":92,"codigo":"BER-092","nombre":"BERLINES CON CREMA","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Berlines","categoria_nombre":"Pasteler\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":106,"codigo":"BER-092","tipo_codigo":"especial","cantidad":"20.00","fecha_vencimiento":null}],"precio":"2101.00","stock_texto":"20 kg","stock_disponible":true} [2025-11-02 22:25:07] Se encontraron 2 resultados en total. [2025-11-02 22:25:07] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-04 13:41:10] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-04 13:41:10] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-04 13:41:10] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-04 13:41:10] DEBUG SESSION: {"last_regeneration":1762266276,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php"},"mensaje_corte_diario":"Ha llegado la hora de corte diario (12:00:00). Se recomienda cerrar la caja.","tipo_mensaje_corte":"warning","cajero_id":68,"cajero_nombre":"Alejandro Sotomayor","cajero_rol":"supervisor","sesion_caja_id":17,"terminal_id":"TERMINAL1","id_sesion_caja":17,"supervisor_autorizado_17":{"timestamp":1762273183,"supervisor":{"id":68,"nombre":"Alejandro","apellido":"Sotomayor","nombre_completo":"Alejandro Sotomayor"}}} [2025-11-04 13:41:10] DEBUG SESSION ID: rhF3J03MVCX67VKEIWzaPtfZBrCyn0Tiax7XcnSGHzeKAO9U [2025-11-04 13:41:10] DEBUG SESSION STATUS: 2 [2025-11-04 13:41:10] Negocio en sesión: 78.216.219-5 [2025-11-04 13:41:10] Nombre: SGB-ERP SpA [2025-11-04 13:41:10] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-04 13:41:10] Conexión exitosa a la base de datos [2025-11-04 13:41:10] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-04 13:41:10] Buscando producto con código/nombre: t [2025-11-04 13:41:10] DEBUG: Código recibido: 't' (longitud: 1) [2025-11-04 13:41:10] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-04 13:41:10] No se encontró producto_id para el código exacto 't'. Intentando búsqueda parcial... [2025-11-04 13:41:10] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-04 13:41:10] Códigos parciales encontrados: 0 [2025-11-04 13:41:10] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-04 13:41:10] Productos encontrados por nombre: 0 [2025-11-04 13:41:10] No se encontró ningún producto con stock por ningún método [2025-11-04 13:41:10] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-04 22:59:47] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-04 22:59:47] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-04 22:59:47] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-04 22:59:47] DEBUG SESSION: {"last_regeneration":1762307730,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-04 22:59:47] DEBUG SESSION ID: 698980ac2qh90pg4mfusncms40 [2025-11-04 22:59:47] DEBUG SESSION STATUS: 2 [2025-11-04 22:59:47] Negocio en sesión: 78.216.219-5 [2025-11-04 22:59:47] Nombre: SGB-ERP SpA [2025-11-04 22:59:47] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-04 22:59:47] Conexión exitosa a la base de datos [2025-11-04 22:59:47] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-04 22:59:47] Buscando producto con código/nombre: * [2025-11-04 22:59:47] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-04 22:59:47] Solicitud para mostrar todos los productos [2025-11-04 22:59:47] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-04 22:59:47] Productos encontrados: 0 [2025-11-04 22:59:47] Total de productos únicos encontrados: 0 [2025-11-04 23:01:43] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-04 23:01:43] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-04 23:01:43] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-04 23:01:43] DEBUG SESSION: {"last_regeneration":1762307730,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-04 23:01:43] DEBUG SESSION ID: 698980ac2qh90pg4mfusncms40 [2025-11-04 23:01:43] DEBUG SESSION STATUS: 2 [2025-11-04 23:01:43] Negocio en sesión: 78.216.219-5 [2025-11-04 23:01:43] Nombre: SGB-ERP SpA [2025-11-04 23:01:43] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-04 23:01:43] Conexión exitosa a la base de datos [2025-11-04 23:01:43] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-04 23:01:43] Buscando producto con código/nombre: * [2025-11-04 23:01:43] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-04 23:01:43] Solicitud para mostrar todos los productos [2025-11-04 23:01:43] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-04 23:01:43] Productos encontrados: 0 [2025-11-04 23:01:43] Total de productos únicos encontrados: 0 [2025-11-04 23:05:13] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-04 23:05:13] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-04 23:05:13] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-04 23:05:13] DEBUG SESSION: {"last_regeneration":1762307730,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-04 23:05:13] DEBUG SESSION ID: 698980ac2qh90pg4mfusncms40 [2025-11-04 23:05:13] DEBUG SESSION STATUS: 2 [2025-11-04 23:05:13] Negocio en sesión: 78.216.219-5 [2025-11-04 23:05:13] Nombre: SGB-ERP SpA [2025-11-04 23:05:13] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-04 23:05:13] Conexión exitosa a la base de datos [2025-11-04 23:05:13] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-04 23:05:13] Buscando producto con código/nombre: * [2025-11-04 23:05:13] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-04 23:05:13] Solicitud para mostrar todos los productos [2025-11-04 23:05:13] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-04 23:05:13] Productos encontrados: 0 [2025-11-04 23:05:13] Total de productos únicos encontrados: 0 [2025-11-04 23:47:46] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-04 23:47:46] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-04 23:47:46] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-04 23:47:46] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-04 23:47:46] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-04 23:47:46] DEBUG SESSION STATUS: 2 [2025-11-04 23:47:46] Negocio en sesión: 78.216.219-5 [2025-11-04 23:47:46] Nombre: SGB-ERP SpA [2025-11-04 23:47:46] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-04 23:47:46] Conexión exitosa a la base de datos [2025-11-04 23:47:46] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-04 23:47:46] Buscando producto con código/nombre: PAN [2025-11-04 23:47:46] DEBUG: Código recibido: 'PAN' (longitud: 3) [2025-11-04 23:47:46] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-04 23:47:46] No se encontró producto_id para el código exacto 'PAN'. Intentando búsqueda parcial... [2025-11-04 23:47:46] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-04 23:47:46] Códigos parciales encontrados: 0 [2025-11-04 23:47:46] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-04 23:47:46] Productos encontrados por nombre: 2 [2025-11-04 23:47:46] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-04 23:47:46] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-04 23:47:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-04 23:47:46] Códigos encontrados para ID 94: 1 [2025-11-04 23:47:46] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-04 23:47:46] Códigos con stock disponible: 1 [2025-11-04 23:47:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-04 23:47:46] Stock total calculado para ID 94: 100 [2025-11-04 23:47:46] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-04 23:47:46] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-04 23:47:46] Producto por nombre agregado a resultados (ID: 94) [2025-11-04 23:47:46] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":100,"stock_disponible":true} [2025-11-04 23:47:46] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-04 23:47:46] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-04 23:47:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-04 23:47:46] Códigos encontrados para ID 95: 1 [2025-11-04 23:47:46] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-04 23:47:46] Códigos con stock disponible: 1 [2025-11-04 23:47:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-04 23:47:46] Stock total calculado para ID 95: 50 [2025-11-04 23:47:46] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-04 23:47:46] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-04 23:47:46] Producto por nombre agregado a resultados (ID: 95) [2025-11-04 23:47:46] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":50,"stock_disponible":true} [2025-11-04 23:47:46] Se encontraron 2 resultados en total. [2025-11-04 23:47:46] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-04 23:48:04] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-04 23:48:04] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-04 23:48:04] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-04 23:48:04] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-04 23:48:04] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-04 23:48:04] DEBUG SESSION STATUS: 2 [2025-11-04 23:48:04] Negocio en sesión: 78.216.219-5 [2025-11-04 23:48:04] Nombre: SGB-ERP SpA [2025-11-04 23:48:04] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-04 23:48:04] Conexión exitosa a la base de datos [2025-11-04 23:48:04] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-04 23:48:04] Buscando producto con código/nombre: PAN [2025-11-04 23:48:04] DEBUG: Código recibido: 'PAN' (longitud: 3) [2025-11-04 23:48:04] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-04 23:48:04] No se encontró producto_id para el código exacto 'PAN'. Intentando búsqueda parcial... [2025-11-04 23:48:04] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-04 23:48:04] Códigos parciales encontrados: 0 [2025-11-04 23:48:04] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-04 23:48:04] Productos encontrados por nombre: 2 [2025-11-04 23:48:04] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-04 23:48:04] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-04 23:48:04] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-04 23:48:04] Códigos encontrados para ID 94: 1 [2025-11-04 23:48:04] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-04 23:48:04] Códigos con stock disponible: 1 [2025-11-04 23:48:04] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-04 23:48:04] Stock total calculado para ID 94: 100 [2025-11-04 23:48:04] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-04 23:48:04] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-04 23:48:04] Producto por nombre agregado a resultados (ID: 94) [2025-11-04 23:48:04] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":100,"stock_disponible":true} [2025-11-04 23:48:04] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-04 23:48:04] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-04 23:48:04] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-04 23:48:04] Códigos encontrados para ID 95: 1 [2025-11-04 23:48:04] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-04 23:48:04] Códigos con stock disponible: 1 [2025-11-04 23:48:04] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-04 23:48:04] Stock total calculado para ID 95: 50 [2025-11-04 23:48:04] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-04 23:48:04] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-04 23:48:04] Producto por nombre agregado a resultados (ID: 95) [2025-11-04 23:48:04] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":50,"stock_disponible":true} [2025-11-04 23:48:04] Se encontraron 2 resultados en total. [2025-11-04 23:48:04] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-05 00:02:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:02:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:02:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:02:48] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-05 00:02:48] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:02:48] DEBUG SESSION STATUS: 2 [2025-11-05 00:02:48] Negocio en sesión: 78.216.219-5 [2025-11-05 00:02:48] Nombre: SGB-ERP SpA [2025-11-05 00:02:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:02:48] Conexión exitosa a la base de datos [2025-11-05 00:02:48] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:02:48] Buscando producto con código/nombre: PAN [2025-11-05 00:02:48] DEBUG: Código recibido: 'PAN' (longitud: 3) [2025-11-05 00:02:48] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:02:48] No se encontró producto_id para el código exacto 'PAN'. Intentando búsqueda parcial... [2025-11-05 00:02:48] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:02:48] Códigos parciales encontrados: 1 [2025-11-05 00:02:48] Procesando código parcial: PAN-096 (ID: 96) [2025-11-05 00:02:48] Producto ID: 96 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:02:48] Producto ID: 96 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 00:02:48] DEBUGGING STOCK (código parcial): stockTotal original = 100 (tipo: double) [2025-11-05 00:02:48] DEBUGGING STOCK (código parcial): después de number_format = 100. [2025-11-05 00:02:48] DEBUGGING STOCK (código parcial): después de rtrim = 100 [2025-11-05 00:02:48] DEBUGGING STOCK (código parcial): stock_texto final = 100 kg [2025-11-05 00:02:48] Añadido producto con código parcial: {"id":96,"nombre":"PAN MOLDE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":"Bimbo","tipo_control_peso":"riguroso","codigo":"PAN-096","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":112,"precio":"2000.00","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 00:02:48] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:02:48] Productos encontrados por nombre: 3 [2025-11-05 00:02:48] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:02:48] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:02:48] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:02:48] Códigos encontrados para ID 94: 1 [2025-11-05 00:02:48] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:02:48] Códigos con stock disponible: 1 [2025-11-05 00:02:48] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:02:48] Stock total calculado para ID 94: 100 [2025-11-05 00:02:48] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:02:48] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:02:48] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:02:48] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":100,"stock_disponible":true} [2025-11-05 00:02:48] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:02:48] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:02:48] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:02:48] Códigos encontrados para ID 95: 1 [2025-11-05 00:02:48] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:02:48] Códigos con stock disponible: 1 [2025-11-05 00:02:48] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:02:48] Stock total calculado para ID 95: 50 [2025-11-05 00:02:48] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:02:48] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:02:48] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:02:48] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":50,"stock_disponible":true} [2025-11-05 00:02:48] Omitiendo producto por nombre duplicado (ID: 96) - ya procesado por código [2025-11-05 00:02:48] Se encontraron 3 resultados en total. [2025-11-05 00:02:48] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-05 00:03:08] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:03:08] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:03:08] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:03:08] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-05 00:03:08] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:03:08] DEBUG SESSION STATUS: 2 [2025-11-05 00:03:08] Negocio en sesión: 78.216.219-5 [2025-11-05 00:03:08] Nombre: SGB-ERP SpA [2025-11-05 00:03:08] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:03:08] Conexión exitosa a la base de datos [2025-11-05 00:03:08] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:03:08] Buscando producto con código/nombre: PAN [2025-11-05 00:03:08] DEBUG: Código recibido: 'PAN' (longitud: 3) [2025-11-05 00:03:08] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:03:08] No se encontró producto_id para el código exacto 'PAN'. Intentando búsqueda parcial... [2025-11-05 00:03:08] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:03:08] Códigos parciales encontrados: 1 [2025-11-05 00:03:08] Procesando código parcial: PAN-096 (ID: 96) [2025-11-05 00:03:08] Producto ID: 96 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:03:08] Producto ID: 96 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 00:03:08] DEBUGGING STOCK (código parcial): stockTotal original = 100 (tipo: double) [2025-11-05 00:03:08] DEBUGGING STOCK (código parcial): después de number_format = 100. [2025-11-05 00:03:08] DEBUGGING STOCK (código parcial): después de rtrim = 100 [2025-11-05 00:03:08] DEBUGGING STOCK (código parcial): stock_texto final = 100 kg [2025-11-05 00:03:08] Añadido producto con código parcial: {"id":96,"nombre":"PAN MOLDE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":"Bimbo","tipo_control_peso":"riguroso","codigo":"PAN-096","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":112,"precio":"2000.00","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 00:03:08] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:03:08] Productos encontrados por nombre: 3 [2025-11-05 00:03:08] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:03:08] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:03:08] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:03:08] Códigos encontrados para ID 94: 1 [2025-11-05 00:03:08] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:03:08] Códigos con stock disponible: 1 [2025-11-05 00:03:08] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:03:08] Stock total calculado para ID 94: 100 [2025-11-05 00:03:08] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:03:08] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:03:08] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:03:08] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":100,"stock_disponible":true} [2025-11-05 00:03:08] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:03:08] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:03:08] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:03:08] Códigos encontrados para ID 95: 1 [2025-11-05 00:03:08] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:03:08] Códigos con stock disponible: 1 [2025-11-05 00:03:08] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:03:08] Stock total calculado para ID 95: 50 [2025-11-05 00:03:08] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:03:08] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:03:08] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:03:08] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":50,"stock_disponible":true} [2025-11-05 00:03:08] Omitiendo producto por nombre duplicado (ID: 96) - ya procesado por código [2025-11-05 00:03:08] Se encontraron 3 resultados en total. [2025-11-05 00:03:08] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-05 00:03:44] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:03:44] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:03:44] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:03:44] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-05 00:03:44] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:03:44] DEBUG SESSION STATUS: 2 [2025-11-05 00:03:44] Negocio en sesión: 78.216.219-5 [2025-11-05 00:03:44] Nombre: SGB-ERP SpA [2025-11-05 00:03:44] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:03:44] Conexión exitosa a la base de datos [2025-11-05 00:03:44] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:03:44] Buscando producto con código/nombre: PAN [2025-11-05 00:03:44] DEBUG: Código recibido: 'PAN' (longitud: 3) [2025-11-05 00:03:44] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:03:44] No se encontró producto_id para el código exacto 'PAN'. Intentando búsqueda parcial... [2025-11-05 00:03:44] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:03:44] Códigos parciales encontrados: 1 [2025-11-05 00:03:44] Procesando código parcial: PAN-096 (ID: 96) [2025-11-05 00:03:44] Producto ID: 96 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:03:44] Producto ID: 96 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 00:03:44] DEBUGGING STOCK (código parcial): stockTotal original = 100 (tipo: double) [2025-11-05 00:03:44] DEBUGGING STOCK (código parcial): después de number_format = 100. [2025-11-05 00:03:44] DEBUGGING STOCK (código parcial): después de rtrim = 100 [2025-11-05 00:03:44] DEBUGGING STOCK (código parcial): stock_texto final = 100 kg [2025-11-05 00:03:44] Añadido producto con código parcial: {"id":96,"nombre":"PAN MOLDE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":"Bimbo","tipo_control_peso":"riguroso","codigo":"PAN-096","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":112,"precio":"2000.00","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 00:03:44] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:03:44] Productos encontrados por nombre: 3 [2025-11-05 00:03:44] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:03:44] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:03:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:03:44] Códigos encontrados para ID 94: 1 [2025-11-05 00:03:44] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:03:44] Códigos con stock disponible: 1 [2025-11-05 00:03:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:03:44] Stock total calculado para ID 94: 100 [2025-11-05 00:03:44] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:03:44] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:03:44] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:03:44] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":100,"stock_disponible":true} [2025-11-05 00:03:44] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:03:44] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:03:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:03:44] Códigos encontrados para ID 95: 1 [2025-11-05 00:03:44] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:03:44] Códigos con stock disponible: 1 [2025-11-05 00:03:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:03:44] Stock total calculado para ID 95: 50 [2025-11-05 00:03:44] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:03:44] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:03:44] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:03:44] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":50,"stock_disponible":true} [2025-11-05 00:03:44] Omitiendo producto por nombre duplicado (ID: 96) - ya procesado por código [2025-11-05 00:03:44] Se encontraron 3 resultados en total. [2025-11-05 00:03:44] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-05 00:05:40] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:05:40] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:05:40] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:05:40] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-05 00:05:40] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:05:40] DEBUG SESSION STATUS: 2 [2025-11-05 00:05:40] Negocio en sesión: 78.216.219-5 [2025-11-05 00:05:40] Nombre: SGB-ERP SpA [2025-11-05 00:05:40] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:05:40] Conexión exitosa a la base de datos [2025-11-05 00:05:40] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:05:40] Buscando producto con código/nombre: pan [2025-11-05 00:05:40] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 00:05:40] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:05:40] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 00:05:40] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:05:40] Códigos parciales encontrados: 1 [2025-11-05 00:05:40] Procesando código parcial: PAN-096 (ID: 96) [2025-11-05 00:05:40] Producto ID: 96 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:05:40] Producto ID: 96 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 00:05:40] DEBUGGING STOCK (código parcial): stockTotal original = 100 (tipo: double) [2025-11-05 00:05:40] DEBUGGING STOCK (código parcial): después de number_format = 100. [2025-11-05 00:05:40] DEBUGGING STOCK (código parcial): después de rtrim = 100 [2025-11-05 00:05:40] DEBUGGING STOCK (código parcial): stock_texto final = 100 kg [2025-11-05 00:05:40] Añadido producto con código parcial: {"id":96,"nombre":"PAN MOLDE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":"Bimbo","tipo_control_peso":"riguroso","codigo":"PAN-096","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":112,"precio":"2000.00","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 00:05:40] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:05:40] Productos encontrados por nombre: 3 [2025-11-05 00:05:40] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:05:40] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:05:40] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:05:40] Códigos encontrados para ID 94: 1 [2025-11-05 00:05:40] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:05:40] Códigos con stock disponible: 1 [2025-11-05 00:05:40] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:05:40] Stock total calculado para ID 94: 100 [2025-11-05 00:05:40] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:05:40] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:05:40] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:05:40] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":100,"stock_disponible":true} [2025-11-05 00:05:40] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:05:40] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:05:40] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:05:40] Códigos encontrados para ID 95: 1 [2025-11-05 00:05:40] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:05:40] Códigos con stock disponible: 1 [2025-11-05 00:05:40] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:05:40] Stock total calculado para ID 95: 50 [2025-11-05 00:05:40] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:05:40] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:05:40] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:05:40] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":50,"stock_disponible":true} [2025-11-05 00:05:40] Omitiendo producto por nombre duplicado (ID: 96) - ya procesado por código [2025-11-05 00:05:40] Se encontraron 3 resultados en total. [2025-11-05 00:05:40] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-05 00:06:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:06:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:06:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:06:48] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-05 00:06:48] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:06:48] DEBUG SESSION STATUS: 2 [2025-11-05 00:06:48] Negocio en sesión: 78.216.219-5 [2025-11-05 00:06:48] Nombre: SGB-ERP SpA [2025-11-05 00:06:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:06:48] Conexión exitosa a la base de datos [2025-11-05 00:06:48] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:06:48] Buscando producto con código/nombre: pan [2025-11-05 00:06:48] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 00:06:48] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:06:48] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 00:06:48] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:06:48] Códigos parciales encontrados: 1 [2025-11-05 00:06:48] Procesando código parcial: PAN-096 (ID: 96) [2025-11-05 00:06:48] Producto ID: 96 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:06:48] Producto ID: 96 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 00:06:48] DEBUGGING STOCK (código parcial): Producto por unidad - stock_texto = 100 un [2025-11-05 00:06:48] Añadido producto con código parcial: {"id":96,"nombre":"PAN MOLDE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":"Bimbo","tipo_control_peso":"riguroso","codigo":"PAN-096","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":112,"precio":"2000.00","stock_texto":"100 un","stock_disponible":true} [2025-11-05 00:06:48] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:06:48] Productos encontrados por nombre: 3 [2025-11-05 00:06:48] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:06:48] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:06:48] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:06:48] Códigos encontrados para ID 94: 1 [2025-11-05 00:06:48] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:06:48] Códigos con stock disponible: 1 [2025-11-05 00:06:48] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:06:48] Stock total calculado para ID 94: 100 [2025-11-05 00:06:48] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:06:48] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:06:48] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:06:48] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":"100 g","stock_disponible":true} [2025-11-05 00:06:48] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:06:48] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:06:48] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:06:48] Códigos encontrados para ID 95: 1 [2025-11-05 00:06:48] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:06:48] Códigos con stock disponible: 1 [2025-11-05 00:06:48] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:06:48] Stock total calculado para ID 95: 50 [2025-11-05 00:06:48] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:06:48] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:06:48] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:06:48] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":"50 g","stock_disponible":true} [2025-11-05 00:06:48] Omitiendo producto por nombre duplicado (ID: 96) - ya procesado por código [2025-11-05 00:06:48] Se encontraron 3 resultados en total. [2025-11-05 00:06:48] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-05 00:06:58] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:06:58] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:06:58] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:06:58] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-05 00:06:58] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:06:58] DEBUG SESSION STATUS: 2 [2025-11-05 00:06:58] Negocio en sesión: 78.216.219-5 [2025-11-05 00:06:58] Nombre: SGB-ERP SpA [2025-11-05 00:06:58] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:06:58] Conexión exitosa a la base de datos [2025-11-05 00:06:58] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:06:58] Buscando producto con código/nombre: pan [2025-11-05 00:06:58] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 00:06:58] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:06:58] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 00:06:58] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:06:58] Códigos parciales encontrados: 1 [2025-11-05 00:06:58] Procesando código parcial: PAN-096 (ID: 96) [2025-11-05 00:06:58] Producto ID: 96 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:06:58] Producto ID: 96 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 00:06:58] DEBUGGING STOCK (código parcial): Producto por unidad - stock_texto = 100 un [2025-11-05 00:06:58] Añadido producto con código parcial: {"id":96,"nombre":"PAN MOLDE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":"Bimbo","tipo_control_peso":"riguroso","codigo":"PAN-096","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":112,"precio":"2000.00","stock_texto":"100 un","stock_disponible":true} [2025-11-05 00:06:58] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:06:58] Productos encontrados por nombre: 3 [2025-11-05 00:06:58] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:06:58] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:06:58] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:06:58] Códigos encontrados para ID 94: 1 [2025-11-05 00:06:58] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:06:58] Códigos con stock disponible: 1 [2025-11-05 00:06:58] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:06:58] Stock total calculado para ID 94: 100 [2025-11-05 00:06:58] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:06:58] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:06:58] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:06:58] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":"100 g","stock_disponible":true} [2025-11-05 00:06:58] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:06:58] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:06:58] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:06:58] Códigos encontrados para ID 95: 1 [2025-11-05 00:06:58] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:06:58] Códigos con stock disponible: 1 [2025-11-05 00:06:58] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:06:58] Stock total calculado para ID 95: 50 [2025-11-05 00:06:58] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:06:58] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:06:58] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:06:58] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":"50 g","stock_disponible":true} [2025-11-05 00:06:58] Omitiendo producto por nombre duplicado (ID: 96) - ya procesado por código [2025-11-05 00:06:58] Se encontraron 3 resultados en total. [2025-11-05 00:06:58] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-05 00:08:56] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:08:56] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:08:56] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:08:56] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-05 00:08:56] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:08:56] DEBUG SESSION STATUS: 2 [2025-11-05 00:08:56] Negocio en sesión: 78.216.219-5 [2025-11-05 00:08:56] Nombre: SGB-ERP SpA [2025-11-05 00:08:56] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:08:56] Conexión exitosa a la base de datos [2025-11-05 00:08:56] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:08:56] Buscando producto con código/nombre: pan [2025-11-05 00:08:56] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 00:08:56] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:08:56] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 00:08:56] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:08:56] Códigos parciales encontrados: 1 [2025-11-05 00:08:56] Procesando código parcial: PAN-096 (ID: 96) [2025-11-05 00:08:56] Producto ID: 96 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:08:56] Producto ID: 96 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 00:08:56] DEBUGGING STOCK (código parcial): Producto por unidad - stock_texto = 100 un [2025-11-05 00:08:56] Añadido producto con código parcial: {"id":96,"nombre":"PAN MOLDE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":"Bimbo","tipo_control_peso":"riguroso","codigo":"PAN-096","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":112,"precio":"2000.00","stock_texto":"100 un","stock_disponible":true} [2025-11-05 00:08:56] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:08:56] Productos encontrados por nombre: 3 [2025-11-05 00:08:56] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:08:56] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:08:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:08:56] Códigos encontrados para ID 94: 1 [2025-11-05 00:08:56] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:08:56] Códigos con stock disponible: 1 [2025-11-05 00:08:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:08:56] Stock total calculado para ID 94: 100 [2025-11-05 00:08:56] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:08:56] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:08:56] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:08:56] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":"100 g","stock_disponible":true} [2025-11-05 00:08:56] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:08:56] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:08:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:08:56] Códigos encontrados para ID 95: 1 [2025-11-05 00:08:56] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:08:56] Códigos con stock disponible: 1 [2025-11-05 00:08:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:08:56] Stock total calculado para ID 95: 50 [2025-11-05 00:08:56] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:08:56] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:08:56] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:08:56] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":"50 g","stock_disponible":true} [2025-11-05 00:08:56] Omitiendo producto por nombre duplicado (ID: 96) - ya procesado por código [2025-11-05 00:08:56] Se encontraron 3 resultados en total. [2025-11-05 00:08:56] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-05 00:10:31] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:10:31] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:10:31] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:10:31] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:10:31] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:10:31] DEBUG SESSION STATUS: 2 [2025-11-05 00:10:31] Negocio en sesión: 78.216.219-5 [2025-11-05 00:10:31] Nombre: SGB-ERP SpA [2025-11-05 00:10:31] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:10:31] Conexión exitosa a la base de datos [2025-11-05 00:10:31] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:10:31] Buscando producto con código/nombre: * [2025-11-05 00:10:31] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:10:31] Solicitud para mostrar todos los productos [2025-11-05 00:10:31] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:10:31] Productos encontrados: 4 [2025-11-05 00:10:31] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084445049||manual;;17623084478458||manual [2025-11-05 00:10:31] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:10:31] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:10:31] Producto 3: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:10:31] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:10:31] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:10:31] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:10:31] Producto agregado a resultados (ID: 96): PAN MOLDE [2025-11-05 00:10:31] Total de productos únicos encontrados: 4 [2025-11-05 00:10:50] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:10:50] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:10:50] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:10:50] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:10:50] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:10:50] DEBUG SESSION STATUS: 2 [2025-11-05 00:10:50] Negocio en sesión: 78.216.219-5 [2025-11-05 00:10:50] Nombre: SGB-ERP SpA [2025-11-05 00:10:50] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:10:50] Conexión exitosa a la base de datos [2025-11-05 00:10:50] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:10:50] Buscando producto con código/nombre: pan [2025-11-05 00:10:50] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 00:10:50] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:10:50] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 00:10:50] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:10:50] Códigos parciales encontrados: 1 [2025-11-05 00:10:50] Procesando código parcial: PAN-096 (ID: 96) [2025-11-05 00:10:50] Producto ID: 96 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:10:50] Producto ID: 96 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 00:10:50] DEBUGGING STOCK (código parcial): Producto por unidad - stock_texto = 100 un [2025-11-05 00:10:50] Añadido producto con código parcial: {"id":96,"nombre":"PAN MOLDE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"UNIDAD","unidad_medida":"Un","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","marca_nombre":"Bimbo","tipo_control_peso":"riguroso","codigo":"PAN-096","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":112,"precio":"2000.00","stock_texto":"100 un","stock_disponible":true} [2025-11-05 00:10:50] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:10:50] Productos encontrados por nombre: 3 [2025-11-05 00:10:50] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:10:50] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:10:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:10:50] Códigos encontrados para ID 94: 1 [2025-11-05 00:10:50] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:10:50] Códigos con stock disponible: 1 [2025-11-05 00:10:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:10:50] Stock total calculado para ID 94: 100 [2025-11-05 00:10:50] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:10:50] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:10:50] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:10:50] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","stock_texto":"100 g","stock_disponible":true} [2025-11-05 00:10:50] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:10:50] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:10:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:10:50] Códigos encontrados para ID 95: 1 [2025-11-05 00:10:50] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:10:50] Códigos con stock disponible: 1 [2025-11-05 00:10:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:10:50] Stock total calculado para ID 95: 50 [2025-11-05 00:10:50] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:10:50] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:10:50] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:10:50] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","stock_texto":"50 g","stock_disponible":true} [2025-11-05 00:10:50] Omitiendo producto por nombre duplicado (ID: 96) - ya procesado por código [2025-11-05 00:10:50] Se encontraron 3 resultados en total. [2025-11-05 00:10:50] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-05 00:11:29] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:11:29] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:11:29] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:11:29] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:11:29] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:11:29] DEBUG SESSION STATUS: 2 [2025-11-05 00:11:29] Negocio en sesión: 78.216.219-5 [2025-11-05 00:11:29] Nombre: SGB-ERP SpA [2025-11-05 00:11:29] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:11:29] Conexión exitosa a la base de datos [2025-11-05 00:11:29] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:11:29] Buscando producto con código/nombre: * [2025-11-05 00:11:29] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:11:29] Solicitud para mostrar todos los productos [2025-11-05 00:11:29] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:11:29] Productos encontrados: 3 [2025-11-05 00:11:29] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084478458||manual;;17623084445049||manual [2025-11-05 00:11:29] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:11:29] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:11:29] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:11:29] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:11:29] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:11:29] Total de productos únicos encontrados: 3 [2025-11-05 00:11:37] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:11:37] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:11:37] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:11:37] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:11:37] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:11:37] DEBUG SESSION STATUS: 2 [2025-11-05 00:11:37] Negocio en sesión: 78.216.219-5 [2025-11-05 00:11:37] Nombre: SGB-ERP SpA [2025-11-05 00:11:37] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:11:37] Conexión exitosa a la base de datos [2025-11-05 00:11:37] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:11:37] Buscando producto con código/nombre: * [2025-11-05 00:11:37] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:11:37] Solicitud para mostrar todos los productos [2025-11-05 00:11:37] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:11:37] Productos encontrados: 3 [2025-11-05 00:11:37] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084478458||manual;;17623084445049||manual [2025-11-05 00:11:37] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:11:37] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:11:37] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:11:37] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:11:37] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:11:37] Total de productos únicos encontrados: 3 [2025-11-05 00:11:44] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:11:44] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:11:44] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:11:44] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:11:44] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:11:44] DEBUG SESSION STATUS: 2 [2025-11-05 00:11:44] Negocio en sesión: 78.216.219-5 [2025-11-05 00:11:44] Nombre: SGB-ERP SpA [2025-11-05 00:11:44] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:11:44] Conexión exitosa a la base de datos [2025-11-05 00:11:44] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:11:44] Buscando producto con código/nombre: pan [2025-11-05 00:11:44] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 00:11:44] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:11:44] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 00:11:44] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:11:44] Códigos parciales encontrados: 0 [2025-11-05 00:11:44] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:11:44] Productos encontrados por nombre: 2 [2025-11-05 00:11:44] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:11:44] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:11:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:11:44] Códigos encontrados para ID 94: 1 [2025-11-05 00:11:44] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:11:44] Códigos con stock disponible: 1 [2025-11-05 00:11:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:11:44] Stock total calculado para ID 94: 100 [2025-11-05 00:11:44] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:11:44] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:11:44] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:11:44] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","marca_logo":null,"marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 g","stock_disponible":true} [2025-11-05 00:11:44] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:11:44] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:11:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:11:44] Códigos encontrados para ID 95: 1 [2025-11-05 00:11:44] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:11:44] Códigos con stock disponible: 1 [2025-11-05 00:11:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:11:44] Stock total calculado para ID 95: 50 [2025-11-05 00:11:44] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:11:44] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:11:44] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:11:44] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","marca_logo":"https:\/\/logo.clearbit.com\/bimbo.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 g","stock_disponible":true} [2025-11-05 00:11:44] Se encontraron 2 resultados en total. [2025-11-05 00:11:44] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-05 00:12:46] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:12:46] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:12:46] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:12:46] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:12:46] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:12:46] DEBUG SESSION STATUS: 2 [2025-11-05 00:12:46] Negocio en sesión: 78.216.219-5 [2025-11-05 00:12:46] Nombre: SGB-ERP SpA [2025-11-05 00:12:46] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:12:46] Conexión exitosa a la base de datos [2025-11-05 00:12:46] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:12:46] Buscando producto con código/nombre: pan [2025-11-05 00:12:46] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 00:12:46] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:12:46] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 00:12:46] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:12:46] Códigos parciales encontrados: 0 [2025-11-05 00:12:46] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:12:46] Productos encontrados por nombre: 2 [2025-11-05 00:12:46] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:12:46] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:12:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:12:46] Códigos encontrados para ID 94: 1 [2025-11-05 00:12:46] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:12:46] Códigos con stock disponible: 1 [2025-11-05 00:12:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:12:46] Stock total calculado para ID 94: 100 [2025-11-05 00:12:46] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:12:46] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:12:46] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:12:46] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","marca_logo":null,"marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 g","stock_disponible":true} [2025-11-05 00:12:46] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:12:46] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:12:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:12:46] Códigos encontrados para ID 95: 1 [2025-11-05 00:12:46] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:12:46] Códigos con stock disponible: 1 [2025-11-05 00:12:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:12:46] Stock total calculado para ID 95: 50 [2025-11-05 00:12:46] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:12:46] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:12:46] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:12:46] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","marca_logo":"https:\/\/logo.clearbit.com\/bimbo.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 g","stock_disponible":true} [2025-11-05 00:12:46] Se encontraron 2 resultados en total. [2025-11-05 00:12:46] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-05 00:13:07] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:13:07] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:13:07] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:13:07] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:13:07] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:13:07] DEBUG SESSION STATUS: 2 [2025-11-05 00:13:07] Negocio en sesión: 78.216.219-5 [2025-11-05 00:13:07] Nombre: SGB-ERP SpA [2025-11-05 00:13:07] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:13:07] Conexión exitosa a la base de datos [2025-11-05 00:13:07] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:13:07] Buscando producto con código/nombre: * [2025-11-05 00:13:07] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:13:07] Solicitud para mostrar todos los productos [2025-11-05 00:13:07] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:13:07] Productos encontrados: 3 [2025-11-05 00:13:07] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084445049||manual;;17623084478458||manual [2025-11-05 00:13:07] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:13:07] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:13:07] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:13:07] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:13:07] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:13:07] Total de productos únicos encontrados: 3 [2025-11-05 00:13:15] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:13:15] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:13:15] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:13:15] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:13:15] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:13:15] DEBUG SESSION STATUS: 2 [2025-11-05 00:13:15] Negocio en sesión: 78.216.219-5 [2025-11-05 00:13:15] Nombre: SGB-ERP SpA [2025-11-05 00:13:15] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:13:15] Conexión exitosa a la base de datos [2025-11-05 00:13:15] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:13:15] Buscando producto con código/nombre: pan [2025-11-05 00:13:15] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 00:13:15] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:13:15] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 00:13:15] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:13:15] Códigos parciales encontrados: 0 [2025-11-05 00:13:15] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:13:15] Productos encontrados por nombre: 2 [2025-11-05 00:13:15] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:13:15] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:13:15] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:13:15] Códigos encontrados para ID 94: 1 [2025-11-05 00:13:15] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:13:15] Códigos con stock disponible: 1 [2025-11-05 00:13:15] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:13:15] Stock total calculado para ID 94: 100 [2025-11-05 00:13:15] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:13:15] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:13:16] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:13:16] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","marca_logo":null,"marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 g","stock_disponible":true} [2025-11-05 00:13:16] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:13:16] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:13:16] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:13:16] Códigos encontrados para ID 95: 1 [2025-11-05 00:13:16] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:13:16] Códigos con stock disponible: 1 [2025-11-05 00:13:16] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:13:16] Stock total calculado para ID 95: 50 [2025-11-05 00:13:16] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:13:16] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:13:16] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:13:16] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","marca_logo":"https:\/\/logo.clearbit.com\/bimbo.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 g","stock_disponible":true} [2025-11-05 00:13:16] Se encontraron 2 resultados en total. [2025-11-05 00:13:16] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-05 00:13:23] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:13:23] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:13:23] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:13:23] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:13:23] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:13:23] DEBUG SESSION STATUS: 2 [2025-11-05 00:13:23] Negocio en sesión: 78.216.219-5 [2025-11-05 00:13:23] Nombre: SGB-ERP SpA [2025-11-05 00:13:23] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:13:23] Conexión exitosa a la base de datos [2025-11-05 00:13:23] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:13:23] Buscando producto con código/nombre: * [2025-11-05 00:13:23] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:13:23] Solicitud para mostrar todos los productos [2025-11-05 00:13:23] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:13:23] Productos encontrados: 3 [2025-11-05 00:13:23] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084478458||manual;;17623084445049||manual [2025-11-05 00:13:23] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:13:23] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:13:23] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:13:23] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:13:23] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:13:23] Total de productos únicos encontrados: 3 [2025-11-05 00:13:28] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:13:28] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:13:28] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:13:28] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:13:28] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:13:28] DEBUG SESSION STATUS: 2 [2025-11-05 00:13:28] Negocio en sesión: 78.216.219-5 [2025-11-05 00:13:28] Nombre: SGB-ERP SpA [2025-11-05 00:13:28] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:13:28] Conexión exitosa a la base de datos [2025-11-05 00:13:28] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:13:28] Buscando producto con código/nombre: * [2025-11-05 00:13:28] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:13:28] Solicitud para mostrar todos los productos [2025-11-05 00:13:28] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:13:28] Productos encontrados: 3 [2025-11-05 00:13:28] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084445049||manual;;17623084478458||manual [2025-11-05 00:13:28] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:13:28] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:13:28] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:13:28] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:13:28] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:13:28] Total de productos únicos encontrados: 3 [2025-11-05 00:13:55] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:13:55] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:13:55] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:13:55] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:13:55] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:13:55] DEBUG SESSION STATUS: 2 [2025-11-05 00:13:55] Negocio en sesión: 78.216.219-5 [2025-11-05 00:13:55] Nombre: SGB-ERP SpA [2025-11-05 00:13:55] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:13:55] Conexión exitosa a la base de datos [2025-11-05 00:13:55] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:13:55] Buscando producto con código/nombre: * [2025-11-05 00:13:55] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:13:55] Solicitud para mostrar todos los productos [2025-11-05 00:13:55] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:13:55] Productos encontrados: 3 [2025-11-05 00:13:55] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084445049||manual;;17623084478458||manual [2025-11-05 00:13:55] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:13:55] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:13:55] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:13:55] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:13:55] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:13:55] Total de productos únicos encontrados: 3 [2025-11-05 00:14:10] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:14:10] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:14:10] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:14:10] DEBUG SESSION: {"last_regeneration":1762308344,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:14:10] DEBUG SESSION ID: b1bk2mi8cc6r1upb5s7jh8j254 [2025-11-05 00:14:10] DEBUG SESSION STATUS: 2 [2025-11-05 00:14:10] Negocio en sesión: 78.216.219-5 [2025-11-05 00:14:10] Nombre: SGB-ERP SpA [2025-11-05 00:14:10] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:14:10] Conexión exitosa a la base de datos [2025-11-05 00:14:10] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:14:10] Buscando producto con código/nombre: * [2025-11-05 00:14:10] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:14:10] Solicitud para mostrar todos los productos [2025-11-05 00:14:10] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:14:10] Productos encontrados: 3 [2025-11-05 00:14:10] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084445049||manual;;17623084478458||manual [2025-11-05 00:14:10] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:14:10] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:14:10] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:14:10] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:14:10] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:14:10] Total de productos únicos encontrados: 3 [2025-11-05 00:15:44] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:15:44] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:15:44] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:15:44] DEBUG SESSION: {"last_regeneration":1762312470,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:15:44] DEBUG SESSION ID: 3tba3v793mdj3tm1hf1nve94ef [2025-11-05 00:15:44] DEBUG SESSION STATUS: 2 [2025-11-05 00:15:44] Negocio en sesión: 78.216.219-5 [2025-11-05 00:15:44] Nombre: SGB-ERP SpA [2025-11-05 00:15:44] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:15:44] Conexión exitosa a la base de datos [2025-11-05 00:15:44] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:15:44] Buscando producto con código/nombre: co [2025-11-05 00:15:44] DEBUG: Código recibido: 'co' (longitud: 2) [2025-11-05 00:15:44] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:15:44] No se encontró producto_id para el código exacto 'co'. Intentando búsqueda parcial... [2025-11-05 00:15:44] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:15:44] Códigos parciales encontrados: 0 [2025-11-05 00:15:44] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:15:44] Productos encontrados por nombre: 1 [2025-11-05 00:15:44] Procesando producto encontrado por nombre: {"id":93,"codigo":"17623084405958","nombre":"COCA COLA 2 LT RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"200.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17623084478458||manual;;17623084445049||manual"} [2025-11-05 00:15:44] Usando lote específico detectado: ninguno para producto ID: 93 [2025-11-05 00:15:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:15:44] Códigos encontrados para ID 93: 3 [2025-11-05 00:15:44] Detalle de códigos: [{"id":107,"codigo":"17623084405958","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-12-12"},{"id":108,"codigo":"17623084445049","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2026-01-09"},{"id":109,"codigo":"17623084478458","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2026-02-20"}] [2025-11-05 00:15:44] Códigos con stock disponible: 3 [2025-11-05 00:15:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:15:44] Stock total calculado para ID 93: 200 [2025-11-05 00:15:44] Producto NORMAL ID: 93 - Tiene lotes: SÍ (cantidad: 3) [2025-11-05 00:15:44] Usando primer código disponible en orden FIFO para ID 93: {"id":107,"codigo":"17623084405958","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-12-12"} [2025-11-05 00:15:44] Producto por nombre agregado a resultados (ID: 93) [2025-11-05 00:15:44] Datos finales del producto: {"id":93,"codigo":"17623084405958","nombre":"COCA COLA 2 LT RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":200,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17623084478458||manual;;17623084445049||manual","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-12","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":107,"codigo":"17623084405958","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-12-12"},{"id":108,"codigo":"17623084445049","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2026-01-09"},{"id":109,"codigo":"17623084478458","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2026-02-20"}],"precio":"1765.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"200 l","stock_disponible":true} [2025-11-05 00:15:44] Se encontraron 1 resultados en total. [2025-11-05 00:15:44] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 00:16:09] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:16:09] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:16:09] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:16:09] DEBUG SESSION: {"last_regeneration":1762312470,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:16:09] DEBUG SESSION ID: 3tba3v793mdj3tm1hf1nve94ef [2025-11-05 00:16:09] DEBUG SESSION STATUS: 2 [2025-11-05 00:16:09] Negocio en sesión: 78.216.219-5 [2025-11-05 00:16:09] Nombre: SGB-ERP SpA [2025-11-05 00:16:09] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:16:09] Conexión exitosa a la base de datos [2025-11-05 00:16:09] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:16:09] Buscando producto con código/nombre: c [2025-11-05 00:16:09] DEBUG: Código recibido: 'c' (longitud: 1) [2025-11-05 00:16:09] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:16:09] No se encontró producto_id para el código exacto 'c'. Intentando búsqueda parcial... [2025-11-05 00:16:09] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:16:09] Códigos parciales encontrados: 0 [2025-11-05 00:16:09] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:16:09] Productos encontrados por nombre: 2 [2025-11-05 00:16:09] Procesando producto encontrado por nombre: {"id":93,"codigo":"17623084405958","nombre":"COCA COLA 2 LT RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"200.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17623084445049||manual;;17623084478458||manual"} [2025-11-05 00:16:09] Usando lote específico detectado: ninguno para producto ID: 93 [2025-11-05 00:16:09] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:16:09] Códigos encontrados para ID 93: 3 [2025-11-05 00:16:09] Detalle de códigos: [{"id":107,"codigo":"17623084405958","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-12-12"},{"id":108,"codigo":"17623084445049","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2026-01-09"},{"id":109,"codigo":"17623084478458","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2026-02-20"}] [2025-11-05 00:16:09] Códigos con stock disponible: 3 [2025-11-05 00:16:09] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:16:09] Stock total calculado para ID 93: 200 [2025-11-05 00:16:09] Producto NORMAL ID: 93 - Tiene lotes: SÍ (cantidad: 3) [2025-11-05 00:16:09] Usando primer código disponible en orden FIFO para ID 93: {"id":107,"codigo":"17623084405958","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-12-12"} [2025-11-05 00:16:09] Producto por nombre agregado a resultados (ID: 93) [2025-11-05 00:16:09] Datos finales del producto: {"id":93,"codigo":"17623084405958","nombre":"COCA COLA 2 LT RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":200,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":"17623084445049||manual;;17623084478458||manual","cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-12","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":107,"codigo":"17623084405958","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":"2025-12-12"},{"id":108,"codigo":"17623084445049","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2026-01-09"},{"id":109,"codigo":"17623084478458","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2026-02-20"}],"precio":"1765.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"200 l","stock_disponible":true} [2025-11-05 00:16:09] Procesando producto encontrado por nombre: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:16:09] Usando lote específico detectado: ninguno para producto ID: 94 [2025-11-05 00:16:09] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:16:09] Códigos encontrados para ID 94: 1 [2025-11-05 00:16:09] Detalle de códigos: [{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}] [2025-11-05 00:16:09] Códigos con stock disponible: 1 [2025-11-05 00:16:09] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 00:16:09] Stock total calculado para ID 94: 100 [2025-11-05 00:16:09] Producto NORMAL ID: 94 - Tiene lotes: NO (cantidad: 0) [2025-11-05 00:16:09] Usando primer código disponible en orden FIFO para ID 94: {"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"} [2025-11-05 00:16:09] Producto por nombre agregado a resultados (ID: 94) [2025-11-05 00:16:09] Datos finales del producto: {"id":94,"codigo":"17623089123279","nombre":"PAN MOLDE","precio_venta":"840.00","precio_final_publico":"1000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":100,"cantidad_por_unidad":"400.00","tipo_codigo":"masivo","marca_nombre":"Casta\u00f1o","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2025-12-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":110,"codigo":"17623089123279","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":"2025-12-01"}],"precio":"840.00","marca_logo":null,"marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 g","stock_disponible":true} [2025-11-05 00:16:09] Se encontraron 2 resultados en total. [2025-11-05 00:16:09] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-05 00:17:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:17:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:17:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:17:48] DEBUG SESSION: {"last_regeneration":1762312470,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:17:48] DEBUG SESSION ID: 3tba3v793mdj3tm1hf1nve94ef [2025-11-05 00:17:48] DEBUG SESSION STATUS: 2 [2025-11-05 00:17:48] Negocio en sesión: 78.216.219-5 [2025-11-05 00:17:48] Nombre: SGB-ERP SpA [2025-11-05 00:17:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:17:48] Conexión exitosa a la base de datos [2025-11-05 00:17:48] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:17:48] Buscando producto con código/nombre: 17623084405958 [2025-11-05 00:17:48] DEBUG: Código recibido: '17623084405958' (longitud: 14) [2025-11-05 00:17:48] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:17:48] ID de producto encontrado por código '17623084405958': 93 [2025-11-05 00:17:48] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 00:17:48] Detalles del producto encontrados: {"id":93,"nombre":"COCA COLA 2 LT RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"200.00","cantidad_por_unidad":"2.00","marca_nombre":"Coca-Cola","tipo_control_peso":"riguroso"} [2025-11-05 00:17:48] Producto normal detectado por código (ID: 93) [2025-11-05 00:17:48] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 00:17:48] Stock total calculado: 200 [2025-11-05 00:17:48] DEBUG: Buscando codigo_barras_id para producto_id: 93, codigo: 17623084405958 [2025-11-05 00:17:48] DEBUG: codigo_barras_id encontrado: 107 [2025-11-05 00:17:48] Producto ID: 93 - Tiene lotes: SÍ (cantidad: 3) [2025-11-05 00:17:48] DEBUG: codigo_barras_id agregado al producto: 107 [2025-11-05 00:17:48] Producto normal por código agregado a resultados (ID: 93) [2025-11-05 00:17:48] Datos finales del producto por código: {"id":93,"nombre":"COCA COLA 2 LT RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"200.00","cantidad_por_unidad":"2.00","marca_nombre":"Coca-Cola","tipo_control_peso":"riguroso","codigo":"17623084405958","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":107,"precio":"1765.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"200 l","stock_disponible":true} [2025-11-05 00:17:48] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:17:48] Productos encontrados por nombre: 0 [2025-11-05 00:17:48] Se encontraron 1 resultados en total. [2025-11-05 00:17:48] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 00:17:56] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:17:56] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:17:56] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:17:56] DEBUG SESSION: {"last_regeneration":1762312470,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:17:56] DEBUG SESSION ID: 3tba3v793mdj3tm1hf1nve94ef [2025-11-05 00:17:56] DEBUG SESSION STATUS: 2 [2025-11-05 00:17:56] Negocio en sesión: 78.216.219-5 [2025-11-05 00:17:56] Nombre: SGB-ERP SpA [2025-11-05 00:17:56] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:17:56] Conexión exitosa a la base de datos [2025-11-05 00:17:56] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:17:56] Buscando producto con código/nombre: * [2025-11-05 00:17:56] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:17:56] Solicitud para mostrar todos los productos [2025-11-05 00:17:56] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:17:56] Productos encontrados: 3 [2025-11-05 00:17:56] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084445049||manual;;17623084478458||manual [2025-11-05 00:17:56] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:17:56] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:17:56] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:17:56] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:17:56] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:17:56] Total de productos únicos encontrados: 3 [2025-11-05 00:18:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:18:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:18:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:18:06] DEBUG SESSION: {"last_regeneration":1762312470,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:18:06] DEBUG SESSION ID: 3tba3v793mdj3tm1hf1nve94ef [2025-11-05 00:18:06] DEBUG SESSION STATUS: 2 [2025-11-05 00:18:06] Negocio en sesión: 78.216.219-5 [2025-11-05 00:18:06] Nombre: SGB-ERP SpA [2025-11-05 00:18:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:18:06] Conexión exitosa a la base de datos [2025-11-05 00:18:06] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:18:06] Buscando producto con código/nombre: bimbo [2025-11-05 00:18:06] DEBUG: Código recibido: 'bimbo' (longitud: 5) [2025-11-05 00:18:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 00:18:06] No se encontró producto_id para el código exacto 'bimbo'. Intentando búsqueda parcial... [2025-11-05 00:18:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 00:18:06] Códigos parciales encontrados: 0 [2025-11-05 00:18:06] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 00:18:06] Productos encontrados por nombre: 1 [2025-11-05 00:18:06] Procesando producto encontrado por nombre: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 00:18:06] Usando lote específico detectado: ninguno para producto ID: 95 [2025-11-05 00:18:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 00:18:06] Códigos encontrados para ID 95: 1 [2025-11-05 00:18:06] Detalle de códigos: [{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}] [2025-11-05 00:18:06] Códigos con stock disponible: 1 [2025-11-05 00:18:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 00:18:06] Stock total calculado para ID 95: 50 [2025-11-05 00:18:06] Producto NORMAL ID: 95 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 00:18:06] Usando primer código disponible en orden FIFO para ID 95: {"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"} [2025-11-05 00:18:06] Producto por nombre agregado a resultados (ID: 95) [2025-11-05 00:18:06] Datos finales del producto: {"id":95,"codigo":"17623106267791","nombre":"PAN MOLDE","precio_venta":"1050.00","precio_final_publico":"1250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":50,"cantidad_por_unidad":"400.00","tipo_codigo":"manual","marca_nombre":"Bimbo","tipo_nombre":"Pan de Molde","categoria_nombre":"Panader\u00eda","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2025-11-20","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":111,"codigo":"17623106267791","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2025-11-20"}],"precio":"1050.00","marca_logo":"https:\/\/logo.clearbit.com\/bimbo.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 g","stock_disponible":true} [2025-11-05 00:18:06] Se encontraron 1 resultados en total. [2025-11-05 00:18:06] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 00:24:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 00:24:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 00:24:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 00:24:06] DEBUG SESSION: {"last_regeneration":1762312470,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"19","sesion_caja_id":"19","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-05 00:24:06] DEBUG SESSION ID: 3tba3v793mdj3tm1hf1nve94ef [2025-11-05 00:24:06] DEBUG SESSION STATUS: 2 [2025-11-05 00:24:06] Negocio en sesión: 78.216.219-5 [2025-11-05 00:24:06] Nombre: SGB-ERP SpA [2025-11-05 00:24:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 00:24:06] Conexión exitosa a la base de datos [2025-11-05 00:24:06] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 00:24:06] Buscando producto con código/nombre: * [2025-11-05 00:24:06] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 00:24:06] Solicitud para mostrar todos los productos [2025-11-05 00:24:06] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 00:24:06] Productos encontrados: 3 [2025-11-05 00:24:06] Producto 0: COCA COLA 2 LT RETORNABLE - Códigos adicionales: 17623084445049||manual;;17623084478458||manual [2025-11-05 00:24:06] Producto 1: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:24:06] Producto 2: PAN MOLDE - Códigos adicionales: NULL [2025-11-05 00:24:06] Producto agregado a resultados (ID: 93): COCA COLA 2 LT RETORNABLE [2025-11-05 00:24:06] Producto agregado a resultados (ID: 94): PAN MOLDE [2025-11-05 00:24:06] Producto agregado a resultados (ID: 95): PAN MOLDE [2025-11-05 00:24:06] Total de productos únicos encontrados: 3 [2025-11-05 13:35:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 13:35:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 13:35:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 13:35:41] DEBUG SESSION: {"last_regeneration":1762360251,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 13:35:41] DEBUG SESSION ID: v1q62ff30i21cd4ffd0ef4l6hg [2025-11-05 13:35:41] DEBUG SESSION STATUS: 2 [2025-11-05 13:35:41] Negocio en sesión: 17.612.457-1 [2025-11-05 13:35:41] Nombre: Mis dos princesas [2025-11-05 13:35:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 13:35:41] Conexión exitosa a la base de datos [2025-11-05 13:35:41] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 13:35:41] Buscando producto con código/nombre: co [2025-11-05 13:35:41] DEBUG: Código recibido: 'co' (longitud: 2) [2025-11-05 13:35:41] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 13:35:41] No se encontró producto_id para el código exacto 'co'. Intentando búsqueda parcial... [2025-11-05 13:35:41] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 13:35:41] Códigos parciales encontrados: 0 [2025-11-05 13:35:41] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 13:35:41] Productos encontrados por nombre: 1 [2025-11-05 13:35:41] Procesando producto encontrado por nombre: {"id":98,"codigo":"7801610022283","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"1513.00","precio_final_publico":"1800.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"diferente","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 13:35:41] Usando lote específico detectado: ninguno para producto ID: 98 [2025-11-05 13:35:41] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 13:35:41] Códigos encontrados para ID 98: 1 [2025-11-05 13:35:41] Detalle de códigos: [{"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2026-04-13"}] [2025-11-05 13:35:41] Códigos con stock disponible: 1 [2025-11-05 13:35:41] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-05 13:35:41] Stock total calculado para ID 98: 100 [2025-11-05 13:35:41] Producto NORMAL ID: 98 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 13:35:41] Usando primer código disponible en orden FIFO para ID 98: {"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2026-04-13"} [2025-11-05 13:35:41] Producto por nombre agregado a resultados (ID: 98) [2025-11-05 13:35:41] Datos finales del producto: {"id":98,"codigo":"7801610022283","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"1513.00","precio_final_publico":"1800.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"diferente","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":"2026-04-13","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"100.00","fecha_vencimiento":"2026-04-13"}],"precio":"1513.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 13:35:41] Se encontraron 1 resultados en total. [2025-11-05 13:35:41] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 13:35:53] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 13:35:53] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 13:35:53] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 13:35:53] DEBUG SESSION: {"last_regeneration":1762360251,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 13:35:53] DEBUG SESSION ID: v1q62ff30i21cd4ffd0ef4l6hg [2025-11-05 13:35:53] DEBUG SESSION STATUS: 2 [2025-11-05 13:35:53] Negocio en sesión: 17.612.457-1 [2025-11-05 13:35:53] Nombre: Mis dos princesas [2025-11-05 13:35:53] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 13:35:53] Conexión exitosa a la base de datos [2025-11-05 13:35:53] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 13:35:53] Buscando producto con código/nombre: * [2025-11-05 13:35:53] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 13:35:53] Solicitud para mostrar todos los productos [2025-11-05 13:35:53] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 13:35:53] Productos encontrados: 1 [2025-11-05 13:35:53] Producto 0: COCA COLA 2LT DESEACHE - Códigos adicionales: NULL [2025-11-05 13:35:53] Producto agregado a resultados (ID: 98): COCA COLA 2LT DESEACHE [2025-11-05 13:35:53] Total de productos únicos encontrados: 1 [2025-11-05 13:36:08] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 13:36:08] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 13:36:08] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 13:36:08] DEBUG SESSION: {"last_regeneration":1762360251,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 13:36:08] DEBUG SESSION ID: v1q62ff30i21cd4ffd0ef4l6hg [2025-11-05 13:36:08] DEBUG SESSION STATUS: 2 [2025-11-05 13:36:08] Negocio en sesión: 17.612.457-1 [2025-11-05 13:36:08] Nombre: Mis dos princesas [2025-11-05 13:36:08] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 13:36:08] Conexión exitosa a la base de datos [2025-11-05 13:36:08] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 13:36:08] Buscando producto con código/nombre: 7801610022283 [2025-11-05 13:36:08] DEBUG: Código recibido: '7801610022283' (longitud: 13) [2025-11-05 13:36:08] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 13:36:08] ID de producto encontrado por código '7801610022283': 98 [2025-11-05 13:36:08] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 13:36:08] Detalles del producto encontrados: {"id":98,"nombre":"COCA COLA 2LT DESEACHE","precio_venta":"1513.00","precio_final_publico":"1800.00","stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","marca_nombre":"Coca-Cola","tipo_control_peso":"riguroso"} [2025-11-05 13:36:08] Producto normal detectado por código (ID: 98) [2025-11-05 13:36:08] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 13:36:08] Stock total calculado: 100 [2025-11-05 13:36:08] DEBUG: Buscando codigo_barras_id para producto_id: 98, codigo: 7801610022283 [2025-11-05 13:36:08] DEBUG: codigo_barras_id encontrado: 114 [2025-11-05 13:36:08] Producto ID: 98 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 13:36:08] DEBUG: codigo_barras_id agregado al producto: 114 [2025-11-05 13:36:08] Producto normal por código agregado a resultados (ID: 98) [2025-11-05 13:36:08] Datos finales del producto por código: {"id":98,"nombre":"COCA COLA 2LT DESEACHE","precio_venta":"1513.00","precio_final_publico":"1800.00","stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","marca_nombre":"Coca-Cola","tipo_control_peso":"riguroso","codigo":"7801610022283","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":114,"precio":"1513.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 13:36:08] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 13:36:08] Productos encontrados por nombre: 0 [2025-11-05 13:36:08] Se encontraron 1 resultados en total. [2025-11-05 13:36:08] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 13:55:09] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 13:55:09] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 13:55:09] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 13:55:09] DEBUG SESSION: {"last_regeneration":1762361103,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 13:55:09] DEBUG SESSION ID: 3hf6qtv35au04uoei9mtlfnc1a [2025-11-05 13:55:09] DEBUG SESSION STATUS: 2 [2025-11-05 13:55:09] Negocio en sesión: 17.612.457-1 [2025-11-05 13:55:09] Nombre: Mis dos princesas [2025-11-05 13:55:09] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 13:55:09] Conexión exitosa a la base de datos [2025-11-05 13:55:09] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 13:55:09] Buscando producto con código/nombre: pan [2025-11-05 13:55:09] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-05 13:55:09] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 13:55:09] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-05 13:55:09] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 13:55:09] Códigos parciales encontrados: 1 [2025-11-05 13:55:09] Procesando código parcial: PAN-100 (ID: 100) [2025-11-05 13:55:09] Producto ID: 100 - Tiene lotes: NO (cantidad: 0) [2025-11-05 13:55:09] Producto ID: 100 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-05 13:55:09] DEBUGGING STOCK (código parcial): stockTotal original = 40 (tipo: double) [2025-11-05 13:55:09] DEBUGGING STOCK (código parcial): después de number_format = 40. [2025-11-05 13:55:09] DEBUGGING STOCK (código parcial): después de rtrim = 40 [2025-11-05 13:55:09] DEBUGGING STOCK (código parcial): stock_texto final = 40 kg [2025-11-05 13:55:09] Añadido producto con código parcial: {"id":100,"nombre":"PAN CORRIENTE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":null,"tipo_control_peso":"flexible","codigo":"PAN-100","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":40,"fecha_vencimiento":"2025-11-06","codigo_barras_id":116,"precio":"1765.00","stock_texto":"40 kg","stock_disponible":true} [2025-11-05 13:55:09] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 13:55:09] Productos encontrados por nombre: 1 [2025-11-05 13:55:09] Omitiendo producto por nombre duplicado (ID: 100) - ya procesado por código [2025-11-05 13:55:09] Se encontraron 1 resultados en total. [2025-11-05 13:55:09] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 13:59:28] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 13:59:28] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 13:59:28] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 13:59:28] DEBUG SESSION: {"last_regeneration":1762361103,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 13:59:28] DEBUG SESSION ID: 3hf6qtv35au04uoei9mtlfnc1a [2025-11-05 13:59:28] DEBUG SESSION STATUS: 2 [2025-11-05 13:59:28] Negocio en sesión: 17.612.457-1 [2025-11-05 13:59:28] Nombre: Mis dos princesas [2025-11-05 13:59:28] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 13:59:28] Conexión exitosa a la base de datos [2025-11-05 13:59:28] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 13:59:28] Buscando producto con código/nombre: coca [2025-11-05 13:59:28] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 13:59:28] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 13:59:28] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 13:59:28] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 13:59:28] Códigos parciales encontrados: 0 [2025-11-05 13:59:28] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 13:59:28] Productos encontrados por nombre: 1 [2025-11-05 13:59:28] Procesando producto encontrado por nombre: {"id":98,"codigo":"7801610022283","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"1513.00","precio_final_publico":"1800.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"99.00","cantidad_por_unidad":"2.00","tipo_codigo":"diferente","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 13:59:28] Usando lote específico detectado: ninguno para producto ID: 98 [2025-11-05 13:59:28] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 13:59:28] Códigos encontrados para ID 98: 1 [2025-11-05 13:59:28] Detalle de códigos: [{"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2026-04-14"}] [2025-11-05 13:59:28] Códigos con stock disponible: 1 [2025-11-05 13:59:28] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-05 13:59:28] Stock total calculado para ID 98: 99 [2025-11-05 13:59:28] Producto NORMAL ID: 98 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 13:59:28] Usando primer código disponible en orden FIFO para ID 98: {"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2026-04-14"} [2025-11-05 13:59:28] Producto por nombre agregado a resultados (ID: 98) [2025-11-05 13:59:28] Datos finales del producto: {"id":98,"codigo":"7801610022283","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"1513.00","precio_final_publico":"1800.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":99,"cantidad_por_unidad":"2.00","tipo_codigo":"diferente","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"99.00","fecha_vencimiento":"2026-04-14","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2026-04-14"}],"precio":"1513.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"99 l","stock_disponible":true} [2025-11-05 13:59:28] Se encontraron 1 resultados en total. [2025-11-05 13:59:28] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 14:04:55] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:04:55] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:04:55] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:04:55] DEBUG SESSION: {"last_regeneration":1762361103,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:04:55] DEBUG SESSION ID: 3hf6qtv35au04uoei9mtlfnc1a [2025-11-05 14:04:55] DEBUG SESSION STATUS: 2 [2025-11-05 14:04:55] Negocio en sesión: 17.612.457-1 [2025-11-05 14:04:55] Nombre: Mis dos princesas [2025-11-05 14:04:55] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:04:55] Conexión exitosa a la base de datos [2025-11-05 14:04:55] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:04:55] Buscando producto con código/nombre: 7898591453304 [2025-11-05 14:04:55] DEBUG: Código recibido: '7898591453304' (longitud: 13) [2025-11-05 14:04:55] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:04:55] ID de producto encontrado por código '7898591453304': 99 [2025-11-05 14:04:55] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 14:04:55] Detalles del producto encontrados: {"id":99,"nombre":"GOMITAS PLATANO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso"} [2025-11-05 14:04:55] Producto normal detectado por código (ID: 99) [2025-11-05 14:04:55] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 14:04:55] Stock total calculado: 10 [2025-11-05 14:04:55] DEBUG: Buscando codigo_barras_id para producto_id: 99, codigo: 7898591453304 [2025-11-05 14:04:55] DEBUG: codigo_barras_id encontrado: 115 [2025-11-05 14:04:55] Producto ID: 99 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:04:55] DEBUG: codigo_barras_id agregado al producto: 115 [2025-11-05 14:04:55] Producto normal por código agregado a resultados (ID: 99) [2025-11-05 14:04:55] Datos finales del producto por código: {"id":99,"nombre":"GOMITAS PLATANO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso","codigo":"7898591453304","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":115,"precio":"1008.00","marca_logo":"https:\/\/logo.clearbit.com\/fini.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 un","stock_disponible":true} [2025-11-05 14:04:55] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:04:55] Productos encontrados por nombre: 0 [2025-11-05 14:04:55] Se encontraron 1 resultados en total. [2025-11-05 14:04:55] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 14:09:53] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:09:53] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:09:53] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:09:53] DEBUG SESSION: {"last_regeneration":1762361103,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:09:53] DEBUG SESSION ID: 3hf6qtv35au04uoei9mtlfnc1a [2025-11-05 14:09:53] DEBUG SESSION STATUS: 2 [2025-11-05 14:09:53] Negocio en sesión: 17.612.457-1 [2025-11-05 14:09:53] Nombre: Mis dos princesas [2025-11-05 14:09:53] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:09:53] Conexión exitosa a la base de datos [2025-11-05 14:09:53] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:09:53] Buscando producto con código/nombre: co [2025-11-05 14:09:53] DEBUG: Código recibido: 'co' (longitud: 2) [2025-11-05 14:09:53] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:09:53] No se encontró producto_id para el código exacto 'co'. Intentando búsqueda parcial... [2025-11-05 14:09:53] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:09:53] Códigos parciales encontrados: 0 [2025-11-05 14:09:53] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:09:53] Productos encontrados por nombre: 2 [2025-11-05 14:09:53] Procesando producto encontrado por nombre: {"id":98,"codigo":"7801610022283","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"1513.00","precio_final_publico":"1800.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"99.00","cantidad_por_unidad":"2.00","tipo_codigo":"diferente","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 14:09:53] Usando lote específico detectado: ninguno para producto ID: 98 [2025-11-05 14:09:53] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 14:09:53] Códigos encontrados para ID 98: 1 [2025-11-05 14:09:53] Detalle de códigos: [{"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2026-04-14"}] [2025-11-05 14:09:53] Códigos con stock disponible: 1 [2025-11-05 14:09:53] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-05 14:09:53] Stock total calculado para ID 98: 99 [2025-11-05 14:09:53] Producto NORMAL ID: 98 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:09:53] Usando primer código disponible en orden FIFO para ID 98: {"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2026-04-14"} [2025-11-05 14:09:53] Producto por nombre agregado a resultados (ID: 98) [2025-11-05 14:09:53] Datos finales del producto: {"id":98,"codigo":"7801610022283","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"1513.00","precio_final_publico":"1800.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":99,"cantidad_por_unidad":"2.00","tipo_codigo":"diferente","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"99.00","fecha_vencimiento":"2026-04-14","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":114,"codigo":"7801610022283","tipo_codigo":"diferente","cantidad":"99.00","fecha_vencimiento":"2026-04-14"}],"precio":"1513.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"99 l","stock_disponible":true} [2025-11-05 14:09:53] Procesando producto encontrado por nombre: {"id":100,"codigo":"PAN-100","nombre":"PAN CORRIENTE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"39.75","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Corriente","categoria_nombre":"Panader\u00eda","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-05 14:09:53] Usando lote específico detectado: ninguno para producto ID: 100 [2025-11-05 14:09:53] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 14:09:53] Códigos encontrados para ID 100: 1 [2025-11-05 14:09:53] Detalle de códigos: [{"id":116,"codigo":"PAN-100","tipo_codigo":"especial","cantidad":"39.75","fecha_vencimiento":"2025-11-06"}] [2025-11-05 14:09:53] Códigos con stock disponible: 1 [2025-11-05 14:09:53] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-05 14:09:53] Producto especial por nombre - Stock desde productos/inventario: 39.75 [2025-11-05 14:09:53] Producto especial por nombre con stock disponible: 39.75 [2025-11-05 14:09:53] Producto ESPECIAL ID: 100 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:09:53] Usando primer código disponible en orden FIFO para ID 100: {"id":116,"codigo":"PAN-100","tipo_codigo":"especial","cantidad":"39.75","fecha_vencimiento":"2025-11-06"} [2025-11-05 14:09:53] DEBUGGING STOCK (nombre): stockTotal original = 39.75 (tipo: double) [2025-11-05 14:09:53] DEBUGGING STOCK (nombre): después de number_format = 39.75 [2025-11-05 14:09:53] DEBUGGING STOCK (nombre): después de rtrim = 39.75 [2025-11-05 14:09:53] DEBUGGING STOCK (nombre): stock_texto final = 39.75 kg [2025-11-05 14:09:53] Producto por nombre agregado a resultados (ID: 100) [2025-11-05 14:09:53] Datos finales del producto: {"id":100,"codigo":"PAN-100","nombre":"PAN CORRIENTE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":39.75,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":null,"tipo_nombre":"Pan Corriente","categoria_nombre":"Panader\u00eda","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"39.75","fecha_vencimiento":"2025-11-06","es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":116,"codigo":"PAN-100","tipo_codigo":"especial","cantidad":"39.75","fecha_vencimiento":"2025-11-06"}],"precio":"1765.00","stock_texto":"39.75 kg","stock_disponible":true} [2025-11-05 14:09:53] Se encontraron 2 resultados en total. [2025-11-05 14:09:53] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-05 14:28:20] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:28:20] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:28:20] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:28:20] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:28:20] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:28:20] DEBUG SESSION STATUS: 2 [2025-11-05 14:28:20] Negocio en sesión: 17.612.457-1 [2025-11-05 14:28:20] Nombre: Mis dos princesas [2025-11-05 14:28:20] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:28:20] Conexión exitosa a la base de datos [2025-11-05 14:28:20] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:28:20] Buscando producto con código/nombre: * [2025-11-05 14:28:20] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 14:28:20] Solicitud para mostrar todos los productos [2025-11-05 14:28:20] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 14:28:20] Productos encontrados: 0 [2025-11-05 14:28:20] Total de productos únicos encontrados: 0 [2025-11-05 14:32:22] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:32:22] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:32:22] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:32:22] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:32:22] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:32:22] DEBUG SESSION STATUS: 2 [2025-11-05 14:32:22] Negocio en sesión: 17.612.457-1 [2025-11-05 14:32:22] Nombre: Mis dos princesas [2025-11-05 14:32:22] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:32:22] Conexión exitosa a la base de datos [2025-11-05 14:32:22] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:32:22] Buscando producto con código/nombre: coca [2025-11-05 14:32:22] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 14:32:22] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:32:22] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 14:32:22] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:32:22] Códigos parciales encontrados: 0 [2025-11-05 14:32:22] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:32:22] Productos encontrados por nombre: 0 [2025-11-05 14:32:22] No se encontró ningún producto con stock por ningún método [2025-11-05 14:32:22] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-05 14:35:32] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:35:32] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:35:32] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:35:32] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:35:32] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:35:32] DEBUG SESSION STATUS: 2 [2025-11-05 14:35:32] Negocio en sesión: 17.612.457-1 [2025-11-05 14:35:32] Nombre: Mis dos princesas [2025-11-05 14:35:32] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:35:32] Conexión exitosa a la base de datos [2025-11-05 14:35:32] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:35:32] Buscando producto con código/nombre: coca [2025-11-05 14:35:32] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 14:35:32] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:35:32] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 14:35:32] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:35:32] Códigos parciales encontrados: 0 [2025-11-05 14:35:32] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:35:32] Productos encontrados por nombre: 1 [2025-11-05 14:35:32] Procesando producto encontrado por nombre: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 14:35:32] Usando lote específico detectado: ninguno para producto ID: 101 [2025-11-05 14:35:32] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 14:35:32] Códigos encontrados para ID 101: 1 [2025-11-05 14:35:32] Detalle de códigos: [{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 14:35:32] Códigos con stock disponible: 1 [2025-11-05 14:35:32] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 14:35:32] Stock total calculado para ID 101: 100 [2025-11-05 14:35:32] Producto NORMAL ID: 101 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:35:32] Usando primer código disponible en orden FIFO para ID 101: {"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 14:35:32] Producto por nombre agregado a resultados (ID: 101) [2025-11-05 14:35:32] Datos finales del producto: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 14:35:32] Se encontraron 1 resultados en total. [2025-11-05 14:35:32] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 14:37:01] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:37:01] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:37:01] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:37:01] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:37:01] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:37:01] DEBUG SESSION STATUS: 2 [2025-11-05 14:37:01] Negocio en sesión: 17.612.457-1 [2025-11-05 14:37:01] Nombre: Mis dos princesas [2025-11-05 14:37:01] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:37:01] Conexión exitosa a la base de datos [2025-11-05 14:37:01] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:37:01] Buscando producto con código/nombre: coca [2025-11-05 14:37:01] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 14:37:01] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:37:01] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 14:37:01] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:37:01] Códigos parciales encontrados: 0 [2025-11-05 14:37:01] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:37:01] Productos encontrados por nombre: 1 [2025-11-05 14:37:01] Procesando producto encontrado por nombre: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 14:37:01] Usando lote específico detectado: ninguno para producto ID: 101 [2025-11-05 14:37:01] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 14:37:01] Códigos encontrados para ID 101: 1 [2025-11-05 14:37:01] Detalle de códigos: [{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 14:37:01] Códigos con stock disponible: 1 [2025-11-05 14:37:01] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 14:37:01] Stock total calculado para ID 101: 100 [2025-11-05 14:37:01] Producto NORMAL ID: 101 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:37:01] Usando primer código disponible en orden FIFO para ID 101: {"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 14:37:01] Producto por nombre agregado a resultados (ID: 101) [2025-11-05 14:37:01] Datos finales del producto: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 14:37:01] Se encontraron 1 resultados en total. [2025-11-05 14:37:01] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 14:37:18] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:37:18] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:37:18] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:37:18] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:37:18] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:37:18] DEBUG SESSION STATUS: 2 [2025-11-05 14:37:18] Negocio en sesión: 17.612.457-1 [2025-11-05 14:37:18] Nombre: Mis dos princesas [2025-11-05 14:37:18] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:37:18] Conexión exitosa a la base de datos [2025-11-05 14:37:18] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:37:18] Buscando producto con código/nombre: coca [2025-11-05 14:37:18] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 14:37:18] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:37:18] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 14:37:18] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:37:18] Códigos parciales encontrados: 0 [2025-11-05 14:37:18] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:37:18] Productos encontrados por nombre: 1 [2025-11-05 14:37:18] Procesando producto encontrado por nombre: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 14:37:18] Usando lote específico detectado: ninguno para producto ID: 101 [2025-11-05 14:37:18] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 14:37:18] Códigos encontrados para ID 101: 1 [2025-11-05 14:37:18] Detalle de códigos: [{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 14:37:18] Códigos con stock disponible: 1 [2025-11-05 14:37:18] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 14:37:18] Stock total calculado para ID 101: 100 [2025-11-05 14:37:18] Producto NORMAL ID: 101 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:37:18] Usando primer código disponible en orden FIFO para ID 101: {"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 14:37:18] Producto por nombre agregado a resultados (ID: 101) [2025-11-05 14:37:18] Datos finales del producto: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 14:37:18] Se encontraron 1 resultados en total. [2025-11-05 14:37:18] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 14:37:54] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:37:54] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:37:54] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:37:54] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:37:54] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:37:54] DEBUG SESSION STATUS: 2 [2025-11-05 14:37:54] Negocio en sesión: 17.612.457-1 [2025-11-05 14:37:54] Nombre: Mis dos princesas [2025-11-05 14:37:54] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:37:54] Conexión exitosa a la base de datos [2025-11-05 14:37:54] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:37:54] Buscando producto con código/nombre: coca [2025-11-05 14:37:54] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 14:37:54] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:37:54] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 14:37:54] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:37:54] Códigos parciales encontrados: 0 [2025-11-05 14:37:54] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:37:54] Productos encontrados por nombre: 1 [2025-11-05 14:37:54] Procesando producto encontrado por nombre: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 14:37:54] Usando lote específico detectado: ninguno para producto ID: 101 [2025-11-05 14:37:54] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 14:37:54] Códigos encontrados para ID 101: 1 [2025-11-05 14:37:54] Detalle de códigos: [{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 14:37:54] Códigos con stock disponible: 1 [2025-11-05 14:37:54] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 14:37:54] Stock total calculado para ID 101: 100 [2025-11-05 14:37:54] Producto NORMAL ID: 101 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:37:54] Usando primer código disponible en orden FIFO para ID 101: {"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 14:37:54] Producto por nombre agregado a resultados (ID: 101) [2025-11-05 14:37:54] Datos finales del producto: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 14:37:54] Se encontraron 1 resultados en total. [2025-11-05 14:37:54] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 14:40:57] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:40:57] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:40:57] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:40:57] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:40:57] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:40:57] DEBUG SESSION STATUS: 2 [2025-11-05 14:40:57] Negocio en sesión: 17.612.457-1 [2025-11-05 14:40:57] Nombre: Mis dos princesas [2025-11-05 14:40:57] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:40:57] Conexión exitosa a la base de datos [2025-11-05 14:40:57] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:40:57] Buscando producto con código/nombre: coca [2025-11-05 14:40:57] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 14:40:57] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:40:57] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 14:40:57] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:40:57] Códigos parciales encontrados: 0 [2025-11-05 14:40:57] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:40:57] Productos encontrados por nombre: 1 [2025-11-05 14:40:57] Procesando producto encontrado por nombre: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 14:40:57] Usando lote específico detectado: ninguno para producto ID: 101 [2025-11-05 14:40:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 14:40:57] Códigos encontrados para ID 101: 1 [2025-11-05 14:40:57] Detalle de códigos: [{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 14:40:57] Códigos con stock disponible: 1 [2025-11-05 14:40:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 14:40:57] Stock total calculado para ID 101: 100 [2025-11-05 14:40:57] Producto NORMAL ID: 101 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:40:57] Usando primer código disponible en orden FIFO para ID 101: {"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 14:40:57] Producto por nombre agregado a resultados (ID: 101) [2025-11-05 14:40:57] Datos finales del producto: {"id":101,"codigo":"17623641178214","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":117,"codigo":"17623641178214","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 14:40:57] Se encontraron 1 resultados en total. [2025-11-05 14:40:57] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 14:41:07] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:41:07] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:41:07] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:41:07] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:41:07] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:41:07] DEBUG SESSION STATUS: 2 [2025-11-05 14:41:07] Negocio en sesión: 17.612.457-1 [2025-11-05 14:41:07] Nombre: Mis dos princesas [2025-11-05 14:41:07] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:41:07] Conexión exitosa a la base de datos [2025-11-05 14:41:07] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:41:07] Buscando producto con código/nombre: 17623641178214 [2025-11-05 14:41:07] DEBUG: Código recibido: '17623641178214' (longitud: 14) [2025-11-05 14:41:07] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:41:07] ID de producto encontrado por código '17623641178214': 101 [2025-11-05 14:41:07] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 14:41:07] Detalles del producto encontrados: {"id":101,"nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","marca_nombre":"Coca-Cola","tipo_control_peso":"riguroso"} [2025-11-05 14:41:07] Producto normal detectado por código (ID: 101) [2025-11-05 14:41:07] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 14:41:07] Stock total calculado: 100 [2025-11-05 14:41:07] DEBUG: Buscando codigo_barras_id para producto_id: 101, codigo: 17623641178214 [2025-11-05 14:41:07] DEBUG: codigo_barras_id encontrado: 117 [2025-11-05 14:41:07] Producto ID: 101 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 14:41:07] DEBUG: codigo_barras_id agregado al producto: 117 [2025-11-05 14:41:07] Producto normal por código agregado a resultados (ID: 101) [2025-11-05 14:41:07] Datos finales del producto por código: {"id":101,"nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","marca_nombre":"Coca-Cola","tipo_control_peso":"riguroso","codigo":"17623641178214","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":117,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 14:41:07] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:41:07] Productos encontrados por nombre: 0 [2025-11-05 14:41:07] Se encontraron 1 resultados en total. [2025-11-05 14:41:07] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 14:44:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:44:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:44:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:44:48] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:44:48] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:44:48] DEBUG SESSION STATUS: 2 [2025-11-05 14:44:48] Negocio en sesión: 17.612.457-1 [2025-11-05 14:44:48] Nombre: Mis dos princesas [2025-11-05 14:44:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:44:48] Conexión exitosa a la base de datos [2025-11-05 14:44:48] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:44:48] Buscando producto con código/nombre: coa [2025-11-05 14:44:48] DEBUG: Código recibido: 'coa' (longitud: 3) [2025-11-05 14:44:48] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:44:48] No se encontró producto_id para el código exacto 'coa'. Intentando búsqueda parcial... [2025-11-05 14:44:48] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:44:48] Códigos parciales encontrados: 0 [2025-11-05 14:44:48] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:44:48] Productos encontrados por nombre: 0 [2025-11-05 14:44:48] No se encontró ningún producto con stock por ningún método [2025-11-05 14:44:48] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-05 14:44:50] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 14:44:50] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 14:44:50] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 14:44:50] DEBUG SESSION: {"last_regeneration":1762363374,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-05 14:44:50] DEBUG SESSION ID: ruicdv468kei7bk73d3grhn5us [2025-11-05 14:44:50] DEBUG SESSION STATUS: 2 [2025-11-05 14:44:50] Negocio en sesión: 17.612.457-1 [2025-11-05 14:44:50] Nombre: Mis dos princesas [2025-11-05 14:44:50] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 14:44:50] Conexión exitosa a la base de datos [2025-11-05 14:44:50] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-05 14:44:50] Buscando producto con código/nombre: co [2025-11-05 14:44:50] DEBUG: Código recibido: 'co' (longitud: 2) [2025-11-05 14:44:50] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 14:44:50] No se encontró producto_id para el código exacto 'co'. Intentando búsqueda parcial... [2025-11-05 14:44:50] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 14:44:50] Códigos parciales encontrados: 0 [2025-11-05 14:44:50] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 14:44:50] Productos encontrados por nombre: 0 [2025-11-05 14:44:50] No se encontró ningún producto con stock por ningún método [2025-11-05 14:44:50] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-05 15:52:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 15:52:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 15:52:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 15:52:41] DEBUG SESSION: {"last_regeneration":1762368688,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 15:52:41] DEBUG SESSION ID: ui5r3kc67kes360m9jqscjim8o [2025-11-05 15:52:41] DEBUG SESSION STATUS: 2 [2025-11-05 15:52:41] Negocio en sesión: 78.216.219-5 [2025-11-05 15:52:41] Nombre: SGB-ERP SpA [2025-11-05 15:52:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 15:52:41] Conexión exitosa a la base de datos [2025-11-05 15:52:41] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 15:52:41] Buscando producto con código/nombre: 1762368719398 [2025-11-05 15:52:41] DEBUG: Código recibido: '1762368719398' (longitud: 13) [2025-11-05 15:52:41] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 15:52:41] No se encontró producto_id para el código exacto '1762368719398'. Intentando búsqueda parcial... [2025-11-05 15:52:41] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 15:52:41] Códigos parciales encontrados: 0 [2025-11-05 15:52:41] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 15:52:41] Productos encontrados por nombre: 0 [2025-11-05 15:52:41] No se encontró ningún producto con stock por ningún método [2025-11-05 15:52:41] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-05 15:52:57] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 15:52:57] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 15:52:57] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 15:52:57] DEBUG SESSION: {"last_regeneration":1762368688,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 15:52:57] DEBUG SESSION ID: ui5r3kc67kes360m9jqscjim8o [2025-11-05 15:52:57] DEBUG SESSION STATUS: 2 [2025-11-05 15:52:57] Negocio en sesión: 78.216.219-5 [2025-11-05 15:52:57] Nombre: SGB-ERP SpA [2025-11-05 15:52:57] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 15:52:57] Conexión exitosa a la base de datos [2025-11-05 15:52:57] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 15:52:57] Buscando producto con código/nombre: 176236871939 [2025-11-05 15:52:57] DEBUG: Código recibido: '176236871939' (longitud: 12) [2025-11-05 15:52:57] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 15:52:57] No se encontró producto_id para el código exacto '176236871939'. Intentando búsqueda parcial... [2025-11-05 15:52:57] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 15:52:57] Códigos parciales encontrados: 1 [2025-11-05 15:52:57] Procesando código parcial: 17623687193955 (ID: 102) [2025-11-05 15:52:57] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 15:52:57] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 15:52:57] Añadido producto con código parcial: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":100,"cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":100,"fecha_vencimiento":null,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 15:52:57] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 15:52:57] Productos encontrados por nombre: 0 [2025-11-05 15:52:57] Se encontraron 1 resultados en total. [2025-11-05 15:52:57] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 15:53:25] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 15:53:25] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 15:53:25] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 15:53:25] DEBUG SESSION: {"last_regeneration":1762368688,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 15:53:25] DEBUG SESSION ID: ui5r3kc67kes360m9jqscjim8o [2025-11-05 15:53:25] DEBUG SESSION STATUS: 2 [2025-11-05 15:53:25] Negocio en sesión: 78.216.219-5 [2025-11-05 15:53:25] Nombre: SGB-ERP SpA [2025-11-05 15:53:25] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 15:53:25] Conexión exitosa a la base de datos [2025-11-05 15:53:25] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 15:53:25] Buscando producto con código/nombre: 17623687193955 [2025-11-05 15:53:25] DEBUG: Código recibido: '17623687193955' (longitud: 14) [2025-11-05 15:53:25] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 15:53:25] ID de producto encontrado por código '17623687193955': 102 [2025-11-05 15:53:25] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 15:53:25] Detalles del producto encontrados: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso"} [2025-11-05 15:53:25] Producto normal detectado por código (ID: 102) [2025-11-05 15:53:25] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 15:53:25] Stock total calculado: 100 [2025-11-05 15:53:25] DEBUG: Buscando codigo_barras_id para producto_id: 102, codigo: 17623687193955 [2025-11-05 15:53:25] DEBUG: codigo_barras_id encontrado: 118 [2025-11-05 15:53:25] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 15:53:25] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 15:53:25] DEBUG: codigo_barras_id agregado al producto: 118 [2025-11-05 15:53:25] Producto normal por código agregado a resultados (ID: 102) [2025-11-05 15:53:25] Datos finales del producto por código: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 15:53:25] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 15:53:25] Productos encontrados por nombre: 0 [2025-11-05 15:53:25] Se encontraron 1 resultados en total. [2025-11-05 15:53:25] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 20:49:59] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 20:49:59] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 20:49:59] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 20:49:59] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 20:49:59] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 20:49:59] DEBUG SESSION STATUS: 2 [2025-11-05 20:49:59] Negocio en sesión: 78.216.219-5 [2025-11-05 20:49:59] Nombre: SGB-ERP SpA [2025-11-05 20:49:59] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 20:49:59] Conexión exitosa a la base de datos [2025-11-05 20:49:59] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 20:49:59] Buscando producto con código/nombre: coca [2025-11-05 20:49:59] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 20:49:59] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 20:49:59] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 20:49:59] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 20:49:59] Códigos parciales encontrados: 0 [2025-11-05 20:49:59] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 20:49:59] Productos encontrados por nombre: 1 [2025-11-05 20:49:59] Procesando producto encontrado por nombre: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 20:49:59] Usando lote específico detectado: ninguno para producto ID: 97 [2025-11-05 20:49:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 20:49:59] Códigos encontrados para ID 97: 1 [2025-11-05 20:49:59] Detalle de códigos: [{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 20:49:59] Códigos con stock disponible: 1 [2025-11-05 20:49:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 20:49:59] Stock total calculado para ID 97: 100 [2025-11-05 20:49:59] Producto NORMAL ID: 97 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 20:49:59] Usando primer código disponible en orden FIFO para ID 97: {"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 20:49:59] Producto por nombre agregado a resultados (ID: 97) [2025-11-05 20:49:59] Datos finales del producto: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2101.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 20:49:59] Se encontraron 1 resultados en total. [2025-11-05 20:49:59] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 20:51:00] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 20:51:00] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 20:51:00] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 20:51:00] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 20:51:00] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 20:51:00] DEBUG SESSION STATUS: 2 [2025-11-05 20:51:00] Negocio en sesión: 78.216.219-5 [2025-11-05 20:51:00] Nombre: SGB-ERP SpA [2025-11-05 20:51:00] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 20:51:00] Conexión exitosa a la base de datos [2025-11-05 20:51:00] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 20:51:00] Buscando producto con código/nombre: 1762368719398 [2025-11-05 20:51:00] DEBUG: Código recibido: '1762368719398' (longitud: 13) [2025-11-05 20:51:00] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 20:51:00] No se encontró producto_id para el código exacto '1762368719398'. Intentando búsqueda parcial... [2025-11-05 20:51:00] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 20:51:00] Códigos parciales encontrados: 0 [2025-11-05 20:51:00] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 20:51:00] Productos encontrados por nombre: 0 [2025-11-05 20:51:00] No se encontró ningún producto con stock por ningún método [2025-11-05 20:51:00] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-05 20:57:56] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 20:57:56] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 20:57:56] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 20:57:56] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 20:57:56] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 20:57:56] DEBUG SESSION STATUS: 2 [2025-11-05 20:57:56] Negocio en sesión: 78.216.219-5 [2025-11-05 20:57:56] Nombre: SGB-ERP SpA [2025-11-05 20:57:56] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 20:57:56] Conexión exitosa a la base de datos [2025-11-05 20:57:56] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 20:57:56] Buscando producto con código/nombre: 17623687193955 [2025-11-05 20:57:56] DEBUG: Código recibido: '17623687193955' (longitud: 14) [2025-11-05 20:57:56] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 20:57:56] ID de producto encontrado por código '17623687193955': 102 [2025-11-05 20:57:56] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 20:57:56] Detalles del producto encontrados: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso"} [2025-11-05 20:57:56] Producto normal detectado por código (ID: 102) [2025-11-05 20:57:56] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 20:57:56] Stock total calculado: 100 [2025-11-05 20:57:56] DEBUG: Buscando codigo_barras_id para producto_id: 102, codigo: 17623687193955 [2025-11-05 20:57:56] DEBUG: codigo_barras_id encontrado: 118 [2025-11-05 20:57:56] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 20:57:56] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 20:57:56] DEBUG: codigo_barras_id agregado al producto: 118 [2025-11-05 20:57:56] Producto normal por código agregado a resultados (ID: 102) [2025-11-05 20:57:56] Datos finales del producto por código: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 20:57:56] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 20:57:56] Productos encontrados por nombre: 0 [2025-11-05 20:57:56] Se encontraron 1 resultados en total. [2025-11-05 20:57:56] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:00:32] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:00:32] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:00:32] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:00:32] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:00:32] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:00:32] DEBUG SESSION STATUS: 2 [2025-11-05 21:00:32] Negocio en sesión: 78.216.219-5 [2025-11-05 21:00:32] Nombre: SGB-ERP SpA [2025-11-05 21:00:32] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:00:32] Conexión exitosa a la base de datos [2025-11-05 21:00:32] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:00:32] Buscando producto con código/nombre: 17623687193955 [2025-11-05 21:00:32] DEBUG: Código recibido: '17623687193955' (longitud: 14) [2025-11-05 21:00:32] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:00:32] ID de producto encontrado por código '17623687193955': 102 [2025-11-05 21:00:32] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 21:00:32] Detalles del producto encontrados: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso"} [2025-11-05 21:00:32] Producto normal detectado por código (ID: 102) [2025-11-05 21:00:32] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 21:00:32] Stock total calculado: 100 [2025-11-05 21:00:32] DEBUG: Buscando codigo_barras_id para producto_id: 102, codigo: 17623687193955 [2025-11-05 21:00:32] DEBUG: codigo_barras_id encontrado: 118 [2025-11-05 21:00:32] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:00:32] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 21:00:32] DEBUG: codigo_barras_id agregado al producto: 118 [2025-11-05 21:00:32] Producto normal por código agregado a resultados (ID: 102) [2025-11-05 21:00:32] Datos finales del producto por código: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 21:00:32] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:00:32] Productos encontrados por nombre: 0 [2025-11-05 21:00:32] Se encontraron 1 resultados en total. [2025-11-05 21:00:32] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:00:40] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:00:40] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:00:40] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:00:40] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:00:40] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:00:40] DEBUG SESSION STATUS: 2 [2025-11-05 21:00:40] Negocio en sesión: 78.216.219-5 [2025-11-05 21:00:40] Nombre: SGB-ERP SpA [2025-11-05 21:00:40] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:00:40] Conexión exitosa a la base de datos [2025-11-05 21:00:40] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:00:40] Buscando producto con código/nombre: 17623687193955 [2025-11-05 21:00:40] DEBUG: Código recibido: '17623687193955' (longitud: 14) [2025-11-05 21:00:40] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:00:40] ID de producto encontrado por código '17623687193955': 102 [2025-11-05 21:00:40] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 21:00:40] Detalles del producto encontrados: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso"} [2025-11-05 21:00:40] Producto normal detectado por código (ID: 102) [2025-11-05 21:00:40] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 21:00:40] Stock total calculado: 100 [2025-11-05 21:00:40] DEBUG: Buscando codigo_barras_id para producto_id: 102, codigo: 17623687193955 [2025-11-05 21:00:41] DEBUG: codigo_barras_id encontrado: 118 [2025-11-05 21:00:41] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:00:41] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 21:00:41] DEBUG: codigo_barras_id agregado al producto: 118 [2025-11-05 21:00:41] Producto normal por código agregado a resultados (ID: 102) [2025-11-05 21:00:41] Datos finales del producto por código: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 21:00:41] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:00:41] Productos encontrados por nombre: 0 [2025-11-05 21:00:41] Se encontraron 1 resultados en total. [2025-11-05 21:00:41] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:02:29] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:02:29] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:02:29] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:02:29] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:02:29] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:02:29] DEBUG SESSION STATUS: 2 [2025-11-05 21:02:29] Negocio en sesión: 78.216.219-5 [2025-11-05 21:02:29] Nombre: SGB-ERP SpA [2025-11-05 21:02:29] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:02:29] Conexión exitosa a la base de datos [2025-11-05 21:02:29] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:02:29] Buscando producto con código/nombre: 17623687193955 [2025-11-05 21:02:29] DEBUG: Código recibido: '17623687193955' (longitud: 14) [2025-11-05 21:02:29] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:02:29] ID de producto encontrado por código '17623687193955': 102 [2025-11-05 21:02:29] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 21:02:29] Detalles del producto encontrados: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso"} [2025-11-05 21:02:29] Producto normal detectado por código (ID: 102) [2025-11-05 21:02:29] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 21:02:29] Stock total calculado: 100 [2025-11-05 21:02:29] DEBUG: Buscando codigo_barras_id para producto_id: 102, codigo: 17623687193955 [2025-11-05 21:02:29] DEBUG: codigo_barras_id encontrado: 118 [2025-11-05 21:02:29] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:02:29] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 21:02:29] DEBUG: codigo_barras_id agregado al producto: 118 [2025-11-05 21:02:29] Producto normal por código agregado a resultados (ID: 102) [2025-11-05 21:02:29] Datos finales del producto por código: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 21:02:29] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:02:29] Productos encontrados por nombre: 0 [2025-11-05 21:02:29] Se encontraron 1 resultados en total. [2025-11-05 21:02:29] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:03:36] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:03:36] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:03:36] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:03:36] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:03:36] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:03:36] DEBUG SESSION STATUS: 2 [2025-11-05 21:03:36] Negocio en sesión: 78.216.219-5 [2025-11-05 21:03:36] Nombre: SGB-ERP SpA [2025-11-05 21:03:36] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:03:36] Conexión exitosa a la base de datos [2025-11-05 21:03:36] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:03:36] Buscando producto con código/nombre: * [2025-11-05 21:03:36] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 21:03:36] Solicitud para mostrar todos los productos [2025-11-05 21:03:36] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 21:03:36] Productos encontrados: 2 [2025-11-05 21:03:36] Producto 0: COCA COLA 2LT DESEACHE - Códigos adicionales: NULL [2025-11-05 21:03:36] Producto 1: TEST - Códigos adicionales: NULL [2025-11-05 21:03:36] Producto agregado a resultados (ID: 97): COCA COLA 2LT DESEACHE [2025-11-05 21:03:36] Producto agregado a resultados (ID: 102): TEST [2025-11-05 21:03:36] Total de productos únicos encontrados: 2 [2025-11-05 21:04:39] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:04:39] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:04:39] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:04:39] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:04:39] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:04:39] DEBUG SESSION STATUS: 2 [2025-11-05 21:04:39] Negocio en sesión: 78.216.219-5 [2025-11-05 21:04:39] Nombre: SGB-ERP SpA [2025-11-05 21:04:39] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:04:39] Conexión exitosa a la base de datos [2025-11-05 21:04:39] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:04:39] Buscando producto con código/nombre: 17623687193955 [2025-11-05 21:04:39] DEBUG: Código recibido: '17623687193955' (longitud: 14) [2025-11-05 21:04:39] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:04:39] ID de producto encontrado por código '17623687193955': 102 [2025-11-05 21:04:39] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 21:04:39] Detalles del producto encontrados: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso"} [2025-11-05 21:04:39] Producto normal detectado por código (ID: 102) [2025-11-05 21:04:39] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 21:04:39] Stock total calculado: 100 [2025-11-05 21:04:39] DEBUG: Buscando codigo_barras_id para producto_id: 102, codigo: 17623687193955 [2025-11-05 21:04:39] DEBUG: codigo_barras_id encontrado: 118 [2025-11-05 21:04:39] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:04:39] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 21:04:39] DEBUG: codigo_barras_id agregado al producto: 118 [2025-11-05 21:04:39] Producto normal por código agregado a resultados (ID: 102) [2025-11-05 21:04:39] Datos finales del producto por código: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 21:04:39] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:04:39] Productos encontrados por nombre: 0 [2025-11-05 21:04:39] Se encontraron 1 resultados en total. [2025-11-05 21:04:39] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:05:58] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:05:58] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:05:58] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:05:58] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:05:58] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:05:58] DEBUG SESSION STATUS: 2 [2025-11-05 21:05:58] Negocio en sesión: 78.216.219-5 [2025-11-05 21:05:58] Nombre: SGB-ERP SpA [2025-11-05 21:05:58] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:05:58] Conexión exitosa a la base de datos [2025-11-05 21:05:58] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:05:58] Buscando producto con código/nombre: * [2025-11-05 21:05:58] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 21:05:58] Solicitud para mostrar todos los productos [2025-11-05 21:05:58] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 21:05:58] Productos encontrados: 2 [2025-11-05 21:05:58] Producto 0: COCA COLA 2LT DESEACHE - Códigos adicionales: NULL [2025-11-05 21:05:58] Producto 1: TEST - Códigos adicionales: NULL [2025-11-05 21:05:58] Producto agregado a resultados (ID: 97): COCA COLA 2LT DESEACHE [2025-11-05 21:05:58] Producto agregado a resultados (ID: 102): TEST [2025-11-05 21:05:58] Total de productos únicos encontrados: 2 [2025-11-05 21:12:27] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:12:27] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:12:27] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:12:27] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:12:27] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:12:27] DEBUG SESSION STATUS: 2 [2025-11-05 21:12:27] Negocio en sesión: 78.216.219-5 [2025-11-05 21:12:27] Nombre: SGB-ERP SpA [2025-11-05 21:12:27] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:12:27] Conexión exitosa a la base de datos [2025-11-05 21:12:27] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:12:27] Buscando producto con código/nombre: * [2025-11-05 21:12:27] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 21:12:27] Solicitud para mostrar todos los productos [2025-11-05 21:12:27] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 21:12:27] Productos encontrados: 2 [2025-11-05 21:12:27] Producto 0: COCA COLA 2LT DESEACHE - Códigos adicionales: NULL [2025-11-05 21:12:27] Producto 1: TEST - Códigos adicionales: NULL [2025-11-05 21:12:27] Producto agregado a resultados (ID: 97): COCA COLA 2LT DESEACHE [2025-11-05 21:12:27] Producto agregado a resultados (ID: 102): TEST [2025-11-05 21:12:27] Total de productos únicos encontrados: 2 [2025-11-05 21:22:54] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:22:54] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:22:54] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:22:54] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:22:54] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:22:54] DEBUG SESSION STATUS: 2 [2025-11-05 21:22:54] Negocio en sesión: 78.216.219-5 [2025-11-05 21:22:54] Nombre: SGB-ERP SpA [2025-11-05 21:22:54] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:22:54] Conexión exitosa a la base de datos [2025-11-05 21:22:54] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:22:54] Buscando producto con código/nombre: coca [2025-11-05 21:22:54] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 21:22:54] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:22:54] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 21:22:54] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:22:54] Códigos parciales encontrados: 0 [2025-11-05 21:22:54] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:22:54] Productos encontrados por nombre: 1 [2025-11-05 21:22:54] Procesando producto encontrado por nombre: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:22:54] Usando lote específico detectado: ninguno para producto ID: 97 [2025-11-05 21:22:54] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:22:54] Códigos encontrados para ID 97: 1 [2025-11-05 21:22:54] Detalle de códigos: [{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 21:22:54] Códigos con stock disponible: 1 [2025-11-05 21:22:54] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 21:22:54] Stock total calculado para ID 97: 100 [2025-11-05 21:22:54] Producto NORMAL ID: 97 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 21:22:54] Usando primer código disponible en orden FIFO para ID 97: {"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 21:22:54] Producto por nombre agregado a resultados (ID: 97) [2025-11-05 21:22:54] Datos finales del producto: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2101.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 21:22:54] Se encontraron 1 resultados en total. [2025-11-05 21:22:54] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:23:01] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:23:01] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:23:01] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:23:01] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:23:01] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:23:01] DEBUG SESSION STATUS: 2 [2025-11-05 21:23:01] Negocio en sesión: 78.216.219-5 [2025-11-05 21:23:01] Nombre: SGB-ERP SpA [2025-11-05 21:23:01] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:23:01] Conexión exitosa a la base de datos [2025-11-05 21:23:01] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:23:01] Buscando producto con código/nombre: test [2025-11-05 21:23:01] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:23:01] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:23:01] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:23:01] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:23:01] Códigos parciales encontrados: 0 [2025-11-05 21:23:01] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:23:01] Productos encontrados por nombre: 1 [2025-11-05 21:23:01] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:23:01] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:23:01] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:23:01] Códigos encontrados para ID 102: 1 [2025-11-05 21:23:01] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 21:23:01] Códigos con stock disponible: 1 [2025-11-05 21:23:01] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:23:01] Stock total calculado para ID 102: 100 [2025-11-05 21:23:01] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:23:01] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 21:23:01] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:23:01] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":100,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 21:23:01] Se encontraron 1 resultados en total. [2025-11-05 21:23:01] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:23:29] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:23:29] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:23:29] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:23:29] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:23:29] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:23:29] DEBUG SESSION STATUS: 2 [2025-11-05 21:23:29] Negocio en sesión: 78.216.219-5 [2025-11-05 21:23:29] Nombre: SGB-ERP SpA [2025-11-05 21:23:29] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:23:29] Conexión exitosa a la base de datos [2025-11-05 21:23:29] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:23:29] Buscando producto con código/nombre: test [2025-11-05 21:23:29] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:23:29] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:23:29] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:23:29] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:23:29] Códigos parciales encontrados: 0 [2025-11-05 21:23:29] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:23:29] Productos encontrados por nombre: 1 [2025-11-05 21:23:29] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"100.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:23:29] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:23:29] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:23:29] Códigos encontrados para ID 102: 1 [2025-11-05 21:23:29] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 21:23:29] Códigos con stock disponible: 1 [2025-11-05 21:23:29] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:23:29] Stock total calculado para ID 102: 100 [2025-11-05 21:23:29] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:23:29] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 21:23:29] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:23:29] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":100,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 kg","stock_disponible":true} [2025-11-05 21:23:29] Se encontraron 1 resultados en total. [2025-11-05 21:23:29] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:26:01] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:26:01] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:26:01] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:26:01] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:26:01] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:26:01] DEBUG SESSION STATUS: 2 [2025-11-05 21:26:01] Negocio en sesión: 78.216.219-5 [2025-11-05 21:26:01] Nombre: SGB-ERP SpA [2025-11-05 21:26:01] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:26:01] Conexión exitosa a la base de datos [2025-11-05 21:26:01] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:26:01] Buscando producto con código/nombre: test [2025-11-05 21:26:01] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:26:01] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:26:01] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:26:01] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:26:01] Códigos parciales encontrados: 0 [2025-11-05 21:26:01] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:26:01] Productos encontrados por nombre: 1 [2025-11-05 21:26:01] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"99.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:26:01] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:26:01] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:26:01] Códigos encontrados para ID 102: 1 [2025-11-05 21:26:01] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"99.00","fecha_vencimiento":null}] [2025-11-05 21:26:01] Códigos con stock disponible: 1 [2025-11-05 21:26:01] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:26:01] Stock total calculado para ID 102: 99 [2025-11-05 21:26:01] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:26:01] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"99.00","fecha_vencimiento":null} [2025-11-05 21:26:01] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:26:01] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":99,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"99.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"99.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"99 kg","stock_disponible":true} [2025-11-05 21:26:01] Se encontraron 1 resultados en total. [2025-11-05 21:26:01] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:26:49] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:26:49] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:26:49] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:26:49] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:26:49] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:26:49] DEBUG SESSION STATUS: 2 [2025-11-05 21:26:49] Negocio en sesión: 78.216.219-5 [2025-11-05 21:26:49] Nombre: SGB-ERP SpA [2025-11-05 21:26:49] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:26:49] Conexión exitosa a la base de datos [2025-11-05 21:26:49] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:26:49] Buscando producto con código/nombre: test [2025-11-05 21:26:49] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:26:49] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:26:49] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:26:49] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:26:49] Códigos parciales encontrados: 0 [2025-11-05 21:26:49] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:26:49] Productos encontrados por nombre: 1 [2025-11-05 21:26:49] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"98.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:26:49] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:26:49] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:26:49] Códigos encontrados para ID 102: 1 [2025-11-05 21:26:49] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"98.00","fecha_vencimiento":null}] [2025-11-05 21:26:49] Códigos con stock disponible: 1 [2025-11-05 21:26:49] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:26:49] Stock total calculado para ID 102: 98 [2025-11-05 21:26:49] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:26:49] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"98.00","fecha_vencimiento":null} [2025-11-05 21:26:49] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:26:49] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":98,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"98.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"98.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"98 kg","stock_disponible":true} [2025-11-05 21:26:49] Se encontraron 1 resultados en total. [2025-11-05 21:26:49] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:28:20] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:28:20] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:28:20] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:28:20] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:28:20] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:28:20] DEBUG SESSION STATUS: 2 [2025-11-05 21:28:20] Negocio en sesión: 78.216.219-5 [2025-11-05 21:28:20] Nombre: SGB-ERP SpA [2025-11-05 21:28:20] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:28:20] Conexión exitosa a la base de datos [2025-11-05 21:28:20] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:28:20] Buscando producto con código/nombre: tes [2025-11-05 21:28:20] DEBUG: Código recibido: 'tes' (longitud: 3) [2025-11-05 21:28:20] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:28:20] No se encontró producto_id para el código exacto 'tes'. Intentando búsqueda parcial... [2025-11-05 21:28:20] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:28:20] Códigos parciales encontrados: 0 [2025-11-05 21:28:20] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:28:20] Productos encontrados por nombre: 1 [2025-11-05 21:28:20] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"97.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:28:20] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:28:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:28:20] Códigos encontrados para ID 102: 1 [2025-11-05 21:28:20] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"97.00","fecha_vencimiento":null}] [2025-11-05 21:28:20] Códigos con stock disponible: 1 [2025-11-05 21:28:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:28:20] Stock total calculado para ID 102: 97 [2025-11-05 21:28:20] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:28:20] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"97.00","fecha_vencimiento":null} [2025-11-05 21:28:20] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:28:20] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":97,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"97.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"97.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"97 kg","stock_disponible":true} [2025-11-05 21:28:20] Se encontraron 1 resultados en total. [2025-11-05 21:28:20] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:34:10] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:34:10] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:34:10] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:34:10] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:34:10] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:34:10] DEBUG SESSION STATUS: 2 [2025-11-05 21:34:10] Negocio en sesión: 78.216.219-5 [2025-11-05 21:34:10] Nombre: SGB-ERP SpA [2025-11-05 21:34:10] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:34:10] Conexión exitosa a la base de datos [2025-11-05 21:34:10] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:34:10] Buscando producto con código/nombre: test [2025-11-05 21:34:10] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:34:10] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:34:10] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:34:10] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:34:10] Códigos parciales encontrados: 0 [2025-11-05 21:34:10] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:34:10] Productos encontrados por nombre: 1 [2025-11-05 21:34:10] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"96.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:34:10] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:34:10] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:34:10] Códigos encontrados para ID 102: 1 [2025-11-05 21:34:10] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"96.00","fecha_vencimiento":null}] [2025-11-05 21:34:10] Códigos con stock disponible: 1 [2025-11-05 21:34:10] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:34:10] Stock total calculado para ID 102: 96 [2025-11-05 21:34:10] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:34:10] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"96.00","fecha_vencimiento":null} [2025-11-05 21:34:10] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:34:10] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":96,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"96.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"96.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"96 kg","stock_disponible":true} [2025-11-05 21:34:10] Se encontraron 1 resultados en total. [2025-11-05 21:34:10] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:34:38] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:34:38] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:34:38] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:34:38] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:34:38] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:34:38] DEBUG SESSION STATUS: 2 [2025-11-05 21:34:38] Negocio en sesión: 78.216.219-5 [2025-11-05 21:34:38] Nombre: SGB-ERP SpA [2025-11-05 21:34:38] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:34:38] Conexión exitosa a la base de datos [2025-11-05 21:34:38] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:34:38] Buscando producto con código/nombre: test [2025-11-05 21:34:38] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:34:38] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:34:38] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:34:38] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:34:38] Códigos parciales encontrados: 0 [2025-11-05 21:34:38] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:34:38] Productos encontrados por nombre: 1 [2025-11-05 21:34:38] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"95.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:34:38] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:34:38] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:34:38] Códigos encontrados para ID 102: 1 [2025-11-05 21:34:38] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"95.00","fecha_vencimiento":null}] [2025-11-05 21:34:38] Códigos con stock disponible: 1 [2025-11-05 21:34:38] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:34:38] Stock total calculado para ID 102: 95 [2025-11-05 21:34:38] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:34:38] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"95.00","fecha_vencimiento":null} [2025-11-05 21:34:38] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:34:38] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":95,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"95.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"95.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"95 kg","stock_disponible":true} [2025-11-05 21:34:38] Se encontraron 1 resultados en total. [2025-11-05 21:34:38] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:34:43] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:34:43] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:34:43] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:34:43] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:34:43] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:34:43] DEBUG SESSION STATUS: 2 [2025-11-05 21:34:43] Negocio en sesión: 78.216.219-5 [2025-11-05 21:34:43] Nombre: SGB-ERP SpA [2025-11-05 21:34:43] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:34:43] Conexión exitosa a la base de datos [2025-11-05 21:34:43] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:34:43] Buscando producto con código/nombre: test [2025-11-05 21:34:43] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:34:43] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:34:43] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:34:43] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:34:43] Códigos parciales encontrados: 0 [2025-11-05 21:34:43] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:34:43] Productos encontrados por nombre: 1 [2025-11-05 21:34:43] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"95.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:34:43] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:34:43] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:34:43] Códigos encontrados para ID 102: 1 [2025-11-05 21:34:43] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"95.00","fecha_vencimiento":null}] [2025-11-05 21:34:43] Códigos con stock disponible: 1 [2025-11-05 21:34:43] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:34:43] Stock total calculado para ID 102: 95 [2025-11-05 21:34:43] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:34:43] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"95.00","fecha_vencimiento":null} [2025-11-05 21:34:43] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:34:43] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":95,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"95.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"95.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"95 kg","stock_disponible":true} [2025-11-05 21:34:43] Se encontraron 1 resultados en total. [2025-11-05 21:34:43] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:37:25] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:37:25] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:37:25] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:37:25] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:37:25] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:37:25] DEBUG SESSION STATUS: 2 [2025-11-05 21:37:25] Negocio en sesión: 78.216.219-5 [2025-11-05 21:37:25] Nombre: SGB-ERP SpA [2025-11-05 21:37:25] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:37:25] Conexión exitosa a la base de datos [2025-11-05 21:37:25] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:37:25] Buscando producto con código/nombre: test [2025-11-05 21:37:25] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:37:25] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:37:25] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:37:25] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:37:25] Códigos parciales encontrados: 0 [2025-11-05 21:37:25] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:37:25] Productos encontrados por nombre: 1 [2025-11-05 21:37:25] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"94.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:37:25] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:37:25] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:37:25] Códigos encontrados para ID 102: 1 [2025-11-05 21:37:25] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"94.00","fecha_vencimiento":null}] [2025-11-05 21:37:25] Códigos con stock disponible: 1 [2025-11-05 21:37:25] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:37:25] Stock total calculado para ID 102: 94 [2025-11-05 21:37:25] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:37:25] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"94.00","fecha_vencimiento":null} [2025-11-05 21:37:25] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:37:25] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":94,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"94.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"94.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"94 kg","stock_disponible":true} [2025-11-05 21:37:25] Se encontraron 1 resultados en total. [2025-11-05 21:37:25] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:38:46] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:38:46] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:38:46] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:38:46] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:38:46] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:38:46] DEBUG SESSION STATUS: 2 [2025-11-05 21:38:46] Negocio en sesión: 78.216.219-5 [2025-11-05 21:38:46] Nombre: SGB-ERP SpA [2025-11-05 21:38:46] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:38:46] Conexión exitosa a la base de datos [2025-11-05 21:38:46] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:38:46] Buscando producto con código/nombre: coca [2025-11-05 21:38:46] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 21:38:46] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:38:46] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 21:38:46] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:38:46] Códigos parciales encontrados: 0 [2025-11-05 21:38:46] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:38:46] Productos encontrados por nombre: 1 [2025-11-05 21:38:46] Procesando producto encontrado por nombre: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:38:46] Usando lote específico detectado: ninguno para producto ID: 97 [2025-11-05 21:38:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:38:46] Códigos encontrados para ID 97: 1 [2025-11-05 21:38:46] Detalle de códigos: [{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 21:38:46] Códigos con stock disponible: 1 [2025-11-05 21:38:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 21:38:46] Stock total calculado para ID 97: 100 [2025-11-05 21:38:46] Producto NORMAL ID: 97 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 21:38:46] Usando primer código disponible en orden FIFO para ID 97: {"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 21:38:46] Producto por nombre agregado a resultados (ID: 97) [2025-11-05 21:38:46] Datos finales del producto: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2101.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 21:38:46] Se encontraron 1 resultados en total. [2025-11-05 21:38:46] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:38:54] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:38:54] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:38:54] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:38:54] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:38:54] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:38:54] DEBUG SESSION STATUS: 2 [2025-11-05 21:38:54] Negocio en sesión: 78.216.219-5 [2025-11-05 21:38:54] Nombre: SGB-ERP SpA [2025-11-05 21:38:54] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:38:54] Conexión exitosa a la base de datos [2025-11-05 21:38:54] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:38:54] Buscando producto con código/nombre: coca [2025-11-05 21:38:54] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-05 21:38:54] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:38:54] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-05 21:38:54] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:38:54] Códigos parciales encontrados: 0 [2025-11-05 21:38:54] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:38:54] Productos encontrados por nombre: 1 [2025-11-05 21:38:54] Procesando producto encontrado por nombre: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:38:54] Usando lote específico detectado: ninguno para producto ID: 97 [2025-11-05 21:38:54] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:38:54] Códigos encontrados para ID 97: 1 [2025-11-05 21:38:54] Detalle de códigos: [{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-05 21:38:54] Códigos con stock disponible: 1 [2025-11-05 21:38:54] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-05 21:38:54] Stock total calculado para ID 97: 100 [2025-11-05 21:38:54] Producto NORMAL ID: 97 - Tiene lotes: SÍ (cantidad: 1) [2025-11-05 21:38:54] Usando primer código disponible en orden FIFO para ID 97: {"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-05 21:38:54] Producto por nombre agregado a resultados (ID: 97) [2025-11-05 21:38:54] Datos finales del producto: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2101.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-05 21:38:54] Se encontraron 1 resultados en total. [2025-11-05 21:38:54] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:39:09] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:39:09] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:39:09] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:39:09] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:39:09] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:39:09] DEBUG SESSION STATUS: 2 [2025-11-05 21:39:09] Negocio en sesión: 78.216.219-5 [2025-11-05 21:39:09] Nombre: SGB-ERP SpA [2025-11-05 21:39:09] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:39:09] Conexión exitosa a la base de datos [2025-11-05 21:39:09] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:39:09] Buscando producto con código/nombre: 17623687193955 [2025-11-05 21:39:09] DEBUG: Código recibido: '17623687193955' (longitud: 14) [2025-11-05 21:39:09] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:39:09] ID de producto encontrado por código '17623687193955': 102 [2025-11-05 21:39:09] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 21:39:09] Detalles del producto encontrados: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"93.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso"} [2025-11-05 21:39:09] Producto normal detectado por código (ID: 102) [2025-11-05 21:39:09] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 21:39:09] Stock total calculado: 93 [2025-11-05 21:39:09] DEBUG: Buscando codigo_barras_id para producto_id: 102, codigo: 17623687193955 [2025-11-05 21:39:09] DEBUG: codigo_barras_id encontrado: 118 [2025-11-05 21:39:09] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:39:09] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 21:39:09] DEBUG: codigo_barras_id agregado al producto: 118 [2025-11-05 21:39:09] Producto normal por código agregado a resultados (ID: 102) [2025-11-05 21:39:09] Datos finales del producto por código: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"93.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"93 kg","stock_disponible":true} [2025-11-05 21:39:09] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:39:09] Productos encontrados por nombre: 0 [2025-11-05 21:39:09] Se encontraron 1 resultados en total. [2025-11-05 21:39:09] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:39:33] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:39:33] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:39:33] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:39:33] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:39:33] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:39:33] DEBUG SESSION STATUS: 2 [2025-11-05 21:39:33] Negocio en sesión: 78.216.219-5 [2025-11-05 21:39:33] Nombre: SGB-ERP SpA [2025-11-05 21:39:33] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:39:34] Conexión exitosa a la base de datos [2025-11-05 21:39:34] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:39:34] Buscando producto con código/nombre: test [2025-11-05 21:39:34] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:39:34] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:39:34] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:39:34] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:39:34] Códigos parciales encontrados: 0 [2025-11-05 21:39:34] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:39:34] Productos encontrados por nombre: 1 [2025-11-05 21:39:34] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"93.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:39:34] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:39:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:39:34] Códigos encontrados para ID 102: 1 [2025-11-05 21:39:34] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"93.00","fecha_vencimiento":null}] [2025-11-05 21:39:34] Códigos con stock disponible: 1 [2025-11-05 21:39:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:39:34] Stock total calculado para ID 102: 93 [2025-11-05 21:39:34] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:39:34] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"93.00","fecha_vencimiento":null} [2025-11-05 21:39:34] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:39:34] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":93,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"93.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"93.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"93 kg","stock_disponible":true} [2025-11-05 21:39:34] Se encontraron 1 resultados en total. [2025-11-05 21:39:34] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:40:03] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:40:03] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:40:03] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:40:03] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:40:03] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:40:03] DEBUG SESSION STATUS: 2 [2025-11-05 21:40:03] Negocio en sesión: 78.216.219-5 [2025-11-05 21:40:03] Nombre: SGB-ERP SpA [2025-11-05 21:40:03] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:40:03] Conexión exitosa a la base de datos [2025-11-05 21:40:03] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:40:03] Buscando producto con código/nombre: test [2025-11-05 21:40:03] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:40:03] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:40:03] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:40:03] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:40:03] Códigos parciales encontrados: 0 [2025-11-05 21:40:03] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:40:03] Productos encontrados por nombre: 1 [2025-11-05 21:40:03] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"92.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:40:03] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:40:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:40:03] Códigos encontrados para ID 102: 1 [2025-11-05 21:40:03] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"92.00","fecha_vencimiento":null}] [2025-11-05 21:40:03] Códigos con stock disponible: 1 [2025-11-05 21:40:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:40:03] Stock total calculado para ID 102: 92 [2025-11-05 21:40:03] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:40:03] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"92.00","fecha_vencimiento":null} [2025-11-05 21:40:03] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:40:03] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":92,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"92.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"92.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"92 kg","stock_disponible":true} [2025-11-05 21:40:03] Se encontraron 1 resultados en total. [2025-11-05 21:40:03] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:43:13] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:43:13] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:43:13] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:43:13] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:43:13] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:43:13] DEBUG SESSION STATUS: 2 [2025-11-05 21:43:13] Negocio en sesión: 78.216.219-5 [2025-11-05 21:43:13] Nombre: SGB-ERP SpA [2025-11-05 21:43:13] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:43:13] Conexión exitosa a la base de datos [2025-11-05 21:43:13] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:43:13] Buscando producto con código/nombre: test [2025-11-05 21:43:13] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:43:13] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:43:13] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:43:13] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:43:13] Códigos parciales encontrados: 0 [2025-11-05 21:43:13] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:43:13] Productos encontrados por nombre: 1 [2025-11-05 21:43:13] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"91.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:43:13] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:43:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:43:13] Códigos encontrados para ID 102: 1 [2025-11-05 21:43:13] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"91.00","fecha_vencimiento":null}] [2025-11-05 21:43:13] Códigos con stock disponible: 1 [2025-11-05 21:43:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:43:13] Stock total calculado para ID 102: 91 [2025-11-05 21:43:13] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:43:13] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"91.00","fecha_vencimiento":null} [2025-11-05 21:43:13] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:43:13] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":91,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"91.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"91.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"91 kg","stock_disponible":true} [2025-11-05 21:43:13] Se encontraron 1 resultados en total. [2025-11-05 21:43:13] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:47:37] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:47:37] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:47:37] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:47:37] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:47:37] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:47:37] DEBUG SESSION STATUS: 2 [2025-11-05 21:47:37] Negocio en sesión: 78.216.219-5 [2025-11-05 21:47:37] Nombre: SGB-ERP SpA [2025-11-05 21:47:37] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:47:37] Conexión exitosa a la base de datos [2025-11-05 21:47:37] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:47:37] Buscando producto con código/nombre: test. [2025-11-05 21:47:37] DEBUG: Código recibido: 'test.' (longitud: 5) [2025-11-05 21:47:37] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:47:37] No se encontró producto_id para el código exacto 'test.'. Intentando búsqueda parcial... [2025-11-05 21:47:37] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:47:37] Códigos parciales encontrados: 0 [2025-11-05 21:47:37] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:47:37] Productos encontrados por nombre: 0 [2025-11-05 21:47:37] No se encontró ningún producto con stock por ningún método [2025-11-05 21:47:37] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-05 21:47:40] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:47:40] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:47:40] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:47:40] DEBUG SESSION: {"last_regeneration":1762386095,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:47:40] DEBUG SESSION ID: fi2mpub08rnjc3hg3kpvqkb52t [2025-11-05 21:47:40] DEBUG SESSION STATUS: 2 [2025-11-05 21:47:40] Negocio en sesión: 78.216.219-5 [2025-11-05 21:47:40] Nombre: SGB-ERP SpA [2025-11-05 21:47:40] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:47:40] Conexión exitosa a la base de datos [2025-11-05 21:47:40] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:47:40] Buscando producto con código/nombre: test [2025-11-05 21:47:40] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:47:40] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:47:40] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:47:40] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:47:40] Códigos parciales encontrados: 0 [2025-11-05 21:47:40] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:47:40] Productos encontrados por nombre: 1 [2025-11-05 21:47:40] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"90.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:47:40] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:47:40] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:47:40] Códigos encontrados para ID 102: 1 [2025-11-05 21:47:40] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"90.00","fecha_vencimiento":null}] [2025-11-05 21:47:40] Códigos con stock disponible: 1 [2025-11-05 21:47:40] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:47:40] Stock total calculado para ID 102: 90 [2025-11-05 21:47:40] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:47:40] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"90.00","fecha_vencimiento":null} [2025-11-05 21:47:40] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:47:40] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":90,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"90.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"90.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"90 kg","stock_disponible":true} [2025-11-05 21:47:40] Se encontraron 1 resultados en total. [2025-11-05 21:47:40] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:51:13] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:51:13] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:51:13] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:51:13] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:51:13] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 21:51:13] DEBUG SESSION STATUS: 2 [2025-11-05 21:51:13] Negocio en sesión: 78.216.219-5 [2025-11-05 21:51:13] Nombre: SGB-ERP SpA [2025-11-05 21:51:13] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:51:13] Conexión exitosa a la base de datos [2025-11-05 21:51:13] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:51:13] Buscando producto con código/nombre: test [2025-11-05 21:51:13] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:51:13] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:51:13] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:51:13] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:51:13] Códigos parciales encontrados: 0 [2025-11-05 21:51:13] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:51:13] Productos encontrados por nombre: 1 [2025-11-05 21:51:13] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"89.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:51:13] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:51:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:51:13] Códigos encontrados para ID 102: 1 [2025-11-05 21:51:13] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"89.00","fecha_vencimiento":null}] [2025-11-05 21:51:13] Códigos con stock disponible: 1 [2025-11-05 21:51:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:51:13] Stock total calculado para ID 102: 89 [2025-11-05 21:51:13] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:51:13] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"89.00","fecha_vencimiento":null} [2025-11-05 21:51:13] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:51:13] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":89,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"89.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"89.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"89 kg","stock_disponible":true} [2025-11-05 21:51:13] Se encontraron 1 resultados en total. [2025-11-05 21:51:13] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:54:44] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:54:44] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:54:44] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:54:44] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:54:44] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 21:54:44] DEBUG SESSION STATUS: 2 [2025-11-05 21:54:44] Negocio en sesión: 78.216.219-5 [2025-11-05 21:54:44] Nombre: SGB-ERP SpA [2025-11-05 21:54:44] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:54:44] Conexión exitosa a la base de datos [2025-11-05 21:54:44] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:54:44] Buscando producto con código/nombre: test [2025-11-05 21:54:44] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 21:54:44] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:54:44] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 21:54:44] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:54:44] Códigos parciales encontrados: 0 [2025-11-05 21:54:44] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:54:44] Productos encontrados por nombre: 1 [2025-11-05 21:54:44] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"88.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:54:44] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:54:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:54:44] Códigos encontrados para ID 102: 1 [2025-11-05 21:54:44] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"88.00","fecha_vencimiento":null}] [2025-11-05 21:54:44] Códigos con stock disponible: 1 [2025-11-05 21:54:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:54:44] Stock total calculado para ID 102: 88 [2025-11-05 21:54:44] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:54:44] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"88.00","fecha_vencimiento":null} [2025-11-05 21:54:44] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:54:44] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":88,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"88.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"88.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"88 kg","stock_disponible":true} [2025-11-05 21:54:44] Se encontraron 1 resultados en total. [2025-11-05 21:54:44] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 21:59:21] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 21:59:21] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 21:59:21] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 21:59:21] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 21:59:21] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 21:59:21] DEBUG SESSION STATUS: 2 [2025-11-05 21:59:21] Negocio en sesión: 78.216.219-5 [2025-11-05 21:59:21] Nombre: SGB-ERP SpA [2025-11-05 21:59:21] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 21:59:21] Conexión exitosa a la base de datos [2025-11-05 21:59:21] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 21:59:21] Buscando producto con código/nombre: tes [2025-11-05 21:59:21] DEBUG: Código recibido: 'tes' (longitud: 3) [2025-11-05 21:59:21] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 21:59:21] No se encontró producto_id para el código exacto 'tes'. Intentando búsqueda parcial... [2025-11-05 21:59:21] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 21:59:21] Códigos parciales encontrados: 0 [2025-11-05 21:59:21] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 21:59:21] Productos encontrados por nombre: 1 [2025-11-05 21:59:21] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"87.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 21:59:21] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 21:59:21] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 21:59:21] Códigos encontrados para ID 102: 1 [2025-11-05 21:59:21] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"87.00","fecha_vencimiento":null}] [2025-11-05 21:59:21] Códigos con stock disponible: 1 [2025-11-05 21:59:21] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 21:59:21] Stock total calculado para ID 102: 87 [2025-11-05 21:59:21] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 21:59:21] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"87.00","fecha_vencimiento":null} [2025-11-05 21:59:21] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 21:59:21] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":87,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"87.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"87.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"87 kg","stock_disponible":true} [2025-11-05 21:59:21] Se encontraron 1 resultados en total. [2025-11-05 21:59:21] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:02:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:02:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:02:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:02:45] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:02:45] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:02:45] DEBUG SESSION STATUS: 2 [2025-11-05 22:02:45] Negocio en sesión: 78.216.219-5 [2025-11-05 22:02:45] Nombre: SGB-ERP SpA [2025-11-05 22:02:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:02:45] Conexión exitosa a la base de datos [2025-11-05 22:02:45] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:02:45] Buscando producto con código/nombre: test [2025-11-05 22:02:45] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 22:02:45] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:02:45] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 22:02:45] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:02:45] Códigos parciales encontrados: 0 [2025-11-05 22:02:45] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:02:45] Productos encontrados por nombre: 1 [2025-11-05 22:02:45] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"86.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:02:45] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:02:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:02:45] Códigos encontrados para ID 102: 1 [2025-11-05 22:02:45] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"86.00","fecha_vencimiento":null}] [2025-11-05 22:02:45] Códigos con stock disponible: 1 [2025-11-05 22:02:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:02:45] Stock total calculado para ID 102: 86 [2025-11-05 22:02:45] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:02:45] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"86.00","fecha_vencimiento":null} [2025-11-05 22:02:45] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:02:45] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":86,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"86.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"86.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"86 kg","stock_disponible":true} [2025-11-05 22:02:45] Se encontraron 1 resultados en total. [2025-11-05 22:02:45] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:04:13] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:04:13] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:04:13] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:04:13] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:04:13] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:04:13] DEBUG SESSION STATUS: 2 [2025-11-05 22:04:13] Negocio en sesión: 78.216.219-5 [2025-11-05 22:04:13] Nombre: SGB-ERP SpA [2025-11-05 22:04:13] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:04:13] Conexión exitosa a la base de datos [2025-11-05 22:04:13] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:04:13] Buscando producto con código/nombre: test [2025-11-05 22:04:13] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 22:04:13] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:04:13] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 22:04:13] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:04:13] Códigos parciales encontrados: 0 [2025-11-05 22:04:13] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:04:13] Productos encontrados por nombre: 1 [2025-11-05 22:04:13] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"85.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:04:13] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:04:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:04:13] Códigos encontrados para ID 102: 1 [2025-11-05 22:04:13] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"85.00","fecha_vencimiento":null}] [2025-11-05 22:04:13] Códigos con stock disponible: 1 [2025-11-05 22:04:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:04:13] Stock total calculado para ID 102: 85 [2025-11-05 22:04:13] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:04:13] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"85.00","fecha_vencimiento":null} [2025-11-05 22:04:13] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:04:13] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":85,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"85.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"85.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"85 kg","stock_disponible":true} [2025-11-05 22:04:13] Se encontraron 1 resultados en total. [2025-11-05 22:04:13] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:06:20] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:06:20] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:06:20] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:06:20] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:06:20] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:06:20] DEBUG SESSION STATUS: 2 [2025-11-05 22:06:20] Negocio en sesión: 78.216.219-5 [2025-11-05 22:06:20] Nombre: SGB-ERP SpA [2025-11-05 22:06:20] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:06:20] Conexión exitosa a la base de datos [2025-11-05 22:06:20] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:06:20] Buscando producto con código/nombre: test [2025-11-05 22:06:20] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 22:06:20] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:06:20] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 22:06:20] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:06:20] Códigos parciales encontrados: 0 [2025-11-05 22:06:20] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:06:20] Productos encontrados por nombre: 1 [2025-11-05 22:06:20] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"84.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:06:20] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:06:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:06:20] Códigos encontrados para ID 102: 1 [2025-11-05 22:06:20] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"84.00","fecha_vencimiento":null}] [2025-11-05 22:06:20] Códigos con stock disponible: 1 [2025-11-05 22:06:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:06:20] Stock total calculado para ID 102: 84 [2025-11-05 22:06:20] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:06:20] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"84.00","fecha_vencimiento":null} [2025-11-05 22:06:20] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:06:20] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":84,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"84.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"84.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"84 kg","stock_disponible":true} [2025-11-05 22:06:20] Se encontraron 1 resultados en total. [2025-11-05 22:06:20] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:06:26] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:06:26] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:06:26] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:06:26] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:06:26] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:06:26] DEBUG SESSION STATUS: 2 [2025-11-05 22:06:26] Negocio en sesión: 78.216.219-5 [2025-11-05 22:06:26] Nombre: SGB-ERP SpA [2025-11-05 22:06:26] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:06:26] Conexión exitosa a la base de datos [2025-11-05 22:06:26] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:06:26] Buscando producto con código/nombre: test [2025-11-05 22:06:26] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 22:06:26] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:06:26] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 22:06:26] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:06:26] Códigos parciales encontrados: 0 [2025-11-05 22:06:26] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:06:26] Productos encontrados por nombre: 1 [2025-11-05 22:06:26] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"83.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:06:26] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:06:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:06:26] Códigos encontrados para ID 102: 1 [2025-11-05 22:06:26] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"83.00","fecha_vencimiento":null}] [2025-11-05 22:06:26] Códigos con stock disponible: 1 [2025-11-05 22:06:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:06:26] Stock total calculado para ID 102: 83 [2025-11-05 22:06:26] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:06:26] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"83.00","fecha_vencimiento":null} [2025-11-05 22:06:26] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:06:26] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":83,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"83.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"83.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"83 kg","stock_disponible":true} [2025-11-05 22:06:26] Se encontraron 1 resultados en total. [2025-11-05 22:06:26] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:08:10] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:08:10] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:08:10] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:08:10] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:08:10] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:08:10] DEBUG SESSION STATUS: 2 [2025-11-05 22:08:10] Negocio en sesión: 78.216.219-5 [2025-11-05 22:08:10] Nombre: SGB-ERP SpA [2025-11-05 22:08:10] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:08:10] Conexión exitosa a la base de datos [2025-11-05 22:08:10] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:08:10] Buscando producto con código/nombre: test [2025-11-05 22:08:10] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 22:08:10] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:08:10] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 22:08:10] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:08:10] Códigos parciales encontrados: 0 [2025-11-05 22:08:10] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:08:10] Productos encontrados por nombre: 1 [2025-11-05 22:08:10] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"82.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:08:10] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:08:10] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:08:10] Códigos encontrados para ID 102: 1 [2025-11-05 22:08:10] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"82.00","fecha_vencimiento":null}] [2025-11-05 22:08:10] Códigos con stock disponible: 1 [2025-11-05 22:08:10] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:08:10] Stock total calculado para ID 102: 82 [2025-11-05 22:08:10] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:08:10] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"82.00","fecha_vencimiento":null} [2025-11-05 22:08:10] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:08:10] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":82,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"82.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"82.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"82 kg","stock_disponible":true} [2025-11-05 22:08:10] Se encontraron 1 resultados en total. [2025-11-05 22:08:10] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:08:15] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:08:15] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:08:15] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:08:15] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:08:15] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:08:15] DEBUG SESSION STATUS: 2 [2025-11-05 22:08:15] Negocio en sesión: 78.216.219-5 [2025-11-05 22:08:15] Nombre: SGB-ERP SpA [2025-11-05 22:08:15] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:08:15] Conexión exitosa a la base de datos [2025-11-05 22:08:15] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:08:15] Buscando producto con código/nombre: test [2025-11-05 22:08:15] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 22:08:15] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:08:15] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 22:08:15] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:08:15] Códigos parciales encontrados: 0 [2025-11-05 22:08:15] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:08:15] Productos encontrados por nombre: 1 [2025-11-05 22:08:15] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"82.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:08:15] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:08:15] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:08:15] Códigos encontrados para ID 102: 1 [2025-11-05 22:08:15] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"82.00","fecha_vencimiento":null}] [2025-11-05 22:08:15] Códigos con stock disponible: 1 [2025-11-05 22:08:15] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:08:15] Stock total calculado para ID 102: 82 [2025-11-05 22:08:15] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:08:15] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"82.00","fecha_vencimiento":null} [2025-11-05 22:08:15] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:08:15] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":82,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"82.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"82.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"82 kg","stock_disponible":true} [2025-11-05 22:08:15] Se encontraron 1 resultados en total. [2025-11-05 22:08:15] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:10:24] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:10:24] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:10:24] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:10:24] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:10:24] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:10:24] DEBUG SESSION STATUS: 2 [2025-11-05 22:10:24] Negocio en sesión: 78.216.219-5 [2025-11-05 22:10:24] Nombre: SGB-ERP SpA [2025-11-05 22:10:24] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:10:24] Conexión exitosa a la base de datos [2025-11-05 22:10:24] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:10:24] Buscando producto con código/nombre: test [2025-11-05 22:10:24] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 22:10:24] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:10:24] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 22:10:24] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:10:25] Códigos parciales encontrados: 0 [2025-11-05 22:10:25] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:10:25] Productos encontrados por nombre: 1 [2025-11-05 22:10:25] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"81.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:10:25] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:10:25] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:10:25] Códigos encontrados para ID 102: 1 [2025-11-05 22:10:25] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"81.00","fecha_vencimiento":null}] [2025-11-05 22:10:25] Códigos con stock disponible: 1 [2025-11-05 22:10:25] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:10:25] Stock total calculado para ID 102: 81 [2025-11-05 22:10:25] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:10:25] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"81.00","fecha_vencimiento":null} [2025-11-05 22:10:25] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:10:25] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":81,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"81.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"81.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"81 kg","stock_disponible":true} [2025-11-05 22:10:25] Se encontraron 1 resultados en total. [2025-11-05 22:10:25] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:10:30] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:10:30] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:10:30] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:10:30] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:10:30] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:10:30] DEBUG SESSION STATUS: 2 [2025-11-05 22:10:30] Negocio en sesión: 78.216.219-5 [2025-11-05 22:10:30] Nombre: SGB-ERP SpA [2025-11-05 22:10:30] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:10:30] Conexión exitosa a la base de datos [2025-11-05 22:10:30] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:10:30] Buscando producto con código/nombre: test [2025-11-05 22:10:30] DEBUG: Código recibido: 'test' (longitud: 4) [2025-11-05 22:10:30] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:10:30] No se encontró producto_id para el código exacto 'test'. Intentando búsqueda parcial... [2025-11-05 22:10:30] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:10:30] Códigos parciales encontrados: 0 [2025-11-05 22:10:30] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:10:30] Productos encontrados por nombre: 1 [2025-11-05 22:10:30] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"80.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:10:30] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:10:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:10:30] Códigos encontrados para ID 102: 1 [2025-11-05 22:10:30] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"80.00","fecha_vencimiento":null}] [2025-11-05 22:10:30] Códigos con stock disponible: 1 [2025-11-05 22:10:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:10:30] Stock total calculado para ID 102: 80 [2025-11-05 22:10:30] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:10:30] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"80.00","fecha_vencimiento":null} [2025-11-05 22:10:30] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:10:30] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":80,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"80.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"80.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"80 kg","stock_disponible":true} [2025-11-05 22:10:30] Se encontraron 1 resultados en total. [2025-11-05 22:10:30] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:15:31] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:15:31] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:15:31] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:15:31] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:15:31] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:15:31] DEBUG SESSION STATUS: 2 [2025-11-05 22:15:31] Negocio en sesión: 78.216.219-5 [2025-11-05 22:15:31] Nombre: SGB-ERP SpA [2025-11-05 22:15:31] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:15:31] Conexión exitosa a la base de datos [2025-11-05 22:15:31] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:15:31] Buscando producto con código/nombre: TEST [2025-11-05 22:15:31] DEBUG: Código recibido: 'TEST' (longitud: 4) [2025-11-05 22:15:31] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:15:31] No se encontró producto_id para el código exacto 'TEST'. Intentando búsqueda parcial... [2025-11-05 22:15:31] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:15:31] Códigos parciales encontrados: 0 [2025-11-05 22:15:31] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:15:31] Productos encontrados por nombre: 1 [2025-11-05 22:15:31] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"79.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:15:31] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:15:31] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:15:31] Códigos encontrados para ID 102: 1 [2025-11-05 22:15:31] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"79.00","fecha_vencimiento":null}] [2025-11-05 22:15:31] Códigos con stock disponible: 1 [2025-11-05 22:15:31] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:15:31] Stock total calculado para ID 102: 79 [2025-11-05 22:15:31] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:15:31] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"79.00","fecha_vencimiento":null} [2025-11-05 22:15:31] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:15:31] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":79,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"79.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"79.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"79 kg","stock_disponible":true} [2025-11-05 22:15:31] Se encontraron 1 resultados en total. [2025-11-05 22:15:31] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:18:25] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:18:25] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:18:25] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:18:25] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:18:25] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:18:25] DEBUG SESSION STATUS: 2 [2025-11-05 22:18:25] Negocio en sesión: 78.216.219-5 [2025-11-05 22:18:25] Nombre: SGB-ERP SpA [2025-11-05 22:18:25] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:18:25] Conexión exitosa a la base de datos [2025-11-05 22:18:25] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:18:25] Buscando producto con código/nombre: TEST [2025-11-05 22:18:25] DEBUG: Código recibido: 'TEST' (longitud: 4) [2025-11-05 22:18:25] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:18:25] No se encontró producto_id para el código exacto 'TEST'. Intentando búsqueda parcial... [2025-11-05 22:18:25] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:18:25] Códigos parciales encontrados: 0 [2025-11-05 22:18:25] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:18:25] Productos encontrados por nombre: 1 [2025-11-05 22:18:25] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"78.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:18:25] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:18:25] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:18:25] Códigos encontrados para ID 102: 1 [2025-11-05 22:18:25] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"78.00","fecha_vencimiento":null}] [2025-11-05 22:18:25] Códigos con stock disponible: 1 [2025-11-05 22:18:25] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:18:25] Stock total calculado para ID 102: 78 [2025-11-05 22:18:25] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:18:25] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"78.00","fecha_vencimiento":null} [2025-11-05 22:18:25] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:18:25] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":78,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"78.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"78.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"78 kg","stock_disponible":true} [2025-11-05 22:18:25] Se encontraron 1 resultados en total. [2025-11-05 22:18:25] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:20:27] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:20:27] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:20:27] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:20:27] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:20:27] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:20:27] DEBUG SESSION STATUS: 2 [2025-11-05 22:20:27] Negocio en sesión: 78.216.219-5 [2025-11-05 22:20:27] Nombre: SGB-ERP SpA [2025-11-05 22:20:27] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:20:27] Conexión exitosa a la base de datos [2025-11-05 22:20:27] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:20:27] Buscando producto con código/nombre: TEST [2025-11-05 22:20:27] DEBUG: Código recibido: 'TEST' (longitud: 4) [2025-11-05 22:20:27] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:20:27] No se encontró producto_id para el código exacto 'TEST'. Intentando búsqueda parcial... [2025-11-05 22:20:27] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:20:27] Códigos parciales encontrados: 0 [2025-11-05 22:20:27] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:20:27] Productos encontrados por nombre: 1 [2025-11-05 22:20:27] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"77.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:20:27] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:20:27] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:20:27] Códigos encontrados para ID 102: 1 [2025-11-05 22:20:27] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"77.00","fecha_vencimiento":null}] [2025-11-05 22:20:27] Códigos con stock disponible: 1 [2025-11-05 22:20:27] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:20:27] Stock total calculado para ID 102: 77 [2025-11-05 22:20:27] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:20:27] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"77.00","fecha_vencimiento":null} [2025-11-05 22:20:27] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:20:27] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":77,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"77.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"77.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"77 kg","stock_disponible":true} [2025-11-05 22:20:27] Se encontraron 1 resultados en total. [2025-11-05 22:20:27] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:20:39] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:20:39] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:20:39] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:20:39] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:20:39] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:20:39] DEBUG SESSION STATUS: 2 [2025-11-05 22:20:39] Negocio en sesión: 78.216.219-5 [2025-11-05 22:20:39] Nombre: SGB-ERP SpA [2025-11-05 22:20:39] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:20:39] Conexión exitosa a la base de datos [2025-11-05 22:20:39] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:20:39] Buscando producto con código/nombre: * [2025-11-05 22:20:39] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-05 22:20:39] Solicitud para mostrar todos los productos [2025-11-05 22:20:39] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-05 22:20:39] Productos encontrados: 2 [2025-11-05 22:20:39] Producto 0: COCA COLA 2LT DESEACHE - Códigos adicionales: NULL [2025-11-05 22:20:39] Producto 1: TEST - Códigos adicionales: NULL [2025-11-05 22:20:39] Producto agregado a resultados (ID: 97): COCA COLA 2LT DESEACHE [2025-11-05 22:20:39] Producto agregado a resultados (ID: 102): TEST [2025-11-05 22:20:39] Total de productos únicos encontrados: 2 [2025-11-05 22:26:10] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:26:10] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:26:10] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:26:10] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:26:10] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:26:10] DEBUG SESSION STATUS: 2 [2025-11-05 22:26:10] Negocio en sesión: 78.216.219-5 [2025-11-05 22:26:10] Nombre: SGB-ERP SpA [2025-11-05 22:26:10] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:26:10] Conexión exitosa a la base de datos [2025-11-05 22:26:10] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:26:10] Buscando producto con código/nombre: 17623687193955 [2025-11-05 22:26:10] DEBUG: Código recibido: '17623687193955' (longitud: 14) [2025-11-05 22:26:10] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:26:10] ID de producto encontrado por código '17623687193955': 102 [2025-11-05 22:26:10] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-05 22:26:10] Detalles del producto encontrados: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"77.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso"} [2025-11-05 22:26:10] Producto normal detectado por código (ID: 102) [2025-11-05 22:26:10] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-05 22:26:10] Stock total calculado: 77 [2025-11-05 22:26:10] DEBUG: Buscando codigo_barras_id para producto_id: 102, codigo: 17623687193955 [2025-11-05 22:26:10] DEBUG: codigo_barras_id encontrado: 118 [2025-11-05 22:26:10] Producto ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:26:10] Producto ID: 102 no usa lotes (tipo: masivo), ignorando comando de lote [2025-11-05 22:26:10] DEBUG: codigo_barras_id agregado al producto: 118 [2025-11-05 22:26:10] Producto normal por código agregado a resultados (ID: 102) [2025-11-05 22:26:10] Datos finales del producto por código: {"id":102,"nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","tipo_codigo":"masivo","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"77.00","cantidad_por_unidad":null,"marca_nombre":"1865","tipo_control_peso":"riguroso","codigo":"17623687193955","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":118,"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"77 kg","stock_disponible":true} [2025-11-05 22:26:10] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:26:10] Productos encontrados por nombre: 0 [2025-11-05 22:26:10] Se encontraron 1 resultados en total. [2025-11-05 22:26:10] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:28:55] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:28:55] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:28:55] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:28:55] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:28:55] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:28:55] DEBUG SESSION STATUS: 2 [2025-11-05 22:28:55] Negocio en sesión: 78.216.219-5 [2025-11-05 22:28:55] Nombre: SGB-ERP SpA [2025-11-05 22:28:55] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:28:55] Conexión exitosa a la base de datos [2025-11-05 22:28:55] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:28:55] Buscando producto con código/nombre: TEST [2025-11-05 22:28:55] DEBUG: Código recibido: 'TEST' (longitud: 4) [2025-11-05 22:28:55] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:28:55] No se encontró producto_id para el código exacto 'TEST'. Intentando búsqueda parcial... [2025-11-05 22:28:55] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:28:55] Códigos parciales encontrados: 0 [2025-11-05 22:28:55] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:28:55] Productos encontrados por nombre: 1 [2025-11-05 22:28:55] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"77.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:28:55] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:28:55] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:28:55] Códigos encontrados para ID 102: 1 [2025-11-05 22:28:55] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"77.00","fecha_vencimiento":null}] [2025-11-05 22:28:55] Códigos con stock disponible: 1 [2025-11-05 22:28:55] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:28:55] Stock total calculado para ID 102: 77 [2025-11-05 22:28:55] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:28:55] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"77.00","fecha_vencimiento":null} [2025-11-05 22:28:55] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:28:55] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":77,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"77.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"77.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"77 kg","stock_disponible":true} [2025-11-05 22:28:55] Se encontraron 1 resultados en total. [2025-11-05 22:28:55] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:29:00] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:29:00] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:29:00] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:29:00] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:29:00] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:29:00] DEBUG SESSION STATUS: 2 [2025-11-05 22:29:00] Negocio en sesión: 78.216.219-5 [2025-11-05 22:29:00] Nombre: SGB-ERP SpA [2025-11-05 22:29:00] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:29:00] Conexión exitosa a la base de datos [2025-11-05 22:29:00] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:29:00] Buscando producto con código/nombre: TEST [2025-11-05 22:29:00] DEBUG: Código recibido: 'TEST' (longitud: 4) [2025-11-05 22:29:00] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:29:00] No se encontró producto_id para el código exacto 'TEST'. Intentando búsqueda parcial... [2025-11-05 22:29:00] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:29:00] Códigos parciales encontrados: 0 [2025-11-05 22:29:00] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:29:00] Productos encontrados por nombre: 1 [2025-11-05 22:29:00] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"76.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:29:00] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:29:00] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:29:00] Códigos encontrados para ID 102: 1 [2025-11-05 22:29:00] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"76.00","fecha_vencimiento":null}] [2025-11-05 22:29:00] Códigos con stock disponible: 1 [2025-11-05 22:29:00] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:29:00] Stock total calculado para ID 102: 76 [2025-11-05 22:29:00] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:29:00] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"76.00","fecha_vencimiento":null} [2025-11-05 22:29:00] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:29:00] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":76,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"76.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"76.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"76 kg","stock_disponible":true} [2025-11-05 22:29:00] Se encontraron 1 resultados en total. [2025-11-05 22:29:00] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:33:26] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:33:26] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:33:26] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:33:26] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:33:26] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:33:26] DEBUG SESSION STATUS: 2 [2025-11-05 22:33:26] Negocio en sesión: 78.216.219-5 [2025-11-05 22:33:26] Nombre: SGB-ERP SpA [2025-11-05 22:33:26] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:33:26] Conexión exitosa a la base de datos [2025-11-05 22:33:26] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:33:26] Buscando producto con código/nombre: TEST [2025-11-05 22:33:26] DEBUG: Código recibido: 'TEST' (longitud: 4) [2025-11-05 22:33:26] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:33:26] No se encontró producto_id para el código exacto 'TEST'. Intentando búsqueda parcial... [2025-11-05 22:33:26] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:33:26] Códigos parciales encontrados: 0 [2025-11-05 22:33:26] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:33:26] Productos encontrados por nombre: 1 [2025-11-05 22:33:26] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"75.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:33:26] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:33:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:33:26] Códigos encontrados para ID 102: 1 [2025-11-05 22:33:26] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null}] [2025-11-05 22:33:26] Códigos con stock disponible: 1 [2025-11-05 22:33:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:33:26] Stock total calculado para ID 102: 75 [2025-11-05 22:33:26] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:33:26] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null} [2025-11-05 22:33:26] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:33:26] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":75,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"75.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"75 kg","stock_disponible":true} [2025-11-05 22:33:26] Se encontraron 1 resultados en total. [2025-11-05 22:33:26] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:35:23] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:35:23] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:35:23] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:35:23] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:35:23] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:35:23] DEBUG SESSION STATUS: 2 [2025-11-05 22:35:23] Negocio en sesión: 78.216.219-5 [2025-11-05 22:35:23] Nombre: SGB-ERP SpA [2025-11-05 22:35:23] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:35:23] Conexión exitosa a la base de datos [2025-11-05 22:35:23] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:35:23] Buscando producto con código/nombre: TEST [2025-11-05 22:35:23] DEBUG: Código recibido: 'TEST' (longitud: 4) [2025-11-05 22:35:23] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:35:23] No se encontró producto_id para el código exacto 'TEST'. Intentando búsqueda parcial... [2025-11-05 22:35:23] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:35:23] Códigos parciales encontrados: 0 [2025-11-05 22:35:23] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:35:23] Productos encontrados por nombre: 1 [2025-11-05 22:35:23] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"75.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:35:23] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:35:23] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:35:23] Códigos encontrados para ID 102: 1 [2025-11-05 22:35:23] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null}] [2025-11-05 22:35:23] Códigos con stock disponible: 1 [2025-11-05 22:35:23] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:35:23] Stock total calculado para ID 102: 75 [2025-11-05 22:35:23] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:35:23] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null} [2025-11-05 22:35:23] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:35:23] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":75,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"75.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"75 kg","stock_disponible":true} [2025-11-05 22:35:23] Se encontraron 1 resultados en total. [2025-11-05 22:35:23] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-05 22:35:26] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-05 22:35:26] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-05 22:35:26] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-05 22:35:26] DEBUG SESSION: {"last_regeneration":1762390115,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-05 22:35:26] DEBUG SESSION ID: il8c6i4ii5h2318re1i22bs6j1 [2025-11-05 22:35:26] DEBUG SESSION STATUS: 2 [2025-11-05 22:35:26] Negocio en sesión: 78.216.219-5 [2025-11-05 22:35:26] Nombre: SGB-ERP SpA [2025-11-05 22:35:26] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-05 22:35:26] Conexión exitosa a la base de datos [2025-11-05 22:35:26] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-05 22:35:26] Buscando producto con código/nombre: TEST [2025-11-05 22:35:26] DEBUG: Código recibido: 'TEST' (longitud: 4) [2025-11-05 22:35:26] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-05 22:35:26] No se encontró producto_id para el código exacto 'TEST'. Intentando búsqueda parcial... [2025-11-05 22:35:26] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-05 22:35:26] Códigos parciales encontrados: 0 [2025-11-05 22:35:26] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-05 22:35:26] Productos encontrados por nombre: 1 [2025-11-05 22:35:26] Procesando producto encontrado por nombre: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"75.00","cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-05 22:35:26] Usando lote específico detectado: ninguno para producto ID: 102 [2025-11-05 22:35:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-05 22:35:26] Códigos encontrados para ID 102: 1 [2025-11-05 22:35:26] Detalle de códigos: [{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null}] [2025-11-05 22:35:26] Códigos con stock disponible: 1 [2025-11-05 22:35:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-05 22:35:26] Stock total calculado para ID 102: 75 [2025-11-05 22:35:26] Producto NORMAL ID: 102 - Tiene lotes: NO (cantidad: 0) [2025-11-05 22:35:26] Usando primer código disponible en orden FIFO para ID 102: {"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null} [2025-11-05 22:35:26] Producto por nombre agregado a resultados (ID: 102) [2025-11-05 22:35:26] Datos finales del producto: {"id":102,"codigo":"17623687193955","nombre":"TEST","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":75,"cantidad_por_unidad":null,"tipo_codigo":"masivo","marca_nombre":"1865","tipo_nombre":"Agua mineral sin gas","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"75.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":118,"codigo":"17623687193955","tipo_codigo":"masivo","cantidad":"75.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/1865.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"75 kg","stock_disponible":true} [2025-11-05 22:35:26] Se encontraron 1 resultados en total. [2025-11-05 22:35:26] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-06 12:44:59] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-06 12:44:59] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-06 12:44:59] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-06 12:44:59] DEBUG SESSION: {"last_regeneration":1762443661,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-06 12:44:59] DEBUG SESSION ID: 1spwnAByItuom-rzsc-oYbMzNmMtpXkHiIm0UX1tzAs81gnz [2025-11-06 12:44:59] DEBUG SESSION STATUS: 2 [2025-11-06 12:44:59] Negocio en sesión: 78.216.219-5 [2025-11-06 12:44:59] Nombre: SGB-ERP SpA [2025-11-06 12:44:59] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-06 12:44:59] Conexión exitosa a la base de datos [2025-11-06 12:44:59] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-06 12:44:59] Buscando producto con código/nombre: Co [2025-11-06 12:44:59] DEBUG: Código recibido: 'Co' (longitud: 2) [2025-11-06 12:44:59] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-06 12:44:59] No se encontró producto_id para el código exacto 'Co'. Intentando búsqueda parcial... [2025-11-06 12:44:59] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-06 12:44:59] Códigos parciales encontrados: 0 [2025-11-06 12:44:59] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-06 12:44:59] Productos encontrados por nombre: 1 [2025-11-06 12:44:59] Procesando producto encontrado por nombre: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-06 12:44:59] Usando lote específico detectado: ninguno para producto ID: 97 [2025-11-06 12:44:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-06 12:44:59] Códigos encontrados para ID 97: 1 [2025-11-06 12:44:59] Detalle de códigos: [{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-06 12:44:59] Códigos con stock disponible: 1 [2025-11-06 12:44:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-06 12:44:59] Stock total calculado para ID 97: 100 [2025-11-06 12:44:59] Producto NORMAL ID: 97 - Tiene lotes: SÍ (cantidad: 1) [2025-11-06 12:44:59] Usando primer código disponible en orden FIFO para ID 97: {"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null} [2025-11-06 12:44:59] Producto por nombre agregado a resultados (ID: 97) [2025-11-06 12:44:59] Datos finales del producto: {"id":97,"codigo":"17623602264760","nombre":"COCA COLA 2LT DESEACHE","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":100,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":113,"codigo":"17623602264760","tipo_codigo":"manual","cantidad":"100.00","fecha_vencimiento":null}],"precio":"2101.00","marca_logo":"https:\/\/logo.clearbit.com\/coca-cola.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"100 l","stock_disponible":true} [2025-11-06 12:44:59] Se encontraron 1 resultados en total. [2025-11-06 12:44:59] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-06 12:45:03] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-06 12:45:03] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-06 12:45:03] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-06 12:45:03] DEBUG SESSION: {"last_regeneration":1762443661,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-06 12:45:03] DEBUG SESSION ID: 1spwnAByItuom-rzsc-oYbMzNmMtpXkHiIm0UX1tzAs81gnz [2025-11-06 12:45:03] DEBUG SESSION STATUS: 2 [2025-11-06 12:45:03] Negocio en sesión: 78.216.219-5 [2025-11-06 12:45:03] Nombre: SGB-ERP SpA [2025-11-06 12:45:03] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-06 12:45:03] Conexión exitosa a la base de datos [2025-11-06 12:45:03] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-06 12:45:03] Buscando producto con código/nombre: * [2025-11-06 12:45:03] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-06 12:45:03] Solicitud para mostrar todos los productos [2025-11-06 12:45:03] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-06 12:45:03] Productos encontrados: 2 [2025-11-06 12:45:03] Producto 0: COCA COLA 2LT DESEACHE - Códigos adicionales: NULL [2025-11-06 12:45:03] Producto 1: TEST - Códigos adicionales: NULL [2025-11-06 12:45:03] Producto agregado a resultados (ID: 97): COCA COLA 2LT DESEACHE [2025-11-06 12:45:03] Producto agregado a resultados (ID: 102): TEST [2025-11-06 12:45:03] Total de productos únicos encontrados: 2 [2025-11-09 23:22:02] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-09 23:22:02] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-09 23:22:02] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-09 23:22:02] DEBUG SESSION: {"last_regeneration":1762737232,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-09 23:22:02] DEBUG SESSION ID: rku1o7t8vpqv0jn6fgpbnl8vpq [2025-11-09 23:22:02] DEBUG SESSION STATUS: 2 [2025-11-09 23:22:02] Negocio en sesión: 78.216.219-5 [2025-11-09 23:22:02] Nombre: SGB-ERP SpA [2025-11-09 23:22:02] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-09 23:22:02] Conexión exitosa a la base de datos [2025-11-09 23:22:02] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-09 23:22:02] Buscando producto con código/nombre: * [2025-11-09 23:22:02] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-09 23:22:02] Solicitud para mostrar todos los productos [2025-11-09 23:22:02] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-09 23:22:02] Productos encontrados: 17 [2025-11-09 23:22:02] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-09 23:22:02] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-09 23:22:02] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-09 23:22:02] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-09 23:22:02] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:22:02] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-09 23:22:02] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-09 23:22:02] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-09 23:22:02] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-09 23:22:02] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-09 23:22:02] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-09 23:22:02] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-09 23:22:02] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-09 23:22:02] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-09 23:22:02] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-09 23:22:02] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-09 23:22:02] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-09 23:22:02] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-09 23:22:02] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-09 23:22:02] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-09 23:22:03] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-09 23:22:03] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-09 23:22:03] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-09 23:22:03] Total de productos únicos encontrados: 17 [2025-11-09 23:30:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-09 23:30:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-09 23:30:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-09 23:30:45] DEBUG SESSION: {"last_regeneration":1762737232,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-09 23:30:45] DEBUG SESSION ID: rku1o7t8vpqv0jn6fgpbnl8vpq [2025-11-09 23:30:45] DEBUG SESSION STATUS: 2 [2025-11-09 23:30:45] Negocio en sesión: 78.216.219-5 [2025-11-09 23:30:45] Nombre: SGB-ERP SpA [2025-11-09 23:30:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-09 23:30:45] Conexión exitosa a la base de datos [2025-11-09 23:30:45] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-09 23:30:45] Buscando producto con código/nombre: * [2025-11-09 23:30:45] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-09 23:30:45] Solicitud para mostrar todos los productos [2025-11-09 23:30:45] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-09 23:30:45] Productos encontrados: 17 [2025-11-09 23:30:45] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-09 23:30:45] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-09 23:30:45] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-09 23:30:45] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-09 23:30:45] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:30:45] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-09 23:30:45] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-09 23:30:45] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-09 23:30:45] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-09 23:30:45] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-09 23:30:45] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-09 23:30:45] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-09 23:30:45] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-09 23:30:45] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-09 23:30:45] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-09 23:30:45] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-09 23:30:45] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-09 23:30:45] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-09 23:30:45] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-09 23:30:45] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-09 23:30:45] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-09 23:30:45] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-09 23:30:45] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-09 23:30:45] Total de productos únicos encontrados: 17 [2025-11-09 23:30:52] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-09 23:30:52] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-09 23:30:52] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-09 23:30:52] DEBUG SESSION: {"last_regeneration":1762737232,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-09 23:30:52] DEBUG SESSION ID: rku1o7t8vpqv0jn6fgpbnl8vpq [2025-11-09 23:30:52] DEBUG SESSION STATUS: 2 [2025-11-09 23:30:52] Negocio en sesión: 78.216.219-5 [2025-11-09 23:30:52] Nombre: SGB-ERP SpA [2025-11-09 23:30:52] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-09 23:30:52] Conexión exitosa a la base de datos [2025-11-09 23:30:52] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-09 23:30:52] Buscando producto con código/nombre: * [2025-11-09 23:30:52] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-09 23:30:52] Solicitud para mostrar todos los productos [2025-11-09 23:30:52] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-09 23:30:52] Productos encontrados: 17 [2025-11-09 23:30:52] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-09 23:30:52] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-09 23:30:52] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-09 23:30:52] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-09 23:30:52] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:30:52] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-09 23:30:52] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-09 23:30:52] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-09 23:30:52] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-09 23:30:52] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-09 23:30:52] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-09 23:30:52] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-09 23:30:52] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-09 23:30:52] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-09 23:30:52] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-09 23:30:52] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-09 23:30:52] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-09 23:30:53] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-09 23:30:53] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-09 23:30:53] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-09 23:30:53] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-09 23:30:53] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-09 23:30:53] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-09 23:30:53] Total de productos únicos encontrados: 17 [2025-11-09 23:32:37] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-09 23:32:37] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-09 23:32:37] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-09 23:32:37] DEBUG SESSION: {"last_regeneration":1762737232,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-09 23:32:37] DEBUG SESSION ID: rku1o7t8vpqv0jn6fgpbnl8vpq [2025-11-09 23:32:37] DEBUG SESSION STATUS: 2 [2025-11-09 23:32:37] Negocio en sesión: 78.216.219-5 [2025-11-09 23:32:37] Nombre: SGB-ERP SpA [2025-11-09 23:32:37] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-09 23:32:37] Conexión exitosa a la base de datos [2025-11-09 23:32:37] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-09 23:32:37] Buscando producto con código/nombre: * [2025-11-09 23:32:37] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-09 23:32:37] Solicitud para mostrar todos los productos [2025-11-09 23:32:37] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-09 23:32:37] Productos encontrados: 17 [2025-11-09 23:32:37] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-09 23:32:37] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-09 23:32:37] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-09 23:32:37] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-09 23:32:37] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:32:37] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-09 23:32:37] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-09 23:32:37] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-09 23:32:37] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-09 23:32:37] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-09 23:32:37] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-09 23:32:37] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-09 23:32:37] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-09 23:32:37] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-09 23:32:37] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-09 23:32:37] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-09 23:32:37] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-09 23:32:37] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-09 23:32:37] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-09 23:32:37] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-09 23:32:37] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-09 23:32:37] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-09 23:32:37] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-09 23:32:37] Total de productos únicos encontrados: 17 [2025-11-09 23:33:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-09 23:33:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-09 23:33:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-09 23:33:48] DEBUG SESSION: {"last_regeneration":1762737232,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-09 23:33:48] DEBUG SESSION ID: rku1o7t8vpqv0jn6fgpbnl8vpq [2025-11-09 23:33:48] DEBUG SESSION STATUS: 2 [2025-11-09 23:33:48] Negocio en sesión: 78.216.219-5 [2025-11-09 23:33:48] Nombre: SGB-ERP SpA [2025-11-09 23:33:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-09 23:33:48] Conexión exitosa a la base de datos [2025-11-09 23:33:48] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-09 23:33:48] Buscando producto con código/nombre: * [2025-11-09 23:33:48] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-09 23:33:48] Solicitud para mostrar todos los productos [2025-11-09 23:33:48] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-09 23:33:48] Productos encontrados: 17 [2025-11-09 23:33:48] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-09 23:33:48] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-09 23:33:48] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-09 23:33:48] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-09 23:33:48] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:33:48] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-09 23:33:48] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-09 23:33:48] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-09 23:33:48] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-09 23:33:48] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-09 23:33:48] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-09 23:33:48] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-09 23:33:48] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-09 23:33:48] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-09 23:33:48] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-09 23:33:48] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-09 23:33:48] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-09 23:33:48] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-09 23:33:48] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-09 23:33:48] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-09 23:33:48] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-09 23:33:48] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-09 23:33:48] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-09 23:33:48] Total de productos únicos encontrados: 17 [2025-11-09 23:35:10] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-09 23:35:10] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-09 23:35:10] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-09 23:35:10] DEBUG SESSION: {"last_regeneration":1762742069,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false} [2025-11-09 23:35:10] DEBUG SESSION ID: 5p7m14v3a409rcp9hme2iruf3m [2025-11-09 23:35:10] DEBUG SESSION STATUS: 2 [2025-11-09 23:35:10] Negocio en sesión: 17.612.457-1 [2025-11-09 23:35:10] Nombre: Mis dos princesas [2025-11-09 23:35:10] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-09 23:35:10] Conexión exitosa a la base de datos [2025-11-09 23:35:10] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-09 23:35:10] Buscando producto con código/nombre: * [2025-11-09 23:35:10] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-09 23:35:10] Solicitud para mostrar todos los productos [2025-11-09 23:35:10] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-09 23:35:10] Productos encontrados: 4 [2025-11-09 23:35:10] Producto 0: GOMITAS DENTADURAS - Códigos adicionales: NULL [2025-11-09 23:35:10] Producto 1: GOMITAS GUSANO ACIDO - Códigos adicionales: NULL [2025-11-09 23:35:10] Producto 2: GOMITAS PIRATE SKULLS - Códigos adicionales: NULL [2025-11-09 23:35:10] Producto 3: GOMITAS RANAS - Códigos adicionales: NULL [2025-11-09 23:35:10] Producto agregado a resultados (ID: 103): GOMITAS DENTADURAS [2025-11-09 23:35:10] Producto agregado a resultados (ID: 105): GOMITAS GUSANO ACIDO [2025-11-09 23:35:10] Producto agregado a resultados (ID: 106): GOMITAS PIRATE SKULLS [2025-11-09 23:35:10] Producto agregado a resultados (ID: 104): GOMITAS RANAS [2025-11-09 23:35:10] Total de productos únicos encontrados: 4 [2025-11-09 23:35:25] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-09 23:35:25] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-09 23:35:25] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-09 23:35:25] DEBUG SESSION: {"last_regeneration":1762742069,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-09 23:35:25] DEBUG SESSION ID: 5p7m14v3a409rcp9hme2iruf3m [2025-11-09 23:35:25] DEBUG SESSION STATUS: 2 [2025-11-09 23:35:25] Negocio en sesión: 78.216.219-5 [2025-11-09 23:35:25] Nombre: SGB-ERP SpA [2025-11-09 23:35:25] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-09 23:35:25] Conexión exitosa a la base de datos [2025-11-09 23:35:25] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-09 23:35:25] Buscando producto con código/nombre: * [2025-11-09 23:35:25] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-09 23:35:25] Solicitud para mostrar todos los productos [2025-11-09 23:35:25] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-09 23:35:25] Productos encontrados: 17 [2025-11-09 23:35:25] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-09 23:35:25] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-09 23:35:25] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-09 23:35:25] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-09 23:35:25] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-09 23:35:25] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-09 23:35:25] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-09 23:35:25] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-09 23:35:25] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-09 23:35:25] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-09 23:35:25] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-09 23:35:25] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-09 23:35:25] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-09 23:35:25] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-09 23:35:25] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-09 23:35:25] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-09 23:35:25] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-09 23:35:25] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-09 23:35:25] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-09 23:35:25] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-09 23:35:25] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-09 23:35:25] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-09 23:35:25] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-09 23:35:25] Total de productos únicos encontrados: 17 [2025-11-11 15:53:36] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 15:53:36] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 15:53:36] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 15:53:36] DEBUG SESSION: {"last_regeneration":1762887000,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php?buscar=gomitas&categoria=todas&estado=todas","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-11 15:53:36] DEBUG SESSION ID: -vmjytZIm73LFO2Vz1CfjMRDsKH3,Vh1TsWi9IU50YYw1stN [2025-11-11 15:53:36] DEBUG SESSION STATUS: 2 [2025-11-11 15:53:36] Negocio en sesión: 17.612.457-1 [2025-11-11 15:53:36] Nombre: Mis dos princesas [2025-11-11 15:53:36] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 15:53:36] Conexión exitosa a la base de datos [2025-11-11 15:53:36] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-11 15:53:36] Buscando producto con código/nombre: gomita [2025-11-11 15:53:36] DEBUG: Código recibido: 'gomita' (longitud: 6) [2025-11-11 15:53:36] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 15:53:36] No se encontró producto_id para el código exacto 'gomita'. Intentando búsqueda parcial... [2025-11-11 15:53:36] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 15:53:36] Códigos parciales encontrados: 0 [2025-11-11 15:53:36] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 15:53:36] Productos encontrados por nombre: 4 [2025-11-11 15:53:36] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:53:36] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-11 15:53:36] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:53:36] Códigos encontrados para ID 103: 1 [2025-11-11 15:53:36] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-11 15:53:36] Códigos con stock disponible: 1 [2025-11-11 15:53:36] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:53:36] Stock total calculado para ID 103: 8 [2025-11-11 15:53:36] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:53:36] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-11 15:53:36] Producto por nombre agregado a resultados (ID: 103) [2025-11-11 15:53:36] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":8,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 un","stock_disponible":true} [2025-11-11 15:53:36] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:53:36] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-11 15:53:36] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:53:36] Códigos encontrados para ID 104: 1 [2025-11-11 15:53:36] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-11 15:53:36] Códigos con stock disponible: 1 [2025-11-11 15:53:36] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:53:36] Stock total calculado para ID 104: 8 [2025-11-11 15:53:36] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:53:36] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-11 15:53:36] Producto por nombre agregado a resultados (ID: 104) [2025-11-11 15:53:36] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":8,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 un","stock_disponible":true} [2025-11-11 15:53:36] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:53:36] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-11 15:53:36] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:53:36] Códigos encontrados para ID 105: 1 [2025-11-11 15:53:36] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-11 15:53:36] Códigos con stock disponible: 1 [2025-11-11 15:53:36] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:53:36] Stock total calculado para ID 105: 5 [2025-11-11 15:53:36] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:53:36] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-11 15:53:36] Producto por nombre agregado a resultados (ID: 105) [2025-11-11 15:53:36] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":5,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 un","stock_disponible":true} [2025-11-11 15:53:36] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:53:36] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-11 15:53:36] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:53:36] Códigos encontrados para ID 106: 1 [2025-11-11 15:53:36] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-11 15:53:36] Códigos con stock disponible: 1 [2025-11-11 15:53:36] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:53:36] Stock total calculado para ID 106: 10 [2025-11-11 15:53:36] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:53:36] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-11 15:53:36] Producto por nombre agregado a resultados (ID: 106) [2025-11-11 15:53:36] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 un","stock_disponible":true} [2025-11-11 15:53:36] Se encontraron 4 resultados en total. [2025-11-11 15:53:36] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-11 15:54:51] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 15:54:51] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 15:54:51] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 15:54:51] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 15:54:51] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 15:54:51] DEBUG SESSION STATUS: 2 [2025-11-11 15:54:51] Negocio en sesión: 78.216.219-5 [2025-11-11 15:54:51] Nombre: SGB-ERP SpA [2025-11-11 15:54:51] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 15:54:51] Conexión exitosa a la base de datos [2025-11-11 15:54:51] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 15:54:51] Buscando producto con código/nombre: PEDI [2025-11-11 15:54:51] DEBUG: Código recibido: 'PEDI' (longitud: 4) [2025-11-11 15:54:51] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 15:54:51] No se encontró producto_id para el código exacto 'PEDI'. Intentando búsqueda parcial... [2025-11-11 15:54:51] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 15:54:51] Códigos parciales encontrados: 0 [2025-11-11 15:54:51] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 15:54:51] Productos encontrados por nombre: 7 [2025-11-11 15:54:51] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 15:54:51] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 15:54:51] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:54:51] Códigos encontrados para ID 151: 3 [2025-11-11 15:54:51] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 15:54:51] Códigos con stock disponible: 3 [2025-11-11 15:54:51] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 15:54:51] Stock total calculado para ID 151: 180 [2025-11-11 15:54:51] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 15:54:51] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 15:54:51] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 15:54:51] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 15:54:51] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:54:51] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 15:54:51] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:54:51] Códigos encontrados para ID 153: 1 [2025-11-11 15:54:51] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 15:54:51] Códigos con stock disponible: 1 [2025-11-11 15:54:51] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:54:51] Stock total calculado para ID 153: 25 [2025-11-11 15:54:51] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:54:51] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 15:54:51] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 15:54:51] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 15:54:51] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:54:51] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 15:54:51] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:54:51] Códigos encontrados para ID 154: 1 [2025-11-11 15:54:51] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 15:54:51] Códigos con stock disponible: 1 [2025-11-11 15:54:51] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:54:51] Stock total calculado para ID 154: 30 [2025-11-11 15:54:51] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:54:51] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 15:54:51] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 15:54:51] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 15:54:51] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:54:51] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 15:54:51] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:54:51] Códigos encontrados para ID 155: 1 [2025-11-11 15:54:51] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 15:54:51] Códigos con stock disponible: 1 [2025-11-11 15:54:51] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:54:51] Stock total calculado para ID 155: 20 [2025-11-11 15:54:51] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:54:51] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 15:54:51] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 15:54:51] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 15:54:51] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:54:51] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 15:54:51] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:54:51] Códigos encontrados para ID 160: 1 [2025-11-11 15:54:51] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 15:54:51] Códigos con stock disponible: 1 [2025-11-11 15:54:51] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:54:51] Stock total calculado para ID 160: 30 [2025-11-11 15:54:51] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:54:51] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 15:54:51] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 15:54:51] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 15:54:51] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:54:51] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 15:54:51] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:54:51] Códigos encontrados para ID 161: 1 [2025-11-11 15:54:51] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 15:54:51] Códigos con stock disponible: 1 [2025-11-11 15:54:51] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:54:51] Stock total calculado para ID 161: 25 [2025-11-11 15:54:51] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:54:51] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 15:54:51] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 15:54:51] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 15:54:51] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:54:51] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 15:54:51] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:54:51] Códigos encontrados para ID 162: 1 [2025-11-11 15:54:51] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 15:54:51] Códigos con stock disponible: 1 [2025-11-11 15:54:51] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:54:51] Stock total calculado para ID 162: 20 [2025-11-11 15:54:51] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:54:51] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 15:54:51] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 15:54:51] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 15:54:51] Se encontraron 7 resultados en total. [2025-11-11 15:54:51] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 15:58:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 15:58:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 15:58:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 15:58:06] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 15:58:06] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 15:58:06] DEBUG SESSION STATUS: 2 [2025-11-11 15:58:06] Negocio en sesión: 78.216.219-5 [2025-11-11 15:58:06] Nombre: SGB-ERP SpA [2025-11-11 15:58:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 15:58:06] Conexión exitosa a la base de datos [2025-11-11 15:58:06] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 15:58:06] Buscando producto con código/nombre: PEDI [2025-11-11 15:58:06] DEBUG: Código recibido: 'PEDI' (longitud: 4) [2025-11-11 15:58:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 15:58:06] No se encontró producto_id para el código exacto 'PEDI'. Intentando búsqueda parcial... [2025-11-11 15:58:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 15:58:06] Códigos parciales encontrados: 0 [2025-11-11 15:58:06] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 15:58:06] Productos encontrados por nombre: 7 [2025-11-11 15:58:06] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 15:58:06] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 15:58:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:06] Códigos encontrados para ID 151: 3 [2025-11-11 15:58:06] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 15:58:06] Códigos con stock disponible: 3 [2025-11-11 15:58:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 15:58:06] Stock total calculado para ID 151: 180 [2025-11-11 15:58:06] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 15:58:06] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 15:58:06] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 15:58:06] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 15:58:06] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:06] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 15:58:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:06] Códigos encontrados para ID 153: 1 [2025-11-11 15:58:06] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 15:58:06] Códigos con stock disponible: 1 [2025-11-11 15:58:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:06] Stock total calculado para ID 153: 25 [2025-11-11 15:58:06] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:06] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 15:58:06] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 15:58:06] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 15:58:06] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:06] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 15:58:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:06] Códigos encontrados para ID 154: 1 [2025-11-11 15:58:06] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 15:58:06] Códigos con stock disponible: 1 [2025-11-11 15:58:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:06] Stock total calculado para ID 154: 30 [2025-11-11 15:58:06] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:06] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 15:58:06] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 15:58:06] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 15:58:06] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:06] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 15:58:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:06] Códigos encontrados para ID 155: 1 [2025-11-11 15:58:06] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 15:58:06] Códigos con stock disponible: 1 [2025-11-11 15:58:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:06] Stock total calculado para ID 155: 20 [2025-11-11 15:58:06] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:06] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 15:58:06] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 15:58:06] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 15:58:06] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:06] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 15:58:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:06] Códigos encontrados para ID 160: 1 [2025-11-11 15:58:06] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 15:58:06] Códigos con stock disponible: 1 [2025-11-11 15:58:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:06] Stock total calculado para ID 160: 30 [2025-11-11 15:58:06] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:06] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 15:58:06] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 15:58:06] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 15:58:06] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:06] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 15:58:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:06] Códigos encontrados para ID 161: 1 [2025-11-11 15:58:06] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 15:58:06] Códigos con stock disponible: 1 [2025-11-11 15:58:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:06] Stock total calculado para ID 161: 25 [2025-11-11 15:58:06] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:06] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 15:58:06] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 15:58:06] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 15:58:06] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:06] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 15:58:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:06] Códigos encontrados para ID 162: 1 [2025-11-11 15:58:06] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 15:58:06] Códigos con stock disponible: 1 [2025-11-11 15:58:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:06] Stock total calculado para ID 162: 20 [2025-11-11 15:58:06] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:06] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 15:58:07] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 15:58:07] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 15:58:07] Se encontraron 7 resultados en total. [2025-11-11 15:58:07] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 15:58:07] Imágenes agregadas: 7 productos con imagen [2025-11-11 15:58:07] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 15:58:22] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 15:58:22] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 15:58:22] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 15:58:22] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 15:58:22] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 15:58:22] DEBUG SESSION STATUS: 2 [2025-11-11 15:58:22] Negocio en sesión: 78.216.219-5 [2025-11-11 15:58:22] Nombre: SGB-ERP SpA [2025-11-11 15:58:22] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 15:58:22] Conexión exitosa a la base de datos [2025-11-11 15:58:22] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 15:58:22] Buscando producto con código/nombre: * [2025-11-11 15:58:22] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 15:58:22] Solicitud para mostrar todos los productos [2025-11-11 15:58:22] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 15:58:22] Productos encontrados: 17 [2025-11-11 15:58:22] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 15:58:22] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 15:58:22] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 15:58:22] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 15:58:22] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 15:58:22] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 15:58:22] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 15:58:22] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 15:58:22] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 15:58:22] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 15:58:22] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 15:58:22] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 15:58:22] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 15:58:22] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 15:58:22] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 15:58:22] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 15:58:22] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 15:58:22] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 15:58:22] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 15:58:22] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 15:58:22] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 15:58:22] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 15:58:22] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 15:58:22] Obteniendo imágenes para todos los productos: 17 [2025-11-11 15:58:22] Imágenes agregadas (mostrar todos): 17 productos con imagen [2025-11-11 15:58:22] Total de productos únicos encontrados: 17 [2025-11-11 15:58:30] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 15:58:30] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 15:58:30] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 15:58:30] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 15:58:30] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 15:58:30] DEBUG SESSION STATUS: 2 [2025-11-11 15:58:30] Negocio en sesión: 78.216.219-5 [2025-11-11 15:58:30] Nombre: SGB-ERP SpA [2025-11-11 15:58:30] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 15:58:30] Conexión exitosa a la base de datos [2025-11-11 15:58:30] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 15:58:30] Buscando producto con código/nombre: PEDI [2025-11-11 15:58:30] DEBUG: Código recibido: 'PEDI' (longitud: 4) [2025-11-11 15:58:30] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 15:58:30] No se encontró producto_id para el código exacto 'PEDI'. Intentando búsqueda parcial... [2025-11-11 15:58:30] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 15:58:30] Códigos parciales encontrados: 0 [2025-11-11 15:58:30] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 15:58:30] Productos encontrados por nombre: 7 [2025-11-11 15:58:30] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 15:58:30] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 15:58:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:30] Códigos encontrados para ID 151: 3 [2025-11-11 15:58:30] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 15:58:30] Códigos con stock disponible: 3 [2025-11-11 15:58:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 15:58:30] Stock total calculado para ID 151: 180 [2025-11-11 15:58:30] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 15:58:30] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 15:58:30] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 15:58:30] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 15:58:30] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:30] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 15:58:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:30] Códigos encontrados para ID 153: 1 [2025-11-11 15:58:30] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 15:58:30] Códigos con stock disponible: 1 [2025-11-11 15:58:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:30] Stock total calculado para ID 153: 25 [2025-11-11 15:58:30] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:30] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 15:58:30] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 15:58:30] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 15:58:30] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:30] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 15:58:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:30] Códigos encontrados para ID 154: 1 [2025-11-11 15:58:30] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 15:58:30] Códigos con stock disponible: 1 [2025-11-11 15:58:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:30] Stock total calculado para ID 154: 30 [2025-11-11 15:58:30] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:30] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 15:58:30] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 15:58:30] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 15:58:30] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:30] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 15:58:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:30] Códigos encontrados para ID 155: 1 [2025-11-11 15:58:30] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 15:58:30] Códigos con stock disponible: 1 [2025-11-11 15:58:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:30] Stock total calculado para ID 155: 20 [2025-11-11 15:58:30] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:30] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 15:58:30] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 15:58:30] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 15:58:30] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:30] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 15:58:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:30] Códigos encontrados para ID 160: 1 [2025-11-11 15:58:30] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 15:58:30] Códigos con stock disponible: 1 [2025-11-11 15:58:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:30] Stock total calculado para ID 160: 30 [2025-11-11 15:58:30] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:30] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 15:58:30] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 15:58:30] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 15:58:30] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:30] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 15:58:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:30] Códigos encontrados para ID 161: 1 [2025-11-11 15:58:30] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 15:58:30] Códigos con stock disponible: 1 [2025-11-11 15:58:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:30] Stock total calculado para ID 161: 25 [2025-11-11 15:58:30] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:30] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 15:58:30] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 15:58:30] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 15:58:30] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 15:58:30] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 15:58:30] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 15:58:30] Códigos encontrados para ID 162: 1 [2025-11-11 15:58:30] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 15:58:30] Códigos con stock disponible: 1 [2025-11-11 15:58:30] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 15:58:30] Stock total calculado para ID 162: 20 [2025-11-11 15:58:30] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 15:58:30] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 15:58:30] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 15:58:30] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 15:58:30] Se encontraron 7 resultados en total. [2025-11-11 15:58:30] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 15:58:30] Imágenes agregadas: 7 productos con imagen [2025-11-11 15:58:30] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 15:59:31] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 15:59:31] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 15:59:31] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 15:59:31] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 15:59:31] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 15:59:31] DEBUG SESSION STATUS: 2 [2025-11-11 15:59:31] Negocio en sesión: 78.216.219-5 [2025-11-11 15:59:31] Nombre: SGB-ERP SpA [2025-11-11 15:59:31] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 15:59:31] Conexión exitosa a la base de datos [2025-11-11 15:59:31] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 15:59:31] Buscando producto con código/nombre: * [2025-11-11 15:59:31] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 15:59:31] Solicitud para mostrar todos los productos [2025-11-11 15:59:31] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 15:59:31] Productos encontrados: 17 [2025-11-11 15:59:31] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 15:59:31] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 15:59:31] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 15:59:31] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 15:59:31] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 15:59:31] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 15:59:31] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 15:59:31] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 15:59:31] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 15:59:31] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 15:59:31] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 15:59:31] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 15:59:31] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 15:59:31] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 15:59:31] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 15:59:31] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 15:59:31] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 15:59:31] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 15:59:31] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 15:59:31] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 15:59:31] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 15:59:31] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 15:59:31] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 15:59:31] Obteniendo imágenes para todos los productos: 17 [2025-11-11 15:59:31] Imágenes agregadas (mostrar todos): 17 productos con imagen [2025-11-11 15:59:31] Total de productos únicos encontrados: 17 [2025-11-11 16:00:49] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:00:49] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:00:49] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:00:49] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:00:49] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:00:49] DEBUG SESSION STATUS: 2 [2025-11-11 16:00:49] Negocio en sesión: 78.216.219-5 [2025-11-11 16:00:49] Nombre: SGB-ERP SpA [2025-11-11 16:00:49] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:00:49] Conexión exitosa a la base de datos [2025-11-11 16:00:49] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:00:49] Buscando producto con código/nombre: * [2025-11-11 16:00:49] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 16:00:49] Solicitud para mostrar todos los productos [2025-11-11 16:00:49] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 16:00:49] Productos encontrados: 17 [2025-11-11 16:00:49] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 16:00:49] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 16:00:49] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 16:00:49] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 16:00:49] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 16:00:49] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 16:00:49] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 16:00:49] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 16:00:49] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 16:00:49] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 16:00:49] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 16:00:49] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 16:00:49] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 16:00:49] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 16:00:49] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 16:00:49] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 16:00:49] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 16:00:49] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 16:00:49] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 16:00:49] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 16:00:49] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 16:00:49] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 16:00:49] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 16:00:49] Obteniendo imágenes para todos los productos: 17 [2025-11-11 16:00:49] Imágenes agregadas (mostrar todos): 17 productos con imagen [2025-11-11 16:00:49] Total de productos únicos encontrados: 17 [2025-11-11 16:02:02] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:02:02] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:02:02] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:02:02] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:02:02] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:02:02] DEBUG SESSION STATUS: 2 [2025-11-11 16:02:02] Negocio en sesión: 78.216.219-5 [2025-11-11 16:02:02] Nombre: SGB-ERP SpA [2025-11-11 16:02:02] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:02:02] Conexión exitosa a la base de datos [2025-11-11 16:02:02] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:02:02] Buscando producto con código/nombre: gomi [2025-11-11 16:02:02] DEBUG: Código recibido: 'gomi' (longitud: 4) [2025-11-11 16:02:02] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:02:02] No se encontró producto_id para el código exacto 'gomi'. Intentando búsqueda parcial... [2025-11-11 16:02:02] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:02:02] Códigos parciales encontrados: 0 [2025-11-11 16:02:02] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:02:02] Productos encontrados por nombre: 0 [2025-11-11 16:02:02] No se encontró ningún producto con stock por ningún método [2025-11-11 16:02:02] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 16:02:05] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:02:05] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:02:05] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:02:05] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:02:05] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:02:05] DEBUG SESSION STATUS: 2 [2025-11-11 16:02:05] Negocio en sesión: 78.216.219-5 [2025-11-11 16:02:05] Nombre: SGB-ERP SpA [2025-11-11 16:02:05] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:02:05] Conexión exitosa a la base de datos [2025-11-11 16:02:05] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:02:05] Buscando producto con código/nombre: gomitas [2025-11-11 16:02:05] DEBUG: Código recibido: 'gomitas' (longitud: 7) [2025-11-11 16:02:05] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:02:05] No se encontró producto_id para el código exacto 'gomitas'. Intentando búsqueda parcial... [2025-11-11 16:02:05] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:02:05] Códigos parciales encontrados: 0 [2025-11-11 16:02:05] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:02:05] Productos encontrados por nombre: 0 [2025-11-11 16:02:05] No se encontró ningún producto con stock por ningún método [2025-11-11 16:02:05] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 16:02:11] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:02:11] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:02:11] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:02:11] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:02:11] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:02:11] DEBUG SESSION STATUS: 2 [2025-11-11 16:02:11] Negocio en sesión: 78.216.219-5 [2025-11-11 16:02:11] Nombre: SGB-ERP SpA [2025-11-11 16:02:11] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:02:11] Conexión exitosa a la base de datos [2025-11-11 16:02:11] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:02:11] Buscando producto con código/nombre: pedi [2025-11-11 16:02:11] DEBUG: Código recibido: 'pedi' (longitud: 4) [2025-11-11 16:02:11] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:02:11] No se encontró producto_id para el código exacto 'pedi'. Intentando búsqueda parcial... [2025-11-11 16:02:11] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:02:11] Códigos parciales encontrados: 0 [2025-11-11 16:02:11] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:02:11] Productos encontrados por nombre: 7 [2025-11-11 16:02:11] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 16:02:11] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 16:02:11] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:02:11] Códigos encontrados para ID 151: 3 [2025-11-11 16:02:11] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 16:02:11] Códigos con stock disponible: 3 [2025-11-11 16:02:11] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 16:02:11] Stock total calculado para ID 151: 180 [2025-11-11 16:02:11] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 16:02:11] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 16:02:11] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 16:02:11] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 16:02:11] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:02:11] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 16:02:11] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:02:11] Códigos encontrados para ID 153: 1 [2025-11-11 16:02:11] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:02:11] Códigos con stock disponible: 1 [2025-11-11 16:02:11] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:02:11] Stock total calculado para ID 153: 25 [2025-11-11 16:02:11] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:02:11] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:02:11] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 16:02:11] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:02:11] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:02:11] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 16:02:11] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:02:11] Códigos encontrados para ID 154: 1 [2025-11-11 16:02:11] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:02:11] Códigos con stock disponible: 1 [2025-11-11 16:02:11] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:02:11] Stock total calculado para ID 154: 30 [2025-11-11 16:02:11] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:02:11] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:02:11] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 16:02:11] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:02:11] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:02:11] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 16:02:11] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:02:11] Códigos encontrados para ID 155: 1 [2025-11-11 16:02:11] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:02:11] Códigos con stock disponible: 1 [2025-11-11 16:02:11] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:02:11] Stock total calculado para ID 155: 20 [2025-11-11 16:02:11] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:02:11] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:02:11] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 16:02:11] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:02:11] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:02:11] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 16:02:11] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:02:11] Códigos encontrados para ID 160: 1 [2025-11-11 16:02:11] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:02:11] Códigos con stock disponible: 1 [2025-11-11 16:02:11] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:02:11] Stock total calculado para ID 160: 30 [2025-11-11 16:02:11] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:02:11] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:02:11] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 16:02:11] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:02:11] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:02:11] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 16:02:11] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:02:11] Códigos encontrados para ID 161: 1 [2025-11-11 16:02:11] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:02:11] Códigos con stock disponible: 1 [2025-11-11 16:02:11] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:02:11] Stock total calculado para ID 161: 25 [2025-11-11 16:02:11] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:02:11] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:02:11] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 16:02:11] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:02:11] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:02:11] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 16:02:11] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:02:11] Códigos encontrados para ID 162: 1 [2025-11-11 16:02:11] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:02:11] Códigos con stock disponible: 1 [2025-11-11 16:02:11] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:02:11] Stock total calculado para ID 162: 20 [2025-11-11 16:02:11] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:02:11] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:02:11] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 16:02:11] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:02:11] Se encontraron 7 resultados en total. [2025-11-11 16:02:11] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 16:02:11] Imágenes agregadas: 7 productos con imagen [2025-11-11 16:02:11] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 16:03:10] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:03:10] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:03:10] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:03:10] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:03:10] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:03:10] DEBUG SESSION STATUS: 2 [2025-11-11 16:03:10] Negocio en sesión: 78.216.219-5 [2025-11-11 16:03:10] Nombre: SGB-ERP SpA [2025-11-11 16:03:10] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:03:10] Conexión exitosa a la base de datos [2025-11-11 16:03:10] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:03:10] Buscando producto con código/nombre: whis [2025-11-11 16:03:10] DEBUG: Código recibido: 'whis' (longitud: 4) [2025-11-11 16:03:10] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:03:10] No se encontró producto_id para el código exacto 'whis'. Intentando búsqueda parcial... [2025-11-11 16:03:10] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:03:10] Códigos parciales encontrados: 0 [2025-11-11 16:03:10] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:03:10] Productos encontrados por nombre: 3 [2025-11-11 16:03:10] Procesando producto encontrado por nombre: {"id":146,"codigo":"7801234567890","nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:10] Usando lote específico detectado: ninguno para producto ID: 146 [2025-11-11 16:03:10] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:10] Códigos encontrados para ID 146: 1 [2025-11-11 16:03:10] Detalle de códigos: [{"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null}] [2025-11-11 16:03:10] Códigos con stock disponible: 1 [2025-11-11 16:03:10] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:10] Stock total calculado para ID 146: 50 [2025-11-11 16:03:10] Producto NORMAL ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:10] Usando primer código disponible en orden FIFO para ID 146: {"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null} [2025-11-11 16:03:10] Producto por nombre agregado a resultados (ID: 146) [2025-11-11 16:03:10] Datos finales del producto: {"id":146,"codigo":"7801234567890","nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 16:03:10] Procesando producto encontrado por nombre: {"id":147,"codigo":"7801234567891","nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"45.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:10] Usando lote específico detectado: ninguno para producto ID: 147 [2025-11-11 16:03:10] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:10] Códigos encontrados para ID 147: 1 [2025-11-11 16:03:10] Detalle de códigos: [{"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null}] [2025-11-11 16:03:10] Códigos con stock disponible: 1 [2025-11-11 16:03:10] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:10] Stock total calculado para ID 147: 45 [2025-11-11 16:03:10] Producto NORMAL ID: 147 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:10] Usando primer código disponible en orden FIFO para ID 147: {"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null} [2025-11-11 16:03:10] Producto por nombre agregado a resultados (ID: 147) [2025-11-11 16:03:10] Datos finales del producto: {"id":147,"codigo":"7801234567891","nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":45,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"45.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"45 un","stock_disponible":true} [2025-11-11 16:03:10] Procesando producto encontrado por nombre: {"id":148,"codigo":"7801234567892","nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"40.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:10] Usando lote específico detectado: ninguno para producto ID: 148 [2025-11-11 16:03:10] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:10] Códigos encontrados para ID 148: 1 [2025-11-11 16:03:10] Detalle de códigos: [{"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null}] [2025-11-11 16:03:10] Códigos con stock disponible: 1 [2025-11-11 16:03:10] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:10] Stock total calculado para ID 148: 40 [2025-11-11 16:03:10] Producto NORMAL ID: 148 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:10] Usando primer código disponible en orden FIFO para ID 148: {"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null} [2025-11-11 16:03:10] Producto por nombre agregado a resultados (ID: 148) [2025-11-11 16:03:10] Datos finales del producto: {"id":148,"codigo":"7801234567892","nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"40.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 16:03:10] Se encontraron 3 resultados en total. [2025-11-11 16:03:10] Obteniendo imágenes para productos: 146, 147, 148 [2025-11-11 16:03:10] Imágenes agregadas: 3 productos con imagen [2025-11-11 16:03:10] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-11 16:03:57] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:03:57] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:03:57] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:03:57] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:03:57] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:03:57] DEBUG SESSION STATUS: 2 [2025-11-11 16:03:57] Negocio en sesión: 78.216.219-5 [2025-11-11 16:03:57] Nombre: SGB-ERP SpA [2025-11-11 16:03:57] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:03:57] Conexión exitosa a la base de datos [2025-11-11 16:03:57] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:03:57] Buscando producto con código/nombre: pedi [2025-11-11 16:03:57] DEBUG: Código recibido: 'pedi' (longitud: 4) [2025-11-11 16:03:57] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:03:57] No se encontró producto_id para el código exacto 'pedi'. Intentando búsqueda parcial... [2025-11-11 16:03:57] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:03:57] Códigos parciales encontrados: 0 [2025-11-11 16:03:57] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:03:57] Productos encontrados por nombre: 7 [2025-11-11 16:03:57] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 16:03:57] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 16:03:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:57] Códigos encontrados para ID 151: 3 [2025-11-11 16:03:57] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 16:03:57] Códigos con stock disponible: 3 [2025-11-11 16:03:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 16:03:57] Stock total calculado para ID 151: 180 [2025-11-11 16:03:57] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 16:03:57] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 16:03:57] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 16:03:57] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 16:03:57] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:57] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 16:03:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:57] Códigos encontrados para ID 153: 1 [2025-11-11 16:03:57] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:03:57] Códigos con stock disponible: 1 [2025-11-11 16:03:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:57] Stock total calculado para ID 153: 25 [2025-11-11 16:03:57] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:57] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:03:57] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 16:03:57] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:03:57] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:57] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 16:03:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:57] Códigos encontrados para ID 154: 1 [2025-11-11 16:03:57] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:03:57] Códigos con stock disponible: 1 [2025-11-11 16:03:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:57] Stock total calculado para ID 154: 30 [2025-11-11 16:03:57] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:57] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:03:57] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 16:03:57] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:03:57] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:57] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 16:03:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:57] Códigos encontrados para ID 155: 1 [2025-11-11 16:03:57] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:03:57] Códigos con stock disponible: 1 [2025-11-11 16:03:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:57] Stock total calculado para ID 155: 20 [2025-11-11 16:03:57] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:57] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:03:57] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 16:03:57] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:03:57] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:57] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 16:03:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:57] Códigos encontrados para ID 160: 1 [2025-11-11 16:03:57] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:03:57] Códigos con stock disponible: 1 [2025-11-11 16:03:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:57] Stock total calculado para ID 160: 30 [2025-11-11 16:03:57] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:57] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:03:57] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 16:03:57] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:03:57] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:57] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 16:03:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:57] Códigos encontrados para ID 161: 1 [2025-11-11 16:03:57] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:03:57] Códigos con stock disponible: 1 [2025-11-11 16:03:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:57] Stock total calculado para ID 161: 25 [2025-11-11 16:03:57] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:57] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:03:57] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 16:03:57] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:03:57] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:03:57] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 16:03:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:03:57] Códigos encontrados para ID 162: 1 [2025-11-11 16:03:57] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:03:57] Códigos con stock disponible: 1 [2025-11-11 16:03:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:03:57] Stock total calculado para ID 162: 20 [2025-11-11 16:03:57] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:03:57] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:03:57] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 16:03:57] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:03:57] Se encontraron 7 resultados en total. [2025-11-11 16:03:57] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 16:03:57] Imágenes agregadas: 7 productos con imagen [2025-11-11 16:03:57] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 16:04:51] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:04:51] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:04:51] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:04:51] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:04:51] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:04:51] DEBUG SESSION STATUS: 2 [2025-11-11 16:04:51] Negocio en sesión: 78.216.219-5 [2025-11-11 16:04:51] Nombre: SGB-ERP SpA [2025-11-11 16:04:51] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:04:51] Conexión exitosa a la base de datos [2025-11-11 16:04:51] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:04:51] Buscando producto con código/nombre: wisk [2025-11-11 16:04:51] DEBUG: Código recibido: 'wisk' (longitud: 4) [2025-11-11 16:04:51] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:04:51] No se encontró producto_id para el código exacto 'wisk'. Intentando búsqueda parcial... [2025-11-11 16:04:51] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:04:51] Códigos parciales encontrados: 0 [2025-11-11 16:04:51] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:04:51] Productos encontrados por nombre: 0 [2025-11-11 16:04:51] No se encontró ningún producto con stock por ningún método [2025-11-11 16:04:51] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 16:04:54] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:04:54] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:04:54] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:04:54] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:04:54] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:04:54] DEBUG SESSION STATUS: 2 [2025-11-11 16:04:54] Negocio en sesión: 78.216.219-5 [2025-11-11 16:04:54] Nombre: SGB-ERP SpA [2025-11-11 16:04:54] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:04:54] Conexión exitosa a la base de datos [2025-11-11 16:04:54] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:04:54] Buscando producto con código/nombre: wis} [2025-11-11 16:04:54] DEBUG: Código recibido: 'wis}' (longitud: 4) [2025-11-11 16:04:54] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:04:54] No se encontró producto_id para el código exacto 'wis}'. Intentando búsqueda parcial... [2025-11-11 16:04:54] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:04:54] Códigos parciales encontrados: 0 [2025-11-11 16:04:54] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:04:54] Productos encontrados por nombre: 0 [2025-11-11 16:04:54] No se encontró ningún producto con stock por ningún método [2025-11-11 16:04:54] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 16:04:57] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:04:57] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:04:57] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:04:57] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:04:57] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:04:57] DEBUG SESSION STATUS: 2 [2025-11-11 16:04:57] Negocio en sesión: 78.216.219-5 [2025-11-11 16:04:57] Nombre: SGB-ERP SpA [2025-11-11 16:04:57] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:04:57] Conexión exitosa a la base de datos [2025-11-11 16:04:57] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:04:57] Buscando producto con código/nombre: wis [2025-11-11 16:04:57] DEBUG: Código recibido: 'wis' (longitud: 3) [2025-11-11 16:04:57] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:04:57] No se encontró producto_id para el código exacto 'wis'. Intentando búsqueda parcial... [2025-11-11 16:04:57] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:04:57] Códigos parciales encontrados: 0 [2025-11-11 16:04:57] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:04:57] Productos encontrados por nombre: 0 [2025-11-11 16:04:57] No se encontró ningún producto con stock por ningún método [2025-11-11 16:04:57] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 16:04:59] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:04:59] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:04:59] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:04:59] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:04:59] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:04:59] DEBUG SESSION STATUS: 2 [2025-11-11 16:04:59] Negocio en sesión: 78.216.219-5 [2025-11-11 16:04:59] Nombre: SGB-ERP SpA [2025-11-11 16:04:59] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:04:59] Conexión exitosa a la base de datos [2025-11-11 16:04:59] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:04:59] Buscando producto con código/nombre: wit [2025-11-11 16:04:59] DEBUG: Código recibido: 'wit' (longitud: 3) [2025-11-11 16:04:59] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:04:59] No se encontró producto_id para el código exacto 'wit'. Intentando búsqueda parcial... [2025-11-11 16:04:59] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:04:59] Códigos parciales encontrados: 0 [2025-11-11 16:04:59] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:04:59] Productos encontrados por nombre: 0 [2025-11-11 16:04:59] No se encontró ningún producto con stock por ningún método [2025-11-11 16:04:59] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 16:05:02] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:05:02] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:05:02] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:05:02] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:05:02] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:05:02] DEBUG SESSION STATUS: 2 [2025-11-11 16:05:02] Negocio en sesión: 78.216.219-5 [2025-11-11 16:05:02] Nombre: SGB-ERP SpA [2025-11-11 16:05:02] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:05:02] Conexión exitosa a la base de datos [2025-11-11 16:05:02] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:05:02] Buscando producto con código/nombre: * [2025-11-11 16:05:02] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 16:05:02] Solicitud para mostrar todos los productos [2025-11-11 16:05:02] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 16:05:02] Productos encontrados: 17 [2025-11-11 16:05:02] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 16:05:02] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 16:05:02] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 16:05:02] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 16:05:02] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 16:05:02] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 16:05:02] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 16:05:02] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 16:05:02] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 16:05:02] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 16:05:02] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 16:05:02] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 16:05:02] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 16:05:02] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 16:05:02] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 16:05:02] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 16:05:02] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 16:05:02] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 16:05:02] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 16:05:02] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 16:05:02] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 16:05:02] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 16:05:02] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 16:05:02] Obteniendo imágenes para todos los productos: 17 [2025-11-11 16:05:02] Imágenes agregadas (mostrar todos): 17 productos con imagen [2025-11-11 16:05:02] Total de productos únicos encontrados: 17 [2025-11-11 16:05:09] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:05:09] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:05:09] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:05:09] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:05:09] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:05:09] DEBUG SESSION STATUS: 2 [2025-11-11 16:05:09] Negocio en sesión: 78.216.219-5 [2025-11-11 16:05:09] Nombre: SGB-ERP SpA [2025-11-11 16:05:09] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:05:09] Conexión exitosa a la base de datos [2025-11-11 16:05:09] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:05:09] Buscando producto con código/nombre: wis [2025-11-11 16:05:09] DEBUG: Código recibido: 'wis' (longitud: 3) [2025-11-11 16:05:09] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:05:09] No se encontró producto_id para el código exacto 'wis'. Intentando búsqueda parcial... [2025-11-11 16:05:09] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:05:09] Códigos parciales encontrados: 0 [2025-11-11 16:05:09] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:05:09] Productos encontrados por nombre: 0 [2025-11-11 16:05:09] No se encontró ningún producto con stock por ningún método [2025-11-11 16:05:09] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 16:05:11] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:05:11] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:05:11] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:05:11] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:05:11] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:05:11] DEBUG SESSION STATUS: 2 [2025-11-11 16:05:11] Negocio en sesión: 78.216.219-5 [2025-11-11 16:05:11] Nombre: SGB-ERP SpA [2025-11-11 16:05:11] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:05:11] Conexión exitosa a la base de datos [2025-11-11 16:05:11] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:05:11] Buscando producto con código/nombre: * [2025-11-11 16:05:11] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 16:05:11] Solicitud para mostrar todos los productos [2025-11-11 16:05:11] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 16:05:11] Productos encontrados: 17 [2025-11-11 16:05:11] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 16:05:11] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 16:05:11] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 16:05:11] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 16:05:11] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 16:05:11] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 16:05:11] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 16:05:11] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 16:05:11] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 16:05:11] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 16:05:11] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 16:05:11] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 16:05:11] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 16:05:11] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 16:05:11] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 16:05:11] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 16:05:11] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 16:05:11] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 16:05:11] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 16:05:11] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 16:05:11] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 16:05:11] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 16:05:11] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 16:05:11] Obteniendo imágenes para todos los productos: 17 [2025-11-11 16:05:11] Imágenes agregadas (mostrar todos): 17 productos con imagen [2025-11-11 16:05:11] Total de productos únicos encontrados: 17 [2025-11-11 16:05:15] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:05:15] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:05:15] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:05:15] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:05:15] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:05:15] DEBUG SESSION STATUS: 2 [2025-11-11 16:05:15] Negocio en sesión: 78.216.219-5 [2025-11-11 16:05:15] Nombre: SGB-ERP SpA [2025-11-11 16:05:15] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:05:15] Conexión exitosa a la base de datos [2025-11-11 16:05:15] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:05:15] Buscando producto con código/nombre: whis [2025-11-11 16:05:15] DEBUG: Código recibido: 'whis' (longitud: 4) [2025-11-11 16:05:15] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:05:15] No se encontró producto_id para el código exacto 'whis'. Intentando búsqueda parcial... [2025-11-11 16:05:15] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:05:15] Códigos parciales encontrados: 0 [2025-11-11 16:05:15] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:05:15] Productos encontrados por nombre: 3 [2025-11-11 16:05:15] Procesando producto encontrado por nombre: {"id":146,"codigo":"7801234567890","nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:15] Usando lote específico detectado: ninguno para producto ID: 146 [2025-11-11 16:05:15] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:15] Códigos encontrados para ID 146: 1 [2025-11-11 16:05:15] Detalle de códigos: [{"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null}] [2025-11-11 16:05:15] Códigos con stock disponible: 1 [2025-11-11 16:05:15] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:15] Stock total calculado para ID 146: 50 [2025-11-11 16:05:15] Producto NORMAL ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:15] Usando primer código disponible en orden FIFO para ID 146: {"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null} [2025-11-11 16:05:15] Producto por nombre agregado a resultados (ID: 146) [2025-11-11 16:05:15] Datos finales del producto: {"id":146,"codigo":"7801234567890","nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 16:05:15] Procesando producto encontrado por nombre: {"id":147,"codigo":"7801234567891","nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"45.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:15] Usando lote específico detectado: ninguno para producto ID: 147 [2025-11-11 16:05:15] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:15] Códigos encontrados para ID 147: 1 [2025-11-11 16:05:15] Detalle de códigos: [{"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null}] [2025-11-11 16:05:15] Códigos con stock disponible: 1 [2025-11-11 16:05:15] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:15] Stock total calculado para ID 147: 45 [2025-11-11 16:05:15] Producto NORMAL ID: 147 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:15] Usando primer código disponible en orden FIFO para ID 147: {"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null} [2025-11-11 16:05:15] Producto por nombre agregado a resultados (ID: 147) [2025-11-11 16:05:15] Datos finales del producto: {"id":147,"codigo":"7801234567891","nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":45,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"45.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"45 un","stock_disponible":true} [2025-11-11 16:05:15] Procesando producto encontrado por nombre: {"id":148,"codigo":"7801234567892","nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"40.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:15] Usando lote específico detectado: ninguno para producto ID: 148 [2025-11-11 16:05:15] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:15] Códigos encontrados para ID 148: 1 [2025-11-11 16:05:15] Detalle de códigos: [{"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null}] [2025-11-11 16:05:15] Códigos con stock disponible: 1 [2025-11-11 16:05:15] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:15] Stock total calculado para ID 148: 40 [2025-11-11 16:05:15] Producto NORMAL ID: 148 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:15] Usando primer código disponible en orden FIFO para ID 148: {"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null} [2025-11-11 16:05:15] Producto por nombre agregado a resultados (ID: 148) [2025-11-11 16:05:15] Datos finales del producto: {"id":148,"codigo":"7801234567892","nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"40.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 16:05:15] Se encontraron 3 resultados en total. [2025-11-11 16:05:15] Obteniendo imágenes para productos: 146, 147, 148 [2025-11-11 16:05:15] Imágenes agregadas: 3 productos con imagen [2025-11-11 16:05:15] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-11 16:05:24] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:05:24] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:05:24] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:05:24] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:05:24] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:05:24] DEBUG SESSION STATUS: 2 [2025-11-11 16:05:24] Negocio en sesión: 78.216.219-5 [2025-11-11 16:05:24] Nombre: SGB-ERP SpA [2025-11-11 16:05:24] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:05:24] Conexión exitosa a la base de datos [2025-11-11 16:05:24] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:05:24] Buscando producto con código/nombre: pedi [2025-11-11 16:05:24] DEBUG: Código recibido: 'pedi' (longitud: 4) [2025-11-11 16:05:24] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:05:24] No se encontró producto_id para el código exacto 'pedi'. Intentando búsqueda parcial... [2025-11-11 16:05:24] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:05:24] Códigos parciales encontrados: 0 [2025-11-11 16:05:24] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:05:24] Productos encontrados por nombre: 7 [2025-11-11 16:05:24] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 16:05:24] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 16:05:24] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:24] Códigos encontrados para ID 151: 3 [2025-11-11 16:05:24] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 16:05:24] Códigos con stock disponible: 3 [2025-11-11 16:05:24] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 16:05:24] Stock total calculado para ID 151: 180 [2025-11-11 16:05:24] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 16:05:24] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 16:05:24] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 16:05:24] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 16:05:24] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:24] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 16:05:24] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:24] Códigos encontrados para ID 153: 1 [2025-11-11 16:05:24] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:05:24] Códigos con stock disponible: 1 [2025-11-11 16:05:24] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:24] Stock total calculado para ID 153: 25 [2025-11-11 16:05:24] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:24] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:05:24] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 16:05:24] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:05:24] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:24] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 16:05:24] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:24] Códigos encontrados para ID 154: 1 [2025-11-11 16:05:24] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:05:24] Códigos con stock disponible: 1 [2025-11-11 16:05:24] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:24] Stock total calculado para ID 154: 30 [2025-11-11 16:05:24] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:24] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:05:24] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 16:05:24] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:05:24] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:24] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 16:05:24] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:24] Códigos encontrados para ID 155: 1 [2025-11-11 16:05:24] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:05:24] Códigos con stock disponible: 1 [2025-11-11 16:05:24] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:24] Stock total calculado para ID 155: 20 [2025-11-11 16:05:24] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:24] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:05:24] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 16:05:24] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:05:24] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:24] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 16:05:24] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:24] Códigos encontrados para ID 160: 1 [2025-11-11 16:05:24] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:05:24] Códigos con stock disponible: 1 [2025-11-11 16:05:24] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:24] Stock total calculado para ID 160: 30 [2025-11-11 16:05:24] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:24] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:05:24] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 16:05:24] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:05:24] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:24] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 16:05:24] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:25] Códigos encontrados para ID 161: 1 [2025-11-11 16:05:25] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:05:25] Códigos con stock disponible: 1 [2025-11-11 16:05:25] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:25] Stock total calculado para ID 161: 25 [2025-11-11 16:05:25] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:25] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:05:25] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 16:05:25] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:05:25] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:25] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 16:05:25] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:25] Códigos encontrados para ID 162: 1 [2025-11-11 16:05:25] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:05:25] Códigos con stock disponible: 1 [2025-11-11 16:05:25] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:25] Stock total calculado para ID 162: 20 [2025-11-11 16:05:25] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:25] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:05:25] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 16:05:25] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:05:25] Se encontraron 7 resultados en total. [2025-11-11 16:05:25] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 16:05:25] Imágenes agregadas: 7 productos con imagen [2025-11-11 16:05:25] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 16:05:34] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:05:34] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:05:34] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:05:34] DEBUG SESSION: {"last_regeneration":1762887281,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:05:34] DEBUG SESSION ID: 3tTWsbSeiR45L676dFJTEj8e,eI4AF7e2,ayjLdv22c1gbjT [2025-11-11 16:05:34] DEBUG SESSION STATUS: 2 [2025-11-11 16:05:34] Negocio en sesión: 78.216.219-5 [2025-11-11 16:05:34] Nombre: SGB-ERP SpA [2025-11-11 16:05:34] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:05:34] Conexión exitosa a la base de datos [2025-11-11 16:05:34] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:05:34] Buscando producto con código/nombre: pedi [2025-11-11 16:05:34] DEBUG: Código recibido: 'pedi' (longitud: 4) [2025-11-11 16:05:34] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:05:34] No se encontró producto_id para el código exacto 'pedi'. Intentando búsqueda parcial... [2025-11-11 16:05:34] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:05:34] Códigos parciales encontrados: 0 [2025-11-11 16:05:34] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:05:34] Productos encontrados por nombre: 7 [2025-11-11 16:05:34] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 16:05:34] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 16:05:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:34] Códigos encontrados para ID 151: 3 [2025-11-11 16:05:34] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 16:05:34] Códigos con stock disponible: 3 [2025-11-11 16:05:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 16:05:34] Stock total calculado para ID 151: 180 [2025-11-11 16:05:34] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 16:05:34] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 16:05:34] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 16:05:34] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 16:05:34] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:34] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 16:05:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:34] Códigos encontrados para ID 153: 1 [2025-11-11 16:05:34] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:05:34] Códigos con stock disponible: 1 [2025-11-11 16:05:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:34] Stock total calculado para ID 153: 25 [2025-11-11 16:05:34] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:34] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:05:34] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 16:05:34] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:05:34] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:34] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 16:05:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:34] Códigos encontrados para ID 154: 1 [2025-11-11 16:05:34] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:05:34] Códigos con stock disponible: 1 [2025-11-11 16:05:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:34] Stock total calculado para ID 154: 30 [2025-11-11 16:05:34] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:34] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:05:34] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 16:05:34] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:05:34] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:34] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 16:05:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:34] Códigos encontrados para ID 155: 1 [2025-11-11 16:05:34] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:05:34] Códigos con stock disponible: 1 [2025-11-11 16:05:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:34] Stock total calculado para ID 155: 20 [2025-11-11 16:05:34] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:34] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:05:34] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 16:05:34] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:05:34] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:34] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 16:05:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:34] Códigos encontrados para ID 160: 1 [2025-11-11 16:05:34] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:05:34] Códigos con stock disponible: 1 [2025-11-11 16:05:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:34] Stock total calculado para ID 160: 30 [2025-11-11 16:05:34] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:34] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:05:34] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 16:05:34] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:05:34] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:34] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 16:05:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:34] Códigos encontrados para ID 161: 1 [2025-11-11 16:05:34] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:05:34] Códigos con stock disponible: 1 [2025-11-11 16:05:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:34] Stock total calculado para ID 161: 25 [2025-11-11 16:05:34] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:34] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:05:34] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 16:05:34] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:05:34] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:05:34] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 16:05:34] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:05:34] Códigos encontrados para ID 162: 1 [2025-11-11 16:05:34] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:05:34] Códigos con stock disponible: 1 [2025-11-11 16:05:34] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:05:34] Stock total calculado para ID 162: 20 [2025-11-11 16:05:34] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:05:34] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:05:34] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 16:05:34] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:05:34] Se encontraron 7 resultados en total. [2025-11-11 16:05:34] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 16:05:34] Imágenes agregadas: 7 productos con imagen [2025-11-11 16:05:34] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 16:06:25] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:06:25] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:06:25] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:06:25] DEBUG SESSION: {"last_regeneration":1762887975,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":20,"sesion_caja_id":20,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-11 16:06:25] DEBUG SESSION ID: i06659v77f09teorqd2arobmsa [2025-11-11 16:06:25] DEBUG SESSION STATUS: 2 [2025-11-11 16:06:25] Negocio en sesión: 17.612.457-1 [2025-11-11 16:06:25] Nombre: Mis dos princesas [2025-11-11 16:06:25] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:06:25] Conexión exitosa a la base de datos [2025-11-11 16:06:25] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-11 16:06:25] Buscando producto con código/nombre: * [2025-11-11 16:06:25] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 16:06:25] Solicitud para mostrar todos los productos [2025-11-11 16:06:25] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 16:06:25] Productos encontrados: 4 [2025-11-11 16:06:25] Producto 0: GOMITAS DENTADURAS - Códigos adicionales: NULL [2025-11-11 16:06:25] Producto 1: GOMITAS GUSANO ACIDO - Códigos adicionales: NULL [2025-11-11 16:06:25] Producto 2: GOMITAS PIRATE SKULLS - Códigos adicionales: NULL [2025-11-11 16:06:25] Producto 3: GOMITAS RANAS - Códigos adicionales: NULL [2025-11-11 16:06:25] Producto agregado a resultados (ID: 103): GOMITAS DENTADURAS [2025-11-11 16:06:25] Producto agregado a resultados (ID: 105): GOMITAS GUSANO ACIDO [2025-11-11 16:06:25] Producto agregado a resultados (ID: 106): GOMITAS PIRATE SKULLS [2025-11-11 16:06:25] Producto agregado a resultados (ID: 104): GOMITAS RANAS [2025-11-11 16:06:25] Obteniendo imágenes para todos los productos: 4 [2025-11-11 16:06:25] Imágenes agregadas (mostrar todos): 3 productos con imagen [2025-11-11 16:06:25] Total de productos únicos encontrados: 4 [2025-11-11 16:06:42] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:06:42] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:06:42] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:06:42] DEBUG SESSION: {"last_regeneration":1762887975,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":20,"sesion_caja_id":20,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-11 16:06:42] DEBUG SESSION ID: i06659v77f09teorqd2arobmsa [2025-11-11 16:06:42] DEBUG SESSION STATUS: 2 [2025-11-11 16:06:42] Negocio en sesión: 17.612.457-1 [2025-11-11 16:06:42] Nombre: Mis dos princesas [2025-11-11 16:06:42] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:06:42] Conexión exitosa a la base de datos [2025-11-11 16:06:42] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-11 16:06:42] Buscando producto con código/nombre: fini [2025-11-11 16:06:42] DEBUG: Código recibido: 'fini' (longitud: 4) [2025-11-11 16:06:42] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:06:42] No se encontró producto_id para el código exacto 'fini'. Intentando búsqueda parcial... [2025-11-11 16:06:42] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:06:42] Códigos parciales encontrados: 0 [2025-11-11 16:06:42] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:06:42] Productos encontrados por nombre: 4 [2025-11-11 16:06:42] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:06:42] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-11 16:06:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:06:42] Códigos encontrados para ID 103: 1 [2025-11-11 16:06:42] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-11 16:06:42] Códigos con stock disponible: 1 [2025-11-11 16:06:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:06:42] Stock total calculado para ID 103: 8 [2025-11-11 16:06:42] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:06:42] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-11 16:06:42] Producto por nombre agregado a resultados (ID: 103) [2025-11-11 16:06:42] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":8,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 un","stock_disponible":true} [2025-11-11 16:06:42] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:06:42] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-11 16:06:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:06:42] Códigos encontrados para ID 104: 1 [2025-11-11 16:06:42] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-11 16:06:42] Códigos con stock disponible: 1 [2025-11-11 16:06:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:06:42] Stock total calculado para ID 104: 8 [2025-11-11 16:06:42] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:06:42] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-11 16:06:42] Producto por nombre agregado a resultados (ID: 104) [2025-11-11 16:06:42] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":8,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 un","stock_disponible":true} [2025-11-11 16:06:42] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:06:42] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-11 16:06:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:06:42] Códigos encontrados para ID 105: 1 [2025-11-11 16:06:42] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-11 16:06:42] Códigos con stock disponible: 1 [2025-11-11 16:06:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:06:42] Stock total calculado para ID 105: 5 [2025-11-11 16:06:42] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:06:42] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-11 16:06:42] Producto por nombre agregado a resultados (ID: 105) [2025-11-11 16:06:42] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":5,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 un","stock_disponible":true} [2025-11-11 16:06:42] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:06:42] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-11 16:06:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:06:42] Códigos encontrados para ID 106: 1 [2025-11-11 16:06:42] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-11 16:06:42] Códigos con stock disponible: 1 [2025-11-11 16:06:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:06:42] Stock total calculado para ID 106: 10 [2025-11-11 16:06:42] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:06:42] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-11 16:06:42] Producto por nombre agregado a resultados (ID: 106) [2025-11-11 16:06:42] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 un","stock_disponible":true} [2025-11-11 16:06:42] Se encontraron 4 resultados en total. [2025-11-11 16:06:42] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-11 16:06:42] Imágenes agregadas: 3 productos con imagen [2025-11-11 16:06:42] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-11 16:08:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:08:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:08:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:08:06] DEBUG SESSION: {"last_regeneration":1762888073,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":20,"sesion_caja_id":20,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-11 16:08:06] DEBUG SESSION ID: 8Y3PF0nPMGlI8TphDzudmqdDZv6ASWBBJ9-lu5Ktu8hiq,94 [2025-11-11 16:08:06] DEBUG SESSION STATUS: 2 [2025-11-11 16:08:06] Negocio en sesión: 17.612.457-1 [2025-11-11 16:08:06] Nombre: Mis dos princesas [2025-11-11 16:08:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:08:06] Conexión exitosa a la base de datos [2025-11-11 16:08:06] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-11 16:08:06] Buscando producto con código/nombre: gomit [2025-11-11 16:08:06] DEBUG: Código recibido: 'gomit' (longitud: 5) [2025-11-11 16:08:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:08:06] No se encontró producto_id para el código exacto 'gomit'. Intentando búsqueda parcial... [2025-11-11 16:08:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:08:06] Códigos parciales encontrados: 0 [2025-11-11 16:08:06] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:08:06] Productos encontrados por nombre: 4 [2025-11-11 16:08:06] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:08:06] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-11 16:08:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:08:06] Códigos encontrados para ID 103: 1 [2025-11-11 16:08:06] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-11 16:08:06] Códigos con stock disponible: 1 [2025-11-11 16:08:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:08:06] Stock total calculado para ID 103: 8 [2025-11-11 16:08:06] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:08:06] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-11 16:08:06] Producto por nombre agregado a resultados (ID: 103) [2025-11-11 16:08:06] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":8,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 un","stock_disponible":true} [2025-11-11 16:08:06] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:08:06] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-11 16:08:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:08:06] Códigos encontrados para ID 104: 1 [2025-11-11 16:08:06] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-11 16:08:06] Códigos con stock disponible: 1 [2025-11-11 16:08:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:08:06] Stock total calculado para ID 104: 8 [2025-11-11 16:08:06] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:08:06] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-11 16:08:06] Producto por nombre agregado a resultados (ID: 104) [2025-11-11 16:08:06] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":8,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 un","stock_disponible":true} [2025-11-11 16:08:06] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:08:06] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-11 16:08:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:08:06] Códigos encontrados para ID 105: 1 [2025-11-11 16:08:06] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-11 16:08:06] Códigos con stock disponible: 1 [2025-11-11 16:08:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:08:06] Stock total calculado para ID 105: 5 [2025-11-11 16:08:06] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:08:06] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-11 16:08:06] Producto por nombre agregado a resultados (ID: 105) [2025-11-11 16:08:06] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":5,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 un","stock_disponible":true} [2025-11-11 16:08:06] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:08:06] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-11 16:08:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:08:06] Códigos encontrados para ID 106: 1 [2025-11-11 16:08:06] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-11 16:08:06] Códigos con stock disponible: 1 [2025-11-11 16:08:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:08:06] Stock total calculado para ID 106: 10 [2025-11-11 16:08:06] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:08:06] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-11 16:08:06] Producto por nombre agregado a resultados (ID: 106) [2025-11-11 16:08:06] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 un","stock_disponible":true} [2025-11-11 16:08:06] Se encontraron 4 resultados en total. [2025-11-11 16:08:06] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-11 16:08:06] Imágenes agregadas: 4 productos con imagen [2025-11-11 16:08:06] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-11 16:08:37] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:08:37] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:08:37] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:08:37] DEBUG SESSION: {"last_regeneration":1762888073,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":20,"sesion_caja_id":20,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-11 16:08:37] DEBUG SESSION ID: 8Y3PF0nPMGlI8TphDzudmqdDZv6ASWBBJ9-lu5Ktu8hiq,94 [2025-11-11 16:08:37] DEBUG SESSION STATUS: 2 [2025-11-11 16:08:37] Negocio en sesión: 17.612.457-1 [2025-11-11 16:08:37] Nombre: Mis dos princesas [2025-11-11 16:08:37] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:08:37] Conexión exitosa a la base de datos [2025-11-11 16:08:37] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-11 16:08:37] Buscando producto con código/nombre: * [2025-11-11 16:08:37] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 16:08:37] Solicitud para mostrar todos los productos [2025-11-11 16:08:37] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 16:08:37] Productos encontrados: 4 [2025-11-11 16:08:37] Producto 0: GOMITAS DENTADURAS - Códigos adicionales: NULL [2025-11-11 16:08:37] Producto 1: GOMITAS GUSANO ACIDO - Códigos adicionales: NULL [2025-11-11 16:08:37] Producto 2: GOMITAS PIRATE SKULLS - Códigos adicionales: NULL [2025-11-11 16:08:37] Producto 3: GOMITAS RANAS - Códigos adicionales: NULL [2025-11-11 16:08:37] Producto agregado a resultados (ID: 103): GOMITAS DENTADURAS [2025-11-11 16:08:37] Producto agregado a resultados (ID: 105): GOMITAS GUSANO ACIDO [2025-11-11 16:08:37] Producto agregado a resultados (ID: 106): GOMITAS PIRATE SKULLS [2025-11-11 16:08:37] Producto agregado a resultados (ID: 104): GOMITAS RANAS [2025-11-11 16:08:37] Obteniendo imágenes para todos los productos: 4 [2025-11-11 16:08:37] Imágenes agregadas (mostrar todos): 4 productos con imagen [2025-11-11 16:08:37] Total de productos únicos encontrados: 4 [2025-11-11 16:10:59] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:10:59] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:10:59] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:10:59] DEBUG SESSION: {"last_regeneration":1762888073,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":20,"sesion_caja_id":20,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"},"redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php"} [2025-11-11 16:10:59] DEBUG SESSION ID: 8Y3PF0nPMGlI8TphDzudmqdDZv6ASWBBJ9-lu5Ktu8hiq,94 [2025-11-11 16:10:59] DEBUG SESSION STATUS: 2 [2025-11-11 16:10:59] Negocio en sesión: 17.612.457-1 [2025-11-11 16:10:59] Nombre: Mis dos princesas [2025-11-11 16:10:59] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:10:59] Conexión exitosa a la base de datos [2025-11-11 16:10:59] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-11 16:10:59] Buscando producto con código/nombre: pedi [2025-11-11 16:10:59] DEBUG: Código recibido: 'pedi' (longitud: 4) [2025-11-11 16:10:59] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:10:59] No se encontró producto_id para el código exacto 'pedi'. Intentando búsqueda parcial... [2025-11-11 16:10:59] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:10:59] Códigos parciales encontrados: 0 [2025-11-11 16:10:59] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:10:59] Productos encontrados por nombre: 0 [2025-11-11 16:10:59] No se encontró ningún producto con stock por ningún método [2025-11-11 16:10:59] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 16:11:14] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:11:14] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:11:14] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:11:14] DEBUG SESSION: {"last_regeneration":1762888264,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:11:14] DEBUG SESSION ID: crq2brd81o7tguik5j38o9l2c0 [2025-11-11 16:11:14] DEBUG SESSION STATUS: 2 [2025-11-11 16:11:14] Negocio en sesión: 78.216.219-5 [2025-11-11 16:11:14] Nombre: SGB-ERP SpA [2025-11-11 16:11:14] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:11:14] Conexión exitosa a la base de datos [2025-11-11 16:11:14] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:11:14] Buscando producto con código/nombre: pedi [2025-11-11 16:11:14] DEBUG: Código recibido: 'pedi' (longitud: 4) [2025-11-11 16:11:14] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:11:14] No se encontró producto_id para el código exacto 'pedi'. Intentando búsqueda parcial... [2025-11-11 16:11:14] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:11:14] Códigos parciales encontrados: 0 [2025-11-11 16:11:14] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:11:14] Productos encontrados por nombre: 7 [2025-11-11 16:11:14] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 16:11:14] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 16:11:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:14] Códigos encontrados para ID 151: 3 [2025-11-11 16:11:14] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 16:11:14] Códigos con stock disponible: 3 [2025-11-11 16:11:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 16:11:14] Stock total calculado para ID 151: 180 [2025-11-11 16:11:14] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 16:11:14] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 16:11:14] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 16:11:14] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 16:11:14] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:14] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 16:11:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:14] Códigos encontrados para ID 153: 1 [2025-11-11 16:11:14] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:11:14] Códigos con stock disponible: 1 [2025-11-11 16:11:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:14] Stock total calculado para ID 153: 25 [2025-11-11 16:11:14] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:14] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:11:14] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 16:11:14] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:11:14] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:14] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 16:11:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:14] Códigos encontrados para ID 154: 1 [2025-11-11 16:11:14] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:11:14] Códigos con stock disponible: 1 [2025-11-11 16:11:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:14] Stock total calculado para ID 154: 30 [2025-11-11 16:11:14] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:14] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:11:14] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 16:11:14] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:11:14] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:14] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 16:11:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:14] Códigos encontrados para ID 155: 1 [2025-11-11 16:11:14] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:11:14] Códigos con stock disponible: 1 [2025-11-11 16:11:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:14] Stock total calculado para ID 155: 20 [2025-11-11 16:11:14] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:14] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:11:14] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 16:11:14] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:11:14] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:14] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 16:11:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:14] Códigos encontrados para ID 160: 1 [2025-11-11 16:11:14] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:11:14] Códigos con stock disponible: 1 [2025-11-11 16:11:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:14] Stock total calculado para ID 160: 30 [2025-11-11 16:11:14] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:14] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:11:14] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 16:11:14] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:11:14] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:14] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 16:11:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:14] Códigos encontrados para ID 161: 1 [2025-11-11 16:11:14] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:11:14] Códigos con stock disponible: 1 [2025-11-11 16:11:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:14] Stock total calculado para ID 161: 25 [2025-11-11 16:11:14] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:14] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:11:14] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 16:11:14] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:11:14] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:14] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 16:11:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:14] Códigos encontrados para ID 162: 1 [2025-11-11 16:11:14] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:11:14] Códigos con stock disponible: 1 [2025-11-11 16:11:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:14] Stock total calculado para ID 162: 20 [2025-11-11 16:11:14] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:14] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:11:14] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 16:11:14] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:11:14] Se encontraron 7 resultados en total. [2025-11-11 16:11:14] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 16:11:14] Imágenes agregadas: 7 productos con imagen [2025-11-11 16:11:14] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 16:11:19] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:11:19] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:11:19] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:11:19] DEBUG SESSION: {"last_regeneration":1762888264,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:11:19] DEBUG SESSION ID: crq2brd81o7tguik5j38o9l2c0 [2025-11-11 16:11:19] DEBUG SESSION STATUS: 2 [2025-11-11 16:11:19] Negocio en sesión: 78.216.219-5 [2025-11-11 16:11:19] Nombre: SGB-ERP SpA [2025-11-11 16:11:19] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:11:19] Conexión exitosa a la base de datos [2025-11-11 16:11:19] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:11:19] Buscando producto con código/nombre: whis [2025-11-11 16:11:19] DEBUG: Código recibido: 'whis' (longitud: 4) [2025-11-11 16:11:19] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:11:19] No se encontró producto_id para el código exacto 'whis'. Intentando búsqueda parcial... [2025-11-11 16:11:19] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:11:19] Códigos parciales encontrados: 0 [2025-11-11 16:11:19] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:11:19] Productos encontrados por nombre: 3 [2025-11-11 16:11:19] Procesando producto encontrado por nombre: {"id":146,"codigo":"7801234567890","nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:19] Usando lote específico detectado: ninguno para producto ID: 146 [2025-11-11 16:11:19] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:19] Códigos encontrados para ID 146: 1 [2025-11-11 16:11:19] Detalle de códigos: [{"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null}] [2025-11-11 16:11:19] Códigos con stock disponible: 1 [2025-11-11 16:11:19] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:19] Stock total calculado para ID 146: 50 [2025-11-11 16:11:19] Producto NORMAL ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:19] Usando primer código disponible en orden FIFO para ID 146: {"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null} [2025-11-11 16:11:19] Producto por nombre agregado a resultados (ID: 146) [2025-11-11 16:11:19] Datos finales del producto: {"id":146,"codigo":"7801234567890","nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":137,"codigo":"7801234567890","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 16:11:19] Procesando producto encontrado por nombre: {"id":147,"codigo":"7801234567891","nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"45.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:19] Usando lote específico detectado: ninguno para producto ID: 147 [2025-11-11 16:11:19] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:19] Códigos encontrados para ID 147: 1 [2025-11-11 16:11:19] Detalle de códigos: [{"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null}] [2025-11-11 16:11:19] Códigos con stock disponible: 1 [2025-11-11 16:11:19] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:19] Stock total calculado para ID 147: 45 [2025-11-11 16:11:19] Producto NORMAL ID: 147 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:19] Usando primer código disponible en orden FIFO para ID 147: {"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null} [2025-11-11 16:11:19] Producto por nombre agregado a resultados (ID: 147) [2025-11-11 16:11:19] Datos finales del producto: {"id":147,"codigo":"7801234567891","nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":45,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"45.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":138,"codigo":"7801234567891","tipo_codigo":"manual","cantidad":"45.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"45 un","stock_disponible":true} [2025-11-11 16:11:19] Procesando producto encontrado por nombre: {"id":148,"codigo":"7801234567892","nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"40.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:11:19] Usando lote específico detectado: ninguno para producto ID: 148 [2025-11-11 16:11:19] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:11:19] Códigos encontrados para ID 148: 1 [2025-11-11 16:11:19] Detalle de códigos: [{"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null}] [2025-11-11 16:11:19] Códigos con stock disponible: 1 [2025-11-11 16:11:19] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:11:19] Stock total calculado para ID 148: 40 [2025-11-11 16:11:19] Producto NORMAL ID: 148 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:11:19] Usando primer código disponible en orden FIFO para ID 148: {"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null} [2025-11-11 16:11:19] Producto por nombre agregado a resultados (ID: 148) [2025-11-11 16:11:19] Datos finales del producto: {"id":148,"codigo":"7801234567892","nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Whiskas","tipo_nombre":"Alimento gatos","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"40.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":139,"codigo":"7801234567892","tipo_codigo":"manual","cantidad":"40.00","fecha_vencimiento":null}],"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 16:11:19] Se encontraron 3 resultados en total. [2025-11-11 16:11:19] Obteniendo imágenes para productos: 146, 147, 148 [2025-11-11 16:11:19] Imágenes agregadas: 3 productos con imagen [2025-11-11 16:11:19] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 3 resultados) === [2025-11-11 16:16:50] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:16:50] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:16:50] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:16:50] DEBUG SESSION: {"last_regeneration":1762888264,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:16:50] DEBUG SESSION ID: crq2brd81o7tguik5j38o9l2c0 [2025-11-11 16:16:50] DEBUG SESSION STATUS: 2 [2025-11-11 16:16:50] Negocio en sesión: 78.216.219-5 [2025-11-11 16:16:50] Nombre: SGB-ERP SpA [2025-11-11 16:16:50] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:16:50] Conexión exitosa a la base de datos [2025-11-11 16:16:50] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:16:50] Buscando producto con código/nombre: pedi [2025-11-11 16:16:50] DEBUG: Código recibido: 'pedi' (longitud: 4) [2025-11-11 16:16:50] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:16:50] No se encontró producto_id para el código exacto 'pedi'. Intentando búsqueda parcial... [2025-11-11 16:16:50] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:16:50] Códigos parciales encontrados: 0 [2025-11-11 16:16:50] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:16:50] Productos encontrados por nombre: 7 [2025-11-11 16:16:50] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 16:16:50] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 16:16:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:50] Códigos encontrados para ID 151: 3 [2025-11-11 16:16:50] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 16:16:50] Códigos con stock disponible: 3 [2025-11-11 16:16:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 16:16:50] Stock total calculado para ID 151: 180 [2025-11-11 16:16:50] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 16:16:50] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 16:16:50] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 16:16:50] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 16:16:50] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:50] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 16:16:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:50] Códigos encontrados para ID 153: 1 [2025-11-11 16:16:50] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:16:50] Códigos con stock disponible: 1 [2025-11-11 16:16:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:50] Stock total calculado para ID 153: 25 [2025-11-11 16:16:50] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:50] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:16:50] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 16:16:50] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:16:50] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:50] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 16:16:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:50] Códigos encontrados para ID 154: 1 [2025-11-11 16:16:50] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:16:50] Códigos con stock disponible: 1 [2025-11-11 16:16:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:50] Stock total calculado para ID 154: 30 [2025-11-11 16:16:50] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:50] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:16:50] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 16:16:50] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:16:50] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:50] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 16:16:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:50] Códigos encontrados para ID 155: 1 [2025-11-11 16:16:50] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:16:50] Códigos con stock disponible: 1 [2025-11-11 16:16:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:50] Stock total calculado para ID 155: 20 [2025-11-11 16:16:50] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:50] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:16:50] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 16:16:50] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:16:50] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:50] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 16:16:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:50] Códigos encontrados para ID 160: 1 [2025-11-11 16:16:50] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:16:50] Códigos con stock disponible: 1 [2025-11-11 16:16:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:50] Stock total calculado para ID 160: 30 [2025-11-11 16:16:50] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:50] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:16:50] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 16:16:50] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:16:50] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:50] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 16:16:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:50] Códigos encontrados para ID 161: 1 [2025-11-11 16:16:50] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:16:50] Códigos con stock disponible: 1 [2025-11-11 16:16:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:50] Stock total calculado para ID 161: 25 [2025-11-11 16:16:50] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:50] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:16:50] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 16:16:50] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:16:50] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:50] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 16:16:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:50] Códigos encontrados para ID 162: 1 [2025-11-11 16:16:50] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:16:50] Códigos con stock disponible: 1 [2025-11-11 16:16:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:50] Stock total calculado para ID 162: 20 [2025-11-11 16:16:50] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:50] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:16:50] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 16:16:50] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:16:50] Se encontraron 7 resultados en total. [2025-11-11 16:16:50] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 16:16:50] Imágenes agregadas: 7 productos con imagen [2025-11-11 16:16:50] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 16:16:59] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:16:59] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:16:59] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:16:59] DEBUG SESSION: {"last_regeneration":1762888264,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 16:16:59] DEBUG SESSION ID: crq2brd81o7tguik5j38o9l2c0 [2025-11-11 16:16:59] DEBUG SESSION STATUS: 2 [2025-11-11 16:16:59] Negocio en sesión: 78.216.219-5 [2025-11-11 16:16:59] Nombre: SGB-ERP SpA [2025-11-11 16:16:59] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:16:59] Conexión exitosa a la base de datos [2025-11-11 16:16:59] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:16:59] Buscando producto con código/nombre: pedi [2025-11-11 16:16:59] DEBUG: Código recibido: 'pedi' (longitud: 4) [2025-11-11 16:16:59] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 16:16:59] No se encontró producto_id para el código exacto 'pedi'. Intentando búsqueda parcial... [2025-11-11 16:16:59] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 16:16:59] Códigos parciales encontrados: 0 [2025-11-11 16:16:59] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 16:16:59] Productos encontrados por nombre: 7 [2025-11-11 16:16:59] Procesando producto encontrado por nombre: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"60.00","cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente"} [2025-11-11 16:16:59] Usando lote específico detectado: ninguno para producto ID: 151 [2025-11-11 16:16:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:59] Códigos encontrados para ID 151: 3 [2025-11-11 16:16:59] Detalle de códigos: [{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}] [2025-11-11 16:16:59] Códigos con stock disponible: 3 [2025-11-11 16:16:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='diferente', es_producto_especial=false [2025-11-11 16:16:59] Stock total calculado para ID 151: 180 [2025-11-11 16:16:59] Producto NORMAL ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 16:16:59] Usando primer código disponible en orden FIFO para ID 151: {"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null} [2025-11-11 16:16:59] Producto por nombre agregado a resultados (ID: 151) [2025-11-11 16:16:59] Datos finales del producto: {"id":151,"codigo":"7801234567900","nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","tipo_codigo":"diferente","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":"7801234567901||diferente;;7801234567902||diferente","cantidad_codigo":"60.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":145,"codigo":"7801234567900","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":146,"codigo":"7801234567901","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null},{"id":147,"codigo":"7801234567902","tipo_codigo":"diferente","cantidad":"60.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 16:16:59] Procesando producto encontrado por nombre: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:59] Usando lote específico detectado: ninguno para producto ID: 153 [2025-11-11 16:16:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:59] Códigos encontrados para ID 153: 1 [2025-11-11 16:16:59] Detalle de códigos: [{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:16:59] Códigos con stock disponible: 1 [2025-11-11 16:16:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:59] Stock total calculado para ID 153: 25 [2025-11-11 16:16:59] Producto NORMAL ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:59] Usando primer código disponible en orden FIFO para ID 153: {"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:16:59] Producto por nombre agregado a resultados (ID: 153) [2025-11-11 16:16:59] Datos finales del producto: {"id":153,"codigo":"7801234567905","nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":150,"codigo":"7801234567905","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:16:59] Procesando producto encontrado por nombre: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:59] Usando lote específico detectado: ninguno para producto ID: 154 [2025-11-11 16:16:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:59] Códigos encontrados para ID 154: 1 [2025-11-11 16:16:59] Detalle de códigos: [{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:16:59] Códigos con stock disponible: 1 [2025-11-11 16:16:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:59] Stock total calculado para ID 154: 30 [2025-11-11 16:16:59] Producto NORMAL ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:59] Usando primer código disponible en orden FIFO para ID 154: {"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:16:59] Producto por nombre agregado a resultados (ID: 154) [2025-11-11 16:16:59] Datos finales del producto: {"id":154,"codigo":"7801234567906","nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":151,"codigo":"7801234567906","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:16:59] Procesando producto encontrado por nombre: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:59] Usando lote específico detectado: ninguno para producto ID: 155 [2025-11-11 16:16:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:59] Códigos encontrados para ID 155: 1 [2025-11-11 16:16:59] Detalle de códigos: [{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:16:59] Códigos con stock disponible: 1 [2025-11-11 16:16:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:59] Stock total calculado para ID 155: 20 [2025-11-11 16:16:59] Producto NORMAL ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:59] Usando primer código disponible en orden FIFO para ID 155: {"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:16:59] Producto por nombre agregado a resultados (ID: 155) [2025-11-11 16:16:59] Datos finales del producto: {"id":155,"codigo":"7801234567907","nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Alimento perros","categoria_nombre":"Mascotas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":152,"codigo":"7801234567907","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:16:59] Procesando producto encontrado por nombre: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"30.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:59] Usando lote específico detectado: ninguno para producto ID: 160 [2025-11-11 16:16:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:59] Códigos encontrados para ID 160: 1 [2025-11-11 16:16:59] Detalle de códigos: [{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}] [2025-11-11 16:16:59] Códigos con stock disponible: 1 [2025-11-11 16:16:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:59] Stock total calculado para ID 160: 30 [2025-11-11 16:16:59] Producto NORMAL ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:59] Usando primer código disponible en orden FIFO para ID 160: {"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null} [2025-11-11 16:16:59] Producto por nombre agregado a resultados (ID: 160) [2025-11-11 16:16:59] Datos finales del producto: {"id":160,"codigo":"7801234567912","nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"30.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":159,"codigo":"7801234567912","tipo_codigo":"manual","cantidad":"30.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 16:16:59] Procesando producto encontrado por nombre: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"25.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:59] Usando lote específico detectado: ninguno para producto ID: 161 [2025-11-11 16:16:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:59] Códigos encontrados para ID 161: 1 [2025-11-11 16:16:59] Detalle de códigos: [{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}] [2025-11-11 16:16:59] Códigos con stock disponible: 1 [2025-11-11 16:16:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:59] Stock total calculado para ID 161: 25 [2025-11-11 16:16:59] Producto NORMAL ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:59] Usando primer código disponible en orden FIFO para ID 161: {"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null} [2025-11-11 16:16:59] Producto por nombre agregado a resultados (ID: 161) [2025-11-11 16:16:59] Datos finales del producto: {"id":161,"codigo":"7801234567913","nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"25.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":160,"codigo":"7801234567913","tipo_codigo":"manual","cantidad":"25.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 16:16:59] Procesando producto encontrado por nombre: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 16:16:59] Usando lote específico detectado: ninguno para producto ID: 162 [2025-11-11 16:16:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 16:16:59] Códigos encontrados para ID 162: 1 [2025-11-11 16:16:59] Detalle de códigos: [{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-11 16:16:59] Códigos con stock disponible: 1 [2025-11-11 16:16:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 16:16:59] Stock total calculado para ID 162: 20 [2025-11-11 16:16:59] Producto NORMAL ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 16:16:59] Usando primer código disponible en orden FIFO para ID 162: {"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-11 16:16:59] Producto por nombre agregado a resultados (ID: 162) [2025-11-11 16:16:59] Datos finales del producto: {"id":162,"codigo":"7801234567914","nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Pedigree","tipo_nombre":"Snacks de prote\u00ednas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":161,"codigo":"7801234567914","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 16:16:59] Se encontraron 7 resultados en total. [2025-11-11 16:16:59] Obteniendo imágenes para productos: 151, 153, 154, 155, 160, 161, 162 [2025-11-11 16:16:59] Imágenes agregadas: 7 productos con imagen [2025-11-11 16:16:59] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-11 16:31:28] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 16:31:28] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 16:31:28] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 16:31:28] DEBUG SESSION: {"last_regeneration":1762888264,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":19,"sesion_caja_id":19,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido."} [2025-11-11 16:31:28] DEBUG SESSION ID: crq2brd81o7tguik5j38o9l2c0 [2025-11-11 16:31:28] DEBUG SESSION STATUS: 2 [2025-11-11 16:31:28] Negocio en sesión: 78.216.219-5 [2025-11-11 16:31:28] Nombre: SGB-ERP SpA [2025-11-11 16:31:28] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 16:31:28] Conexión exitosa a la base de datos [2025-11-11 16:31:28] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 16:31:28] Buscando producto con código/nombre: * [2025-11-11 16:31:28] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 16:31:28] Solicitud para mostrar todos los productos [2025-11-11 16:31:28] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 16:31:28] Productos encontrados: 17 [2025-11-11 16:31:28] Producto 0: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 1: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 2: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 3: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 4: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 5: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 6: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 16:31:28] Producto 7: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 8: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 16:31:28] Producto 9: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 10: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 11: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 16:31:28] Producto 12: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 16:31:28] Producto 13: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 14: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 15: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 16:31:28] Producto 16: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 16:31:28] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 16:31:28] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 16:31:28] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 16:31:28] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 16:31:28] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 16:31:28] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 16:31:28] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 16:31:28] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 16:31:28] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 16:31:28] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 16:31:28] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 16:31:28] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 16:31:28] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 16:31:28] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 16:31:28] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 16:31:28] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 16:31:28] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 16:31:28] Obteniendo imágenes para todos los productos: 17 [2025-11-11 16:31:28] Imágenes agregadas (mostrar todos): 17 productos con imagen [2025-11-11 16:31:28] Total de productos únicos encontrados: 17 [2025-11-11 17:21:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:21:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:21:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:21:06] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido."} [2025-11-11 17:21:06] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:21:06] DEBUG SESSION STATUS: 2 [2025-11-11 17:21:06] Negocio en sesión: 78.216.219-5 [2025-11-11 17:21:06] Nombre: SGB-ERP SpA [2025-11-11 17:21:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:21:06] Conexión exitosa a la base de datos [2025-11-11 17:21:06] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:21:06] Buscando producto con código/nombre: 7 [2025-11-11 17:21:06] DEBUG: Código recibido: '7' (longitud: 1) [2025-11-11 17:21:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:21:06] No se encontró producto_id para el código exacto '7'. Intentando búsqueda parcial... [2025-11-11 17:21:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:21:06] Códigos parciales encontrados: 20 [2025-11-11 17:21:06] Procesando código parcial: 7801234567901 (ID: 151) [2025-11-11 17:21:06] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:21:06] Añadido producto con código parcial: {"id":151,"nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567901","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":60,"fecha_vencimiento":null,"codigo_barras_id":146,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 17:21:06] Procesando código parcial: 7898591453212 (ID: 103) [2025-11-11 17:21:06] Procesando código parcial: 7801234567907 (ID: 155) [2025-11-11 17:21:06] Producto ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:06] Añadido producto con código parcial: {"id":155,"nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567907","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":152,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:21:06] Procesando código parcial: 7801234567892 (ID: 148) [2025-11-11 17:21:06] Producto ID: 148 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:06] Añadido producto con código parcial: {"id":148,"nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567892","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":40,"fecha_vencimiento":null,"codigo_barras_id":139,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:21:06] Procesando código parcial: 7801234567911 (ID: 159) [2025-11-11 17:21:06] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:21:06] Añadido producto con código parcial: {"id":159,"nombre":"Puppy para Cachorros - Varios Sabores","precio_venta":"28000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":60,"cantidad_por_unidad":"1.00","marca_nombre":"Royal Canin","tipo_control_peso":"riguroso","codigo":"7801234567911","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":15,"fecha_vencimiento":null,"codigo_barras_id":158,"precio":"28000.00","marca_logo":"https:\/\/logo.clearbit.com\/royalcanin.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"60 un","stock_disponible":true} [2025-11-11 17:21:06] Procesando código parcial: 7801234567900 (ID: 151) [2025-11-11 17:21:06] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:21:07] Producto con código parcial ya procesado (ID: 151), omitiendo duplicado [2025-11-11 17:21:07] Procesando código parcial: 7801234567906 (ID: 154) [2025-11-11 17:21:07] Producto ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:07] Añadido producto con código parcial: {"id":154,"nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567906","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":30,"fecha_vencimiento":null,"codigo_barras_id":151,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 17:21:07] Procesando código parcial: 7801234567891 (ID: 147) [2025-11-11 17:21:07] Producto ID: 147 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:07] Añadido producto con código parcial: {"id":147,"nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":45,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567891","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":45,"fecha_vencimiento":null,"codigo_barras_id":138,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"45 un","stock_disponible":true} [2025-11-11 17:21:07] Procesando código parcial: 7801234567910 (ID: 159) [2025-11-11 17:21:07] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:21:07] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:21:07] Procesando código parcial: 7801234567899 (ID: 150) [2025-11-11 17:21:07] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:21:07] Añadido producto con código parcial: {"id":150,"nombre":"Arena Sanitaria para Gatos Premium - Varios Tama\u00f1os","precio_venta":"4500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Gen\u00e9rica","tipo_control_peso":"riguroso","codigo":"7801234567899","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":144,"precio":"4500.00","marca_logo":"https:\/\/cdnx.jumpseller.com\/andesphotostore\/image\/5517043\/Marca-Generica-Andes-Photo.png.png?1556576009","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:21:07] Procesando código parcial: 7801234567905 (ID: 153) [2025-11-11 17:21:07] Producto ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:07] Añadido producto con código parcial: {"id":153,"nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567905","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":150,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:21:07] Procesando código parcial: 7801234567890 (ID: 146) [2025-11-11 17:21:07] Producto ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:07] Añadido producto con código parcial: {"id":146,"nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567890","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":137,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:21:07] Procesando código parcial: 7801234567909 (ID: 159) [2025-11-11 17:21:07] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:21:07] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:21:07] Procesando código parcial: 7801234567898 (ID: 150) [2025-11-11 17:21:07] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:21:07] Producto con código parcial ya procesado (ID: 150), omitiendo duplicado [2025-11-11 17:21:07] Procesando código parcial: 7801234567904 (ID: 152) [2025-11-11 17:21:07] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:21:07] Añadido producto con código parcial: {"id":152,"nombre":"Collar Antipulgas para Perros - Varios Tama\u00f1os","precio_venta":"12000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Seresto","tipo_control_peso":"riguroso","codigo":"7801234567904","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":149,"precio":"12000.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcT0u1-Fh_hdn27R2xBU5PHgT-B2LsCgBkJLkA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:21:07] Procesando código parcial: 8410525151743 (ID: 106) [2025-11-11 17:21:07] Procesando código parcial: 7801234567908 (ID: 159) [2025-11-11 17:21:07] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:21:07] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:21:07] Procesando código parcial: 7801234567897 (ID: 149) [2025-11-11 17:21:07] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:21:07] Añadido producto con código parcial: {"id":149,"nombre":"Shampoo para Perros Antipulgas - Varios Tama\u00f1os","precio_venta":"8500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":96,"cantidad_por_unidad":"1.00","marca_nombre":"Frontline","tipo_control_peso":"riguroso","codigo":"7801234567897","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":32,"fecha_vencimiento":null,"codigo_barras_id":142,"precio":"8500.00","marca_logo":"https:\/\/static.miscota.com\/media\/1\/photos\/features\/010\/014718\/frontline-spray-logo-spray_1.PNG","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"96 un","stock_disponible":true} [2025-11-11 17:21:07] Procesando código parcial: 7801234567914 (ID: 162) [2025-11-11 17:21:07] Producto ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:07] Añadido producto con código parcial: {"id":162,"nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567914","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":161,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:21:07] Procesando código parcial: 7801234567903 (ID: 152) [2025-11-11 17:21:07] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:21:07] Producto con código parcial ya procesado (ID: 152), omitiendo duplicado [2025-11-11 17:21:07] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:21:07] Productos encontrados por nombre: 1 [2025-11-11 17:21:07] Procesando producto encontrado por nombre: {"id":163,"codigo":"17628897196364","nombre":"7UP 2 Litros","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:21:07] Usando lote específico detectado: ninguno para producto ID: 163 [2025-11-11 17:21:07] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:21:07] Códigos encontrados para ID 163: 1 [2025-11-11 17:21:07] Detalle de códigos: [{"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"}] [2025-11-11 17:21:07] Códigos con stock disponible: 1 [2025-11-11 17:21:07] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:21:07] Stock total calculado para ID 163: 1 [2025-11-11 17:21:07] Producto NORMAL ID: 163 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:07] Usando primer código disponible en orden FIFO para ID 163: {"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"} [2025-11-11 17:21:07] Producto por nombre agregado a resultados (ID: 163) [2025-11-11 17:21:07] Datos finales del producto: {"id":163,"codigo":"17628897196364","nombre":"7UP 2 Litros","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-12","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:21:07] Se encontraron 13 resultados en total. [2025-11-11 17:21:07] Obteniendo imágenes para productos: 151, 155, 148, 159, 154, 147, 150, 153, 146, 152, 149, 162, 163 [2025-11-11 17:21:07] Imágenes agregadas: 13 productos con imagen [2025-11-11 17:21:07] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 13 resultados) === [2025-11-11 17:21:23] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:21:23] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:21:23] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:21:23] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido."} [2025-11-11 17:21:23] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:21:23] DEBUG SESSION STATUS: 2 [2025-11-11 17:21:23] Negocio en sesión: 78.216.219-5 [2025-11-11 17:21:23] Nombre: SGB-ERP SpA [2025-11-11 17:21:23] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:21:23] Conexión exitosa a la base de datos [2025-11-11 17:21:23] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:21:23] Buscando producto con código/nombre: 7up [2025-11-11 17:21:23] DEBUG: Código recibido: '7up' (longitud: 3) [2025-11-11 17:21:23] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:21:23] No se encontró producto_id para el código exacto '7up'. Intentando búsqueda parcial... [2025-11-11 17:21:23] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:21:23] Códigos parciales encontrados: 0 [2025-11-11 17:21:23] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:21:23] Productos encontrados por nombre: 1 [2025-11-11 17:21:23] Procesando producto encontrado por nombre: {"id":163,"codigo":"17628897196364","nombre":"7UP 2 Litros","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:21:23] Usando lote específico detectado: ninguno para producto ID: 163 [2025-11-11 17:21:23] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:21:23] Códigos encontrados para ID 163: 1 [2025-11-11 17:21:23] Detalle de códigos: [{"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"}] [2025-11-11 17:21:23] Códigos con stock disponible: 1 [2025-11-11 17:21:23] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:21:23] Stock total calculado para ID 163: 1 [2025-11-11 17:21:23] Producto NORMAL ID: 163 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:23] Usando primer código disponible en orden FIFO para ID 163: {"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"} [2025-11-11 17:21:23] Producto por nombre agregado a resultados (ID: 163) [2025-11-11 17:21:23] Datos finales del producto: {"id":163,"codigo":"17628897196364","nombre":"7UP 2 Litros","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-12","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:21:23] Se encontraron 1 resultados en total. [2025-11-11 17:21:23] Obteniendo imágenes para productos: 163 [2025-11-11 17:21:23] Imágenes agregadas: 1 productos con imagen [2025-11-11 17:21:23] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 17:21:29] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:21:29] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:21:29] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:21:29] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido."} [2025-11-11 17:21:29] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:21:29] DEBUG SESSION STATUS: 2 [2025-11-11 17:21:29] Negocio en sesión: 78.216.219-5 [2025-11-11 17:21:29] Nombre: SGB-ERP SpA [2025-11-11 17:21:29] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:21:29] Conexión exitosa a la base de datos [2025-11-11 17:21:29] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:21:29] Buscando producto con código/nombre: 7up [2025-11-11 17:21:29] DEBUG: Código recibido: '7up' (longitud: 3) [2025-11-11 17:21:29] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:21:29] No se encontró producto_id para el código exacto '7up'. Intentando búsqueda parcial... [2025-11-11 17:21:29] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:21:29] Códigos parciales encontrados: 0 [2025-11-11 17:21:29] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:21:29] Productos encontrados por nombre: 1 [2025-11-11 17:21:29] Procesando producto encontrado por nombre: {"id":163,"codigo":"17628897196364","nombre":"7UP 2 Litros","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:21:29] Usando lote específico detectado: ninguno para producto ID: 163 [2025-11-11 17:21:29] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:21:29] Códigos encontrados para ID 163: 1 [2025-11-11 17:21:29] Detalle de códigos: [{"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"}] [2025-11-11 17:21:29] Códigos con stock disponible: 1 [2025-11-11 17:21:29] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:21:29] Stock total calculado para ID 163: 1 [2025-11-11 17:21:29] Producto NORMAL ID: 163 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:29] Usando primer código disponible en orden FIFO para ID 163: {"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"} [2025-11-11 17:21:29] Producto por nombre agregado a resultados (ID: 163) [2025-11-11 17:21:29] Datos finales del producto: {"id":163,"codigo":"17628897196364","nombre":"7UP 2 Litros","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-12","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:21:29] Se encontraron 1 resultados en total. [2025-11-11 17:21:29] Obteniendo imágenes para productos: 163 [2025-11-11 17:21:29] Imágenes agregadas: 1 productos con imagen [2025-11-11 17:21:29] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 17:21:35] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:21:35] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:21:35] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:21:35] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido."} [2025-11-11 17:21:35] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:21:35] DEBUG SESSION STATUS: 2 [2025-11-11 17:21:35] Negocio en sesión: 78.216.219-5 [2025-11-11 17:21:35] Nombre: SGB-ERP SpA [2025-11-11 17:21:35] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:21:35] Conexión exitosa a la base de datos [2025-11-11 17:21:35] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:21:35] Buscando producto con código/nombre: 7 [2025-11-11 17:21:35] DEBUG: Código recibido: '7' (longitud: 1) [2025-11-11 17:21:35] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:21:35] No se encontró producto_id para el código exacto '7'. Intentando búsqueda parcial... [2025-11-11 17:21:35] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:21:35] Códigos parciales encontrados: 20 [2025-11-11 17:21:35] Procesando código parcial: 7801234567901 (ID: 151) [2025-11-11 17:21:35] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":151,"nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567901","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":60,"fecha_vencimiento":null,"codigo_barras_id":146,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7898591453212 (ID: 103) [2025-11-11 17:21:35] Procesando código parcial: 7801234567907 (ID: 155) [2025-11-11 17:21:35] Producto ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":155,"nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567907","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":152,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567892 (ID: 148) [2025-11-11 17:21:35] Producto ID: 148 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":148,"nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567892","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":40,"fecha_vencimiento":null,"codigo_barras_id":139,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567911 (ID: 159) [2025-11-11 17:21:35] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":159,"nombre":"Puppy para Cachorros - Varios Sabores","precio_venta":"28000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":60,"cantidad_por_unidad":"1.00","marca_nombre":"Royal Canin","tipo_control_peso":"riguroso","codigo":"7801234567911","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":15,"fecha_vencimiento":null,"codigo_barras_id":158,"precio":"28000.00","marca_logo":"https:\/\/logo.clearbit.com\/royalcanin.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"60 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567900 (ID: 151) [2025-11-11 17:21:35] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:21:35] Producto con código parcial ya procesado (ID: 151), omitiendo duplicado [2025-11-11 17:21:35] Procesando código parcial: 7801234567906 (ID: 154) [2025-11-11 17:21:35] Producto ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":154,"nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567906","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":30,"fecha_vencimiento":null,"codigo_barras_id":151,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567891 (ID: 147) [2025-11-11 17:21:35] Producto ID: 147 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":147,"nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":45,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567891","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":45,"fecha_vencimiento":null,"codigo_barras_id":138,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"45 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567910 (ID: 159) [2025-11-11 17:21:35] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:21:35] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:21:35] Procesando código parcial: 7801234567899 (ID: 150) [2025-11-11 17:21:35] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":150,"nombre":"Arena Sanitaria para Gatos Premium - Varios Tama\u00f1os","precio_venta":"4500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Gen\u00e9rica","tipo_control_peso":"riguroso","codigo":"7801234567899","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":144,"precio":"4500.00","marca_logo":"https:\/\/cdnx.jumpseller.com\/andesphotostore\/image\/5517043\/Marca-Generica-Andes-Photo.png.png?1556576009","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567905 (ID: 153) [2025-11-11 17:21:35] Producto ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":153,"nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567905","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":150,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567890 (ID: 146) [2025-11-11 17:21:35] Producto ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":146,"nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567890","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":137,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567909 (ID: 159) [2025-11-11 17:21:35] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:21:35] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:21:35] Procesando código parcial: 7801234567898 (ID: 150) [2025-11-11 17:21:35] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:21:35] Producto con código parcial ya procesado (ID: 150), omitiendo duplicado [2025-11-11 17:21:35] Procesando código parcial: 7801234567904 (ID: 152) [2025-11-11 17:21:35] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":152,"nombre":"Collar Antipulgas para Perros - Varios Tama\u00f1os","precio_venta":"12000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Seresto","tipo_control_peso":"riguroso","codigo":"7801234567904","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":149,"precio":"12000.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcT0u1-Fh_hdn27R2xBU5PHgT-B2LsCgBkJLkA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 8410525151743 (ID: 106) [2025-11-11 17:21:35] Procesando código parcial: 7801234567908 (ID: 159) [2025-11-11 17:21:35] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:21:35] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:21:35] Procesando código parcial: 7801234567897 (ID: 149) [2025-11-11 17:21:35] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":149,"nombre":"Shampoo para Perros Antipulgas - Varios Tama\u00f1os","precio_venta":"8500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":96,"cantidad_por_unidad":"1.00","marca_nombre":"Frontline","tipo_control_peso":"riguroso","codigo":"7801234567897","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":32,"fecha_vencimiento":null,"codigo_barras_id":142,"precio":"8500.00","marca_logo":"https:\/\/static.miscota.com\/media\/1\/photos\/features\/010\/014718\/frontline-spray-logo-spray_1.PNG","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"96 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567914 (ID: 162) [2025-11-11 17:21:35] Producto ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:35] Añadido producto con código parcial: {"id":162,"nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567914","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":161,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:21:35] Procesando código parcial: 7801234567903 (ID: 152) [2025-11-11 17:21:35] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:21:35] Producto con código parcial ya procesado (ID: 152), omitiendo duplicado [2025-11-11 17:21:35] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:21:35] Productos encontrados por nombre: 1 [2025-11-11 17:21:35] Procesando producto encontrado por nombre: {"id":163,"codigo":"17628897196364","nombre":"7UP 2 Litros","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:21:35] Usando lote específico detectado: ninguno para producto ID: 163 [2025-11-11 17:21:35] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:21:35] Códigos encontrados para ID 163: 1 [2025-11-11 17:21:35] Detalle de códigos: [{"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"}] [2025-11-11 17:21:35] Códigos con stock disponible: 1 [2025-11-11 17:21:35] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:21:35] Stock total calculado para ID 163: 1 [2025-11-11 17:21:35] Producto NORMAL ID: 163 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:21:35] Usando primer código disponible en orden FIFO para ID 163: {"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"} [2025-11-11 17:21:35] Producto por nombre agregado a resultados (ID: 163) [2025-11-11 17:21:35] Datos finales del producto: {"id":163,"codigo":"17628897196364","nombre":"7UP 2 Litros","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":null,"tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-12","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":162,"codigo":"17628897196364","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-12"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:21:35] Se encontraron 13 resultados en total. [2025-11-11 17:21:35] Obteniendo imágenes para productos: 151, 155, 148, 159, 154, 147, 150, 153, 146, 152, 149, 162, 163 [2025-11-11 17:21:35] Imágenes agregadas: 13 productos con imagen [2025-11-11 17:21:35] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 13 resultados) === [2025-11-11 17:21:55] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:21:55] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:21:55] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:21:55] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido."} [2025-11-11 17:21:55] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:21:55] DEBUG SESSION STATUS: 2 [2025-11-11 17:21:55] Negocio en sesión: 78.216.219-5 [2025-11-11 17:21:55] Nombre: SGB-ERP SpA [2025-11-11 17:21:55] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:21:55] Conexión exitosa a la base de datos [2025-11-11 17:21:55] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:21:55] Buscando producto con código/nombre: * [2025-11-11 17:21:55] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 17:21:55] Solicitud para mostrar todos los productos [2025-11-11 17:21:55] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 17:21:55] Productos encontrados: 18 [2025-11-11 17:21:55] Producto 0: 7UP 2 Litros - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 1: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 2: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 3: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 4: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 5: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 6: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 7: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 17:21:55] Producto 8: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 9: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 17:21:55] Producto 10: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 11: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 12: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 17:21:55] Producto 13: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 17:21:55] Producto 14: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 15: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 16: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 17:21:55] Producto 17: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 17:21:55] Producto agregado a resultados (ID: 163): 7UP 2 Litros [2025-11-11 17:21:55] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 17:21:55] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 17:21:55] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 17:21:55] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 17:21:55] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 17:21:55] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 17:21:55] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 17:21:55] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 17:21:55] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 17:21:55] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 17:21:55] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 17:21:55] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 17:21:55] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 17:21:55] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 17:21:55] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 17:21:55] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 17:21:55] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 17:21:55] Obteniendo imágenes para todos los productos: 18 [2025-11-11 17:21:55] Imágenes agregadas (mostrar todos): 18 productos con imagen [2025-11-11 17:21:55] Total de productos únicos encontrados: 18 [2025-11-11 17:48:28] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:48:28] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:48:28] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:48:28] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0} [2025-11-11 17:48:28] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:48:28] DEBUG SESSION STATUS: 2 [2025-11-11 17:48:28] Negocio en sesión: 78.216.219-5 [2025-11-11 17:48:28] Nombre: SGB-ERP SpA [2025-11-11 17:48:28] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:48:28] Conexión exitosa a la base de datos [2025-11-11 17:48:28] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:48:28] Buscando producto con código/nombre: 7 [2025-11-11 17:48:28] DEBUG: Código recibido: '7' (longitud: 1) [2025-11-11 17:48:28] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:48:28] No se encontró producto_id para el código exacto '7'. Intentando búsqueda parcial... [2025-11-11 17:48:28] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:48:28] Códigos parciales encontrados: 20 [2025-11-11 17:48:28] Procesando código parcial: 7801234567891 (ID: 147) [2025-11-11 17:48:28] Producto ID: 147 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":147,"nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":45,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567891","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":45,"fecha_vencimiento":null,"codigo_barras_id":138,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"45 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7801234567910 (ID: 159) [2025-11-11 17:48:28] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":159,"nombre":"Puppy para Cachorros - Varios Sabores","precio_venta":"28000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":60,"cantidad_por_unidad":"1.00","marca_nombre":"Royal Canin","tipo_control_peso":"riguroso","codigo":"7801234567910","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":15,"fecha_vencimiento":null,"codigo_barras_id":157,"precio":"28000.00","marca_logo":"https:\/\/logo.clearbit.com\/royalcanin.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"60 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7801234567899 (ID: 150) [2025-11-11 17:48:28] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":150,"nombre":"Arena Sanitaria para Gatos Premium - Varios Tama\u00f1os","precio_venta":"4500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Gen\u00e9rica","tipo_control_peso":"riguroso","codigo":"7801234567899","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":144,"precio":"4500.00","marca_logo":"https:\/\/cdnx.jumpseller.com\/andesphotostore\/image\/5517043\/Marca-Generica-Andes-Photo.png.png?1556576009","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7801234567905 (ID: 153) [2025-11-11 17:48:28] Producto ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":153,"nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567905","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":150,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7801234567890 (ID: 146) [2025-11-11 17:48:28] Producto ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":146,"nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567890","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":137,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7801234567909 (ID: 159) [2025-11-11 17:48:28] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:48:28] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:48:28] Procesando código parcial: 7801234567898 (ID: 150) [2025-11-11 17:48:28] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:48:28] Producto con código parcial ya procesado (ID: 150), omitiendo duplicado [2025-11-11 17:48:28] Procesando código parcial: 7801234567904 (ID: 152) [2025-11-11 17:48:28] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":152,"nombre":"Collar Antipulgas para Perros - Varios Tama\u00f1os","precio_venta":"12000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Seresto","tipo_control_peso":"riguroso","codigo":"7801234567904","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":149,"precio":"12000.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcT0u1-Fh_hdn27R2xBU5PHgT-B2LsCgBkJLkA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 8410525151743 (ID: 106) [2025-11-11 17:48:28] Procesando código parcial: 7801234567908 (ID: 159) [2025-11-11 17:48:28] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:48:28] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:48:28] Procesando código parcial: 7801234567897 (ID: 149) [2025-11-11 17:48:28] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":149,"nombre":"Shampoo para Perros Antipulgas - Varios Tama\u00f1os","precio_venta":"8500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":96,"cantidad_por_unidad":"1.00","marca_nombre":"Frontline","tipo_control_peso":"riguroso","codigo":"7801234567897","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":32,"fecha_vencimiento":null,"codigo_barras_id":142,"precio":"8500.00","marca_logo":"https:\/\/static.miscota.com\/media\/1\/photos\/features\/010\/014718\/frontline-spray-logo-spray_1.PNG","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"96 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7801234567914 (ID: 162) [2025-11-11 17:48:28] Producto ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":162,"nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567914","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":161,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7801234567903 (ID: 152) [2025-11-11 17:48:28] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:48:28] Producto con código parcial ya procesado (ID: 152), omitiendo duplicado [2025-11-11 17:48:28] Procesando código parcial: 7898591453274 (ID: 105) [2025-11-11 17:48:28] Procesando código parcial: 7801234567896 (ID: 149) [2025-11-11 17:48:28] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:28] Producto con código parcial ya procesado (ID: 149), omitiendo duplicado [2025-11-11 17:48:28] Procesando código parcial: 7801234567913 (ID: 161) [2025-11-11 17:48:28] Producto ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":161,"nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567913","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":160,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7801234567902 (ID: 151) [2025-11-11 17:48:28] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":151,"nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567902","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":60,"fecha_vencimiento":null,"codigo_barras_id":147,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 17:48:28] Procesando código parcial: 7908228805151 (ID: 104) [2025-11-11 17:48:28] Procesando código parcial: 7801234567895 (ID: 149) [2025-11-11 17:48:28] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:28] Producto con código parcial ya procesado (ID: 149), omitiendo duplicado [2025-11-11 17:48:28] Procesando código parcial: 7801234567912 (ID: 160) [2025-11-11 17:48:28] Producto ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:28] Añadido producto con código parcial: {"id":160,"nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567912","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":30,"fecha_vencimiento":null,"codigo_barras_id":159,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 17:48:28] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:48:28] Productos encontrados por nombre: 1 [2025-11-11 17:48:28] Procesando producto encontrado por nombre: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:48:28] Usando lote específico detectado: ninguno para producto ID: 164 [2025-11-11 17:48:28] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:48:28] Códigos encontrados para ID 164: 1 [2025-11-11 17:48:28] Detalle de códigos: [{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}] [2025-11-11 17:48:28] Códigos con stock disponible: 1 [2025-11-11 17:48:28] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:48:28] Stock total calculado para ID 164: 1 [2025-11-11 17:48:28] Producto NORMAL ID: 164 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:28] Usando primer código disponible en orden FIFO para ID 164: {"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"} [2025-11-11 17:48:28] Producto por nombre agregado a resultados (ID: 164) [2025-11-11 17:48:28] Datos finales del producto: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-11","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:48:28] Se encontraron 12 resultados en total. [2025-11-11 17:48:28] Obteniendo imágenes para productos: 147, 159, 150, 153, 146, 152, 149, 162, 161, 151, 160, 164 [2025-11-11 17:48:28] Imágenes agregadas: 12 productos con imagen [2025-11-11 17:48:28] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 12 resultados) === [2025-11-11 17:48:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:48:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:48:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:48:41] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0} [2025-11-11 17:48:41] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:48:41] DEBUG SESSION STATUS: 2 [2025-11-11 17:48:41] Negocio en sesión: 78.216.219-5 [2025-11-11 17:48:41] Nombre: SGB-ERP SpA [2025-11-11 17:48:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:48:41] Conexión exitosa a la base de datos [2025-11-11 17:48:41] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:48:41] Buscando producto con código/nombre: 7 [2025-11-11 17:48:41] DEBUG: Código recibido: '7' (longitud: 1) [2025-11-11 17:48:41] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:48:41] No se encontró producto_id para el código exacto '7'. Intentando búsqueda parcial... [2025-11-11 17:48:41] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:48:41] Códigos parciales encontrados: 20 [2025-11-11 17:48:41] Procesando código parcial: 7801234567905 (ID: 153) [2025-11-11 17:48:41] Producto ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":153,"nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567905","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":150,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7801234567890 (ID: 146) [2025-11-11 17:48:41] Producto ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":146,"nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567890","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":137,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7801234567909 (ID: 159) [2025-11-11 17:48:41] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":159,"nombre":"Puppy para Cachorros - Varios Sabores","precio_venta":"28000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":60,"cantidad_por_unidad":"1.00","marca_nombre":"Royal Canin","tipo_control_peso":"riguroso","codigo":"7801234567909","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":15,"fecha_vencimiento":null,"codigo_barras_id":156,"precio":"28000.00","marca_logo":"https:\/\/logo.clearbit.com\/royalcanin.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"60 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7801234567898 (ID: 150) [2025-11-11 17:48:41] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":150,"nombre":"Arena Sanitaria para Gatos Premium - Varios Tama\u00f1os","precio_venta":"4500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Gen\u00e9rica","tipo_control_peso":"riguroso","codigo":"7801234567898","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":143,"precio":"4500.00","marca_logo":"https:\/\/cdnx.jumpseller.com\/andesphotostore\/image\/5517043\/Marca-Generica-Andes-Photo.png.png?1556576009","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7801234567904 (ID: 152) [2025-11-11 17:48:41] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":152,"nombre":"Collar Antipulgas para Perros - Varios Tama\u00f1os","precio_venta":"12000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Seresto","tipo_control_peso":"riguroso","codigo":"7801234567904","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":149,"precio":"12000.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcT0u1-Fh_hdn27R2xBU5PHgT-B2LsCgBkJLkA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 8410525151743 (ID: 106) [2025-11-11 17:48:41] Procesando código parcial: 7801234567908 (ID: 159) [2025-11-11 17:48:41] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:48:41] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:48:41] Procesando código parcial: 7801234567897 (ID: 149) [2025-11-11 17:48:41] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":149,"nombre":"Shampoo para Perros Antipulgas - Varios Tama\u00f1os","precio_venta":"8500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":96,"cantidad_por_unidad":"1.00","marca_nombre":"Frontline","tipo_control_peso":"riguroso","codigo":"7801234567897","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":32,"fecha_vencimiento":null,"codigo_barras_id":142,"precio":"8500.00","marca_logo":"https:\/\/static.miscota.com\/media\/1\/photos\/features\/010\/014718\/frontline-spray-logo-spray_1.PNG","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"96 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7801234567914 (ID: 162) [2025-11-11 17:48:41] Producto ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":162,"nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567914","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":161,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7801234567903 (ID: 152) [2025-11-11 17:48:41] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:48:41] Producto con código parcial ya procesado (ID: 152), omitiendo duplicado [2025-11-11 17:48:41] Procesando código parcial: 7898591453274 (ID: 105) [2025-11-11 17:48:41] Procesando código parcial: 7801234567896 (ID: 149) [2025-11-11 17:48:41] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:41] Producto con código parcial ya procesado (ID: 149), omitiendo duplicado [2025-11-11 17:48:41] Procesando código parcial: 7801234567913 (ID: 161) [2025-11-11 17:48:41] Producto ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":161,"nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567913","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":160,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7801234567902 (ID: 151) [2025-11-11 17:48:41] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":151,"nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567902","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":60,"fecha_vencimiento":null,"codigo_barras_id":147,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7908228805151 (ID: 104) [2025-11-11 17:48:41] Procesando código parcial: 7801234567895 (ID: 149) [2025-11-11 17:48:41] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:41] Producto con código parcial ya procesado (ID: 149), omitiendo duplicado [2025-11-11 17:48:41] Procesando código parcial: 7801234567912 (ID: 160) [2025-11-11 17:48:41] Producto ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:41] Añadido producto con código parcial: {"id":160,"nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567912","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":30,"fecha_vencimiento":null,"codigo_barras_id":159,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 17:48:41] Procesando código parcial: 7801234567901 (ID: 151) [2025-11-11 17:48:41] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:48:41] Producto con código parcial ya procesado (ID: 151), omitiendo duplicado [2025-11-11 17:48:41] Procesando código parcial: 7898591453212 (ID: 103) [2025-11-11 17:48:41] Procesando código parcial: 7801234567907 (ID: 155) [2025-11-11 17:48:41] Producto ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:42] Añadido producto con código parcial: {"id":155,"nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567907","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":152,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:48:42] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:48:42] Productos encontrados por nombre: 1 [2025-11-11 17:48:42] Procesando producto encontrado por nombre: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:48:42] Usando lote específico detectado: ninguno para producto ID: 164 [2025-11-11 17:48:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:48:42] Códigos encontrados para ID 164: 1 [2025-11-11 17:48:42] Detalle de códigos: [{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}] [2025-11-11 17:48:42] Códigos con stock disponible: 1 [2025-11-11 17:48:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:48:42] Stock total calculado para ID 164: 1 [2025-11-11 17:48:42] Producto NORMAL ID: 164 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:48:42] Usando primer código disponible en orden FIFO para ID 164: {"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"} [2025-11-11 17:48:42] Producto por nombre agregado a resultados (ID: 164) [2025-11-11 17:48:42] Datos finales del producto: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-11","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:48:42] Se encontraron 12 resultados en total. [2025-11-11 17:48:42] Obteniendo imágenes para productos: 153, 146, 159, 150, 152, 149, 162, 161, 151, 160, 155, 164 [2025-11-11 17:48:42] Imágenes agregadas: 12 productos con imagen [2025-11-11 17:48:42] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 12 resultados) === [2025-11-11 17:50:27] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:50:27] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:50:27] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:50:27] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0} [2025-11-11 17:50:27] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:50:27] DEBUG SESSION STATUS: 2 [2025-11-11 17:50:27] Negocio en sesión: 78.216.219-5 [2025-11-11 17:50:27] Nombre: SGB-ERP SpA [2025-11-11 17:50:27] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:50:27] Conexión exitosa a la base de datos [2025-11-11 17:50:27] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:50:27] Buscando producto con código/nombre: * [2025-11-11 17:50:27] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 17:50:27] Solicitud para mostrar todos los productos [2025-11-11 17:50:27] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 17:50:27] Productos encontrados: 18 [2025-11-11 17:50:27] Producto 0: 7UP 2 LITROS RETORNABLE - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 1: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 2: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 3: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 4: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 5: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 6: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 7: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 17:50:27] Producto 8: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 9: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 17:50:27] Producto 10: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 11: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 12: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 17:50:27] Producto 13: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 17:50:27] Producto 14: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 15: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 16: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 17:50:27] Producto 17: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 17:50:27] Producto agregado a resultados (ID: 164): 7UP 2 LITROS RETORNABLE [2025-11-11 17:50:27] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 17:50:27] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 17:50:27] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 17:50:27] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 17:50:27] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 17:50:27] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 17:50:27] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 17:50:27] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 17:50:27] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 17:50:27] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 17:50:27] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 17:50:27] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 17:50:27] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 17:50:27] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 17:50:27] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 17:50:27] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 17:50:27] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 17:50:27] Obteniendo imágenes para todos los productos: 18 [2025-11-11 17:50:27] Imágenes agregadas (mostrar todos): 18 productos con imagen [2025-11-11 17:50:27] Total de productos únicos encontrados: 18 [2025-11-11 17:50:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:50:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:50:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:50:48] DEBUG SESSION: {"last_regeneration":1762889833,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0} [2025-11-11 17:50:48] DEBUG SESSION ID: gu7srvjnofkd2g80ba105i5rql [2025-11-11 17:50:48] DEBUG SESSION STATUS: 2 [2025-11-11 17:50:48] Negocio en sesión: 78.216.219-5 [2025-11-11 17:50:48] Nombre: SGB-ERP SpA [2025-11-11 17:50:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:50:48] Conexión exitosa a la base de datos [2025-11-11 17:50:48] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:50:48] Buscando producto con código/nombre: 7 [2025-11-11 17:50:48] DEBUG: Código recibido: '7' (longitud: 1) [2025-11-11 17:50:48] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:50:48] No se encontró producto_id para el código exacto '7'. Intentando búsqueda parcial... [2025-11-11 17:50:48] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:50:48] Códigos parciales encontrados: 20 [2025-11-11 17:50:48] Procesando código parcial: 7801234567903 (ID: 152) [2025-11-11 17:50:48] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":152,"nombre":"Collar Antipulgas para Perros - Varios Tama\u00f1os","precio_venta":"12000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Seresto","tipo_control_peso":"riguroso","codigo":"7801234567903","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":148,"precio":"12000.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcT0u1-Fh_hdn27R2xBU5PHgT-B2LsCgBkJLkA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7898591453274 (ID: 105) [2025-11-11 17:50:48] Procesando código parcial: 7801234567896 (ID: 149) [2025-11-11 17:50:48] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":149,"nombre":"Shampoo para Perros Antipulgas - Varios Tama\u00f1os","precio_venta":"8500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":96,"cantidad_por_unidad":"1.00","marca_nombre":"Frontline","tipo_control_peso":"riguroso","codigo":"7801234567896","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":32,"fecha_vencimiento":null,"codigo_barras_id":141,"precio":"8500.00","marca_logo":"https:\/\/static.miscota.com\/media\/1\/photos\/features\/010\/014718\/frontline-spray-logo-spray_1.PNG","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"96 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567913 (ID: 161) [2025-11-11 17:50:48] Producto ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":161,"nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567913","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":160,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567902 (ID: 151) [2025-11-11 17:50:48] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":151,"nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567902","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":60,"fecha_vencimiento":null,"codigo_barras_id":147,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7908228805151 (ID: 104) [2025-11-11 17:50:48] Procesando código parcial: 7801234567895 (ID: 149) [2025-11-11 17:50:48] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:50:48] Producto con código parcial ya procesado (ID: 149), omitiendo duplicado [2025-11-11 17:50:48] Procesando código parcial: 7801234567912 (ID: 160) [2025-11-11 17:50:48] Producto ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":160,"nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567912","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":30,"fecha_vencimiento":null,"codigo_barras_id":159,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567901 (ID: 151) [2025-11-11 17:50:48] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:50:48] Producto con código parcial ya procesado (ID: 151), omitiendo duplicado [2025-11-11 17:50:48] Procesando código parcial: 7898591453212 (ID: 103) [2025-11-11 17:50:48] Procesando código parcial: 7801234567907 (ID: 155) [2025-11-11 17:50:48] Producto ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":155,"nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567907","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":152,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567892 (ID: 148) [2025-11-11 17:50:48] Producto ID: 148 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":148,"nombre":"Alimento H\u00famedo para Gatos Adultos Salm\u00f3n","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567892","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":40,"fecha_vencimiento":null,"codigo_barras_id":139,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567911 (ID: 159) [2025-11-11 17:50:48] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":159,"nombre":"Puppy para Cachorros - Varios Sabores","precio_venta":"28000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":60,"cantidad_por_unidad":"1.00","marca_nombre":"Royal Canin","tipo_control_peso":"riguroso","codigo":"7801234567911","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":15,"fecha_vencimiento":null,"codigo_barras_id":158,"precio":"28000.00","marca_logo":"https:\/\/logo.clearbit.com\/royalcanin.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"60 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567900 (ID: 151) [2025-11-11 17:50:48] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:50:48] Producto con código parcial ya procesado (ID: 151), omitiendo duplicado [2025-11-11 17:50:48] Procesando código parcial: 7801234567906 (ID: 154) [2025-11-11 17:50:48] Producto ID: 154 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":154,"nombre":"Alimento Seco para Perros Adultos - Sabor Carne","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567906","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":30,"fecha_vencimiento":null,"codigo_barras_id":151,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567891 (ID: 147) [2025-11-11 17:50:48] Producto ID: 147 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":147,"nombre":"Alimento H\u00famedo para Gatos Adultos Pollo","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":45,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567891","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":45,"fecha_vencimiento":null,"codigo_barras_id":138,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"45 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567910 (ID: 159) [2025-11-11 17:50:48] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:50:48] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:50:48] Procesando código parcial: 7801234567899 (ID: 150) [2025-11-11 17:50:48] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":150,"nombre":"Arena Sanitaria para Gatos Premium - Varios Tama\u00f1os","precio_venta":"4500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Gen\u00e9rica","tipo_control_peso":"riguroso","codigo":"7801234567899","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":144,"precio":"4500.00","marca_logo":"https:\/\/cdnx.jumpseller.com\/andesphotostore\/image\/5517043\/Marca-Generica-Andes-Photo.png.png?1556576009","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567905 (ID: 153) [2025-11-11 17:50:48] Producto ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":153,"nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567905","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":150,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:50:48] Procesando código parcial: 7801234567890 (ID: 146) [2025-11-11 17:50:48] Producto ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Añadido producto con código parcial: {"id":146,"nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567890","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":137,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:50:48] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:50:48] Productos encontrados por nombre: 1 [2025-11-11 17:50:48] Procesando producto encontrado por nombre: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:50:48] Usando lote específico detectado: ninguno para producto ID: 164 [2025-11-11 17:50:48] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:50:48] Códigos encontrados para ID 164: 1 [2025-11-11 17:50:48] Detalle de códigos: [{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}] [2025-11-11 17:50:48] Códigos con stock disponible: 1 [2025-11-11 17:50:48] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:50:48] Stock total calculado para ID 164: 1 [2025-11-11 17:50:48] Producto NORMAL ID: 164 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:50:48] Usando primer código disponible en orden FIFO para ID 164: {"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"} [2025-11-11 17:50:48] Producto por nombre agregado a resultados (ID: 164) [2025-11-11 17:50:48] Datos finales del producto: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-11","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:50:48] Se encontraron 14 resultados en total. [2025-11-11 17:50:48] Obteniendo imágenes para productos: 152, 149, 161, 151, 160, 155, 148, 159, 154, 147, 150, 153, 146, 164 [2025-11-11 17:50:48] Imágenes agregadas: 14 productos con imagen [2025-11-11 17:50:48] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 14 resultados) === [2025-11-11 17:53:26] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:53:26] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:53:26] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:53:26] DEBUG SESSION: {"last_regeneration":1762894386,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0} [2025-11-11 17:53:26] DEBUG SESSION ID: 79rnsbas4rk4ndj8c879lqrbdt [2025-11-11 17:53:26] DEBUG SESSION STATUS: 2 [2025-11-11 17:53:26] Negocio en sesión: 78.216.219-5 [2025-11-11 17:53:26] Nombre: SGB-ERP SpA [2025-11-11 17:53:26] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:53:26] Conexión exitosa a la base de datos [2025-11-11 17:53:26] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:53:26] Buscando producto con código/nombre: 7up [2025-11-11 17:53:26] DEBUG: Código recibido: '7up' (longitud: 3) [2025-11-11 17:53:26] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:53:26] No se encontró producto_id para el código exacto '7up'. Intentando búsqueda parcial... [2025-11-11 17:53:26] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:53:26] Códigos parciales encontrados: 0 [2025-11-11 17:53:26] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:53:26] Productos encontrados por nombre: 1 [2025-11-11 17:53:26] Procesando producto encontrado por nombre: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:53:26] Usando lote específico detectado: ninguno para producto ID: 164 [2025-11-11 17:53:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:53:26] Códigos encontrados para ID 164: 1 [2025-11-11 17:53:26] Detalle de códigos: [{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}] [2025-11-11 17:53:26] Códigos con stock disponible: 1 [2025-11-11 17:53:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:53:26] Stock total calculado para ID 164: 1 [2025-11-11 17:53:26] Producto NORMAL ID: 164 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:53:26] Usando primer código disponible en orden FIFO para ID 164: {"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"} [2025-11-11 17:53:26] Producto por nombre agregado a resultados (ID: 164) [2025-11-11 17:53:26] Datos finales del producto: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-11","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:53:26] Se encontraron 1 resultados en total. [2025-11-11 17:53:26] Obteniendo imágenes para productos: 164 [2025-11-11 17:53:26] Imágenes agregadas: 1 productos con imagen [2025-11-11 17:53:26] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 17:53:32] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:53:32] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:53:32] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:53:32] DEBUG SESSION: {"last_regeneration":1762894386,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0} [2025-11-11 17:53:32] DEBUG SESSION ID: 79rnsbas4rk4ndj8c879lqrbdt [2025-11-11 17:53:32] DEBUG SESSION STATUS: 2 [2025-11-11 17:53:32] Negocio en sesión: 78.216.219-5 [2025-11-11 17:53:32] Nombre: SGB-ERP SpA [2025-11-11 17:53:32] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:53:32] Conexión exitosa a la base de datos [2025-11-11 17:53:32] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:53:32] Buscando producto con código/nombre: * [2025-11-11 17:53:32] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 17:53:32] Solicitud para mostrar todos los productos [2025-11-11 17:53:32] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 17:53:32] Productos encontrados: 18 [2025-11-11 17:53:32] Producto 0: 7UP 2 LITROS RETORNABLE - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 1: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 2: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 3: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 4: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 5: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 6: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 7: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 17:53:32] Producto 8: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 9: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 17:53:32] Producto 10: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 11: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 12: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 17:53:32] Producto 13: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 17:53:32] Producto 14: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 15: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 16: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 17:53:32] Producto 17: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 17:53:32] Producto agregado a resultados (ID: 164): 7UP 2 LITROS RETORNABLE [2025-11-11 17:53:32] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 17:53:32] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 17:53:32] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 17:53:32] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 17:53:32] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 17:53:32] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 17:53:32] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 17:53:32] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 17:53:32] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 17:53:32] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 17:53:32] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 17:53:32] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 17:53:32] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 17:53:32] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 17:53:32] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 17:53:32] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 17:53:32] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 17:53:32] Obteniendo imágenes para todos los productos: 18 [2025-11-11 17:53:32] Imágenes agregadas (mostrar todos): 18 productos con imagen [2025-11-11 17:53:32] Total de productos únicos encontrados: 18 [2025-11-11 17:53:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:53:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:53:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:53:41] DEBUG SESSION: {"last_regeneration":1762894386,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0} [2025-11-11 17:53:41] DEBUG SESSION ID: 79rnsbas4rk4ndj8c879lqrbdt [2025-11-11 17:53:41] DEBUG SESSION STATUS: 2 [2025-11-11 17:53:41] Negocio en sesión: 78.216.219-5 [2025-11-11 17:53:41] Nombre: SGB-ERP SpA [2025-11-11 17:53:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:53:41] Conexión exitosa a la base de datos [2025-11-11 17:53:41] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:53:41] Buscando producto con código/nombre: 7 [2025-11-11 17:53:41] DEBUG: Código recibido: '7' (longitud: 1) [2025-11-11 17:53:41] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:53:41] No se encontró producto_id para el código exacto '7'. Intentando búsqueda parcial... [2025-11-11 17:53:41] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:53:41] Códigos parciales encontrados: 20 [2025-11-11 17:53:41] Procesando código parcial: 7801234567905 (ID: 153) [2025-11-11 17:53:41] Producto ID: 153 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":153,"nombre":"Alimento Seco para Perros Adultos - Sabor Pollo","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567905","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":150,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7801234567890 (ID: 146) [2025-11-11 17:53:41] Producto ID: 146 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":146,"nombre":"Alimento H\u00famedo para Gatos Adultos At\u00fan","precio_venta":"2500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Whiskas","tipo_control_peso":"riguroso","codigo":"7801234567890","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":50,"fecha_vencimiento":null,"codigo_barras_id":137,"precio":"2500.00","marca_logo":"https:\/\/media.tenor.com\/NhyVjGfeNn8AAAAe\/whiskas.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7801234567909 (ID: 159) [2025-11-11 17:53:41] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":159,"nombre":"Puppy para Cachorros - Varios Sabores","precio_venta":"28000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":60,"cantidad_por_unidad":"1.00","marca_nombre":"Royal Canin","tipo_control_peso":"riguroso","codigo":"7801234567909","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":15,"fecha_vencimiento":null,"codigo_barras_id":156,"precio":"28000.00","marca_logo":"https:\/\/logo.clearbit.com\/royalcanin.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"60 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7801234567898 (ID: 150) [2025-11-11 17:53:41] Producto ID: 150 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":150,"nombre":"Arena Sanitaria para Gatos Premium - Varios Tama\u00f1os","precio_venta":"4500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","marca_nombre":"Gen\u00e9rica","tipo_control_peso":"riguroso","codigo":"7801234567898","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":143,"precio":"4500.00","marca_logo":"https:\/\/cdnx.jumpseller.com\/andesphotostore\/image\/5517043\/Marca-Generica-Andes-Photo.png.png?1556576009","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7801234567904 (ID: 152) [2025-11-11 17:53:41] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":152,"nombre":"Collar Antipulgas para Perros - Varios Tama\u00f1os","precio_venta":"12000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","marca_nombre":"Seresto","tipo_control_peso":"riguroso","codigo":"7801234567904","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":149,"precio":"12000.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcT0u1-Fh_hdn27R2xBU5PHgT-B2LsCgBkJLkA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 8410525151743 (ID: 106) [2025-11-11 17:53:41] Procesando código parcial: 7801234567908 (ID: 159) [2025-11-11 17:53:41] Producto ID: 159 - Tiene lotes: SÍ (cantidad: 4) [2025-11-11 17:53:41] Producto con código parcial ya procesado (ID: 159), omitiendo duplicado [2025-11-11 17:53:41] Procesando código parcial: 7801234567897 (ID: 149) [2025-11-11 17:53:41] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":149,"nombre":"Shampoo para Perros Antipulgas - Varios Tama\u00f1os","precio_venta":"8500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":96,"cantidad_por_unidad":"1.00","marca_nombre":"Frontline","tipo_control_peso":"riguroso","codigo":"7801234567897","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":32,"fecha_vencimiento":null,"codigo_barras_id":142,"precio":"8500.00","marca_logo":"https:\/\/static.miscota.com\/media\/1\/photos\/features\/010\/014718\/frontline-spray-logo-spray_1.PNG","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"96 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7801234567914 (ID: 162) [2025-11-11 17:53:41] Producto ID: 162 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":162,"nombre":"Snack Dentastix Pedigree - Sabor Pollo","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567914","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":161,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7801234567903 (ID: 152) [2025-11-11 17:53:41] Producto ID: 152 - Tiene lotes: SÍ (cantidad: 2) [2025-11-11 17:53:41] Producto con código parcial ya procesado (ID: 152), omitiendo duplicado [2025-11-11 17:53:41] Procesando código parcial: 7898591453274 (ID: 105) [2025-11-11 17:53:41] Procesando código parcial: 7801234567896 (ID: 149) [2025-11-11 17:53:41] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:53:41] Producto con código parcial ya procesado (ID: 149), omitiendo duplicado [2025-11-11 17:53:41] Procesando código parcial: 7801234567913 (ID: 161) [2025-11-11 17:53:41] Producto ID: 161 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":161,"nombre":"Snack Dentastix Pedigree - Sabor Carne","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":25,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567913","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":25,"fecha_vencimiento":null,"codigo_barras_id":160,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"25 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7801234567902 (ID: 151) [2025-11-11 17:53:41] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":151,"nombre":"Snack Dentastix Pedigree - Varios Sabores","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"diferente","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567902","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":60,"fecha_vencimiento":null,"codigo_barras_id":147,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"180 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7908228805151 (ID: 104) [2025-11-11 17:53:41] Procesando código parcial: 7801234567895 (ID: 149) [2025-11-11 17:53:41] Producto ID: 149 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:53:41] Producto con código parcial ya procesado (ID: 149), omitiendo duplicado [2025-11-11 17:53:41] Procesando código parcial: 7801234567912 (ID: 160) [2025-11-11 17:53:41] Producto ID: 160 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":160,"nombre":"Snack Dentastix Pedigree - Sabor Original","precio_venta":"3500.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":30,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567912","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":30,"fecha_vencimiento":null,"codigo_barras_id":159,"precio":"3500.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"30 un","stock_disponible":true} [2025-11-11 17:53:41] Procesando código parcial: 7801234567901 (ID: 151) [2025-11-11 17:53:41] Producto ID: 151 - Tiene lotes: SÍ (cantidad: 3) [2025-11-11 17:53:41] Producto con código parcial ya procesado (ID: 151), omitiendo duplicado [2025-11-11 17:53:41] Procesando código parcial: 7898591453212 (ID: 103) [2025-11-11 17:53:41] Procesando código parcial: 7801234567907 (ID: 155) [2025-11-11 17:53:41] Producto ID: 155 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:53:41] Añadido producto con código parcial: {"id":155,"nombre":"Alimento Seco para Perros Adultos - Sabor Cordero","precio_venta":"15000.00","precio_final_publico":null,"stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","marca_nombre":"Pedigree","tipo_control_peso":"riguroso","codigo":"7801234567907","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"cantidad_codigo":20,"fecha_vencimiento":null,"codigo_barras_id":152,"precio":"15000.00","marca_logo":"https:\/\/logo.clearbit.com\/pedigree.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-11 17:53:41] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:53:41] Productos encontrados por nombre: 1 [2025-11-11 17:53:41] Procesando producto encontrado por nombre: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:53:41] Usando lote específico detectado: ninguno para producto ID: 164 [2025-11-11 17:53:41] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:53:41] Códigos encontrados para ID 164: 1 [2025-11-11 17:53:41] Detalle de códigos: [{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}] [2025-11-11 17:53:41] Códigos con stock disponible: 1 [2025-11-11 17:53:41] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:53:41] Stock total calculado para ID 164: 1 [2025-11-11 17:53:41] Producto NORMAL ID: 164 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:53:41] Usando primer código disponible en orden FIFO para ID 164: {"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"} [2025-11-11 17:53:41] Producto por nombre agregado a resultados (ID: 164) [2025-11-11 17:53:41] Datos finales del producto: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-11","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:53:41] Se encontraron 12 resultados en total. [2025-11-11 17:53:41] Obteniendo imágenes para productos: 153, 146, 159, 150, 152, 149, 162, 161, 151, 160, 155, 164 [2025-11-11 17:53:41] Imágenes agregadas: 12 productos con imagen [2025-11-11 17:53:41] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 12 resultados) === [2025-11-11 17:55:39] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 17:55:39] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 17:55:39] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 17:55:39] DEBUG SESSION: {"last_regeneration":1762894386,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0} [2025-11-11 17:55:39] DEBUG SESSION ID: 79rnsbas4rk4ndj8c879lqrbdt [2025-11-11 17:55:39] DEBUG SESSION STATUS: 2 [2025-11-11 17:55:39] Negocio en sesión: 78.216.219-5 [2025-11-11 17:55:39] Nombre: SGB-ERP SpA [2025-11-11 17:55:39] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 17:55:39] Conexión exitosa a la base de datos [2025-11-11 17:55:39] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 17:55:39] Buscando producto con código/nombre: 7up [2025-11-11 17:55:39] DEBUG: Código recibido: '7up' (longitud: 3) [2025-11-11 17:55:39] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 17:55:39] No se encontró producto_id para el código exacto '7up'. Intentando búsqueda parcial... [2025-11-11 17:55:39] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 17:55:39] Códigos parciales encontrados: 0 [2025-11-11 17:55:39] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 17:55:39] Productos encontrados por nombre: 1 [2025-11-11 17:55:39] Procesando producto encontrado por nombre: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 17:55:39] Usando lote específico detectado: ninguno para producto ID: 164 [2025-11-11 17:55:39] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 17:55:39] Códigos encontrados para ID 164: 1 [2025-11-11 17:55:39] Detalle de códigos: [{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}] [2025-11-11 17:55:39] Códigos con stock disponible: 1 [2025-11-11 17:55:39] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 17:55:39] Stock total calculado para ID 164: 1 [2025-11-11 17:55:39] Producto NORMAL ID: 164 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 17:55:39] Usando primer código disponible en orden FIFO para ID 164: {"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"} [2025-11-11 17:55:39] Producto por nombre agregado a resultados (ID: 164) [2025-11-11 17:55:39] Datos finales del producto: {"id":164,"codigo":"17628936432442","nombre":"7UP 2 LITROS RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":1,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","marca_nombre":"7UP","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":"2025-11-11","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":163,"codigo":"17628936432442","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":"2025-11-11"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/7up.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 l","stock_disponible":true} [2025-11-11 17:55:39] Se encontraron 1 resultados en total. [2025-11-11 17:55:39] Obteniendo imágenes para productos: 164 [2025-11-11 17:55:39] Imágenes agregadas: 1 productos con imagen [2025-11-11 17:55:39] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 19:14:09] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 19:14:09] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 19:14:09] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 19:14:09] DEBUG SESSION: {"last_regeneration":1762894386,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"error_message":"ID de producto inv\u00e1lido.","total_alertas":7,"total_vencimiento":0,"vencimientos_inmediatos":0,"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 19:14:09] DEBUG SESSION ID: 79rnsbas4rk4ndj8c879lqrbdt [2025-11-11 19:14:09] DEBUG SESSION STATUS: 2 [2025-11-11 19:14:09] Negocio en sesión: 78.216.219-5 [2025-11-11 19:14:09] Nombre: SGB-ERP SpA [2025-11-11 19:14:09] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 19:14:09] Conexión exitosa a la base de datos [2025-11-11 19:14:09] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 19:14:09] Buscando producto con código/nombre: * [2025-11-11 19:14:09] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 19:14:09] Solicitud para mostrar todos los productos [2025-11-11 19:14:09] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 19:14:09] Productos encontrados: 18 [2025-11-11 19:14:09] Producto 0: 7UP 2 LITROS RETORNABLE - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 1: Alimento Húmedo para Gatos Adultos Atún - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 2: Alimento Húmedo para Gatos Adultos Pollo - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 3: Alimento Húmedo para Gatos Adultos Salmón - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 4: Alimento Seco para Perros Adultos - Sabor Carne - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 5: Alimento Seco para Perros Adultos - Sabor Cordero - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 6: Alimento Seco para Perros Adultos - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 7: Arena Sanitaria para Gatos Premium - Varios Tamaños - Códigos adicionales: 7801234567899||diferente [2025-11-11 19:14:09] Producto 8: Cama para Perros Mediana - Varios Colores - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 9: Collar Antipulgas para Perros - Varios Tamaños - Códigos adicionales: 7801234567904||diferente [2025-11-11 19:14:09] Producto 10: Juguete para Gatos con Plumas - Varios Colores - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 11: Producto Sin Clasificar - Varios Modelos - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 12: Puppy para Cachorros - Varios Sabores - Códigos adicionales: 7801234567909||diferente;;7801234567910||diferente;;7801234567911||diferente [2025-11-11 19:14:09] Producto 13: Shampoo para Perros Antipulgas - Varios Tamaños - Códigos adicionales: 7801234567896||diferente;;7801234567897||diferente [2025-11-11 19:14:09] Producto 14: Snack Dentastix Pedigree - Sabor Carne - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 15: Snack Dentastix Pedigree - Sabor Original - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 16: Snack Dentastix Pedigree - Sabor Pollo - Códigos adicionales: NULL [2025-11-11 19:14:09] Producto 17: Snack Dentastix Pedigree - Varios Sabores - Códigos adicionales: 7801234567901||diferente;;7801234567902||diferente [2025-11-11 19:14:09] Producto agregado a resultados (ID: 164): 7UP 2 LITROS RETORNABLE [2025-11-11 19:14:09] Producto agregado a resultados (ID: 146): Alimento Húmedo para Gatos Adultos Atún [2025-11-11 19:14:09] Producto agregado a resultados (ID: 147): Alimento Húmedo para Gatos Adultos Pollo [2025-11-11 19:14:09] Producto agregado a resultados (ID: 148): Alimento Húmedo para Gatos Adultos Salmón [2025-11-11 19:14:09] Producto agregado a resultados (ID: 154): Alimento Seco para Perros Adultos - Sabor Carne [2025-11-11 19:14:09] Producto agregado a resultados (ID: 155): Alimento Seco para Perros Adultos - Sabor Cordero [2025-11-11 19:14:09] Producto agregado a resultados (ID: 153): Alimento Seco para Perros Adultos - Sabor Pollo [2025-11-11 19:14:09] Producto agregado a resultados (ID: 150): Arena Sanitaria para Gatos Premium - Varios Tamaños [2025-11-11 19:14:09] Producto agregado a resultados (ID: 157): Cama para Perros Mediana - Varios Colores [2025-11-11 19:14:10] Producto agregado a resultados (ID: 152): Collar Antipulgas para Perros - Varios Tamaños [2025-11-11 19:14:10] Producto agregado a resultados (ID: 156): Juguete para Gatos con Plumas - Varios Colores [2025-11-11 19:14:10] Producto agregado a resultados (ID: 158): Producto Sin Clasificar - Varios Modelos [2025-11-11 19:14:10] Producto agregado a resultados (ID: 159): Puppy para Cachorros - Varios Sabores [2025-11-11 19:14:10] Producto agregado a resultados (ID: 149): Shampoo para Perros Antipulgas - Varios Tamaños [2025-11-11 19:14:10] Producto agregado a resultados (ID: 161): Snack Dentastix Pedigree - Sabor Carne [2025-11-11 19:14:10] Producto agregado a resultados (ID: 160): Snack Dentastix Pedigree - Sabor Original [2025-11-11 19:14:10] Producto agregado a resultados (ID: 162): Snack Dentastix Pedigree - Sabor Pollo [2025-11-11 19:14:10] Producto agregado a resultados (ID: 151): Snack Dentastix Pedigree - Varios Sabores [2025-11-11 19:14:10] Obteniendo imágenes para todos los productos: 18 [2025-11-11 19:14:10] Imágenes agregadas (mostrar todos): 18 productos con imagen [2025-11-11 19:14:10] Total de productos únicos encontrados: 18 [2025-11-11 22:06:23] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:06:23] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:06:23] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:06:23] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:06:23] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:06:23] DEBUG SESSION STATUS: 2 [2025-11-11 22:06:23] Negocio en sesión: 78.216.219-5 [2025-11-11 22:06:23] Nombre: SGB-ERP SpA [2025-11-11 22:06:23] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:06:23] Conexión exitosa a la base de datos [2025-11-11 22:06:23] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:06:23] Buscando producto con código/nombre: go [2025-11-11 22:06:23] DEBUG: Código recibido: 'go' (longitud: 2) [2025-11-11 22:06:23] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:06:23] No se encontró producto_id para el código exacto 'go'. Intentando búsqueda parcial... [2025-11-11 22:06:23] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:06:23] Códigos parciales encontrados: 0 [2025-11-11 22:06:23] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(p.nombre_canonico) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:06:23] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:06:23] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:06:30] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:06:30] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:06:30] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:06:30] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:06:30] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:06:30] DEBUG SESSION STATUS: 2 [2025-11-11 22:06:30] Negocio en sesión: 78.216.219-5 [2025-11-11 22:06:30] Nombre: SGB-ERP SpA [2025-11-11 22:06:30] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:06:30] Conexión exitosa a la base de datos [2025-11-11 22:06:30] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:06:30] Buscando producto con código/nombre: * [2025-11-11 22:06:30] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 22:06:30] Solicitud para mostrar todos los productos [2025-11-11 22:06:30] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 22:06:30] Productos encontrados: 1 [2025-11-11 22:06:30] Producto 0: GOMITAS DENTADURAS2 - Códigos adicionales: NULL [2025-11-11 22:06:30] Producto agregado a resultados (ID: 176): GOMITAS DENTADURAS2 [2025-11-11 22:06:30] Obteniendo imágenes para todos los productos: 1 [2025-11-11 22:06:30] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-11 22:06:30] Total de productos únicos encontrados: 1 [2025-11-11 22:06:35] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:06:35] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:06:35] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:06:35] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:06:35] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:06:35] DEBUG SESSION STATUS: 2 [2025-11-11 22:06:35] Negocio en sesión: 78.216.219-5 [2025-11-11 22:06:35] Nombre: SGB-ERP SpA [2025-11-11 22:06:35] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:06:35] Conexión exitosa a la base de datos [2025-11-11 22:06:35] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:06:35] Buscando producto con código/nombre: go [2025-11-11 22:06:35] DEBUG: Código recibido: 'go' (longitud: 2) [2025-11-11 22:06:35] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:06:35] No se encontró producto_id para el código exacto 'go'. Intentando búsqueda parcial... [2025-11-11 22:06:35] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:06:35] Códigos parciales encontrados: 0 [2025-11-11 22:06:35] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(p.nombre_canonico) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:06:35] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:06:35] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:06:39] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:06:39] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:06:39] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:06:39] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:06:39] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:06:39] DEBUG SESSION STATUS: 2 [2025-11-11 22:06:39] Negocio en sesión: 78.216.219-5 [2025-11-11 22:06:39] Nombre: SGB-ERP SpA [2025-11-11 22:06:39] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:06:39] Conexión exitosa a la base de datos [2025-11-11 22:06:39] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:06:39] Buscando producto con código/nombre: gomitas [2025-11-11 22:06:39] DEBUG: Código recibido: 'gomitas' (longitud: 7) [2025-11-11 22:06:39] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:06:39] No se encontró producto_id para el código exacto 'gomitas'. Intentando búsqueda parcial... [2025-11-11 22:06:39] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:06:39] Códigos parciales encontrados: 0 [2025-11-11 22:06:39] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(p.nombre_canonico) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:06:39] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:06:39] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:07:00] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:07:00] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:07:00] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:07:00] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:07:00] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:07:00] DEBUG SESSION STATUS: 2 [2025-11-11 22:07:00] Negocio en sesión: 78.216.219-5 [2025-11-11 22:07:00] Nombre: SGB-ERP SpA [2025-11-11 22:07:00] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:07:00] Conexión exitosa a la base de datos [2025-11-11 22:07:00] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:07:00] Buscando producto con código/nombre: * [2025-11-11 22:07:00] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 22:07:00] Solicitud para mostrar todos los productos [2025-11-11 22:07:00] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 22:07:00] Productos encontrados: 1 [2025-11-11 22:07:00] Producto 0: GOMITAS DENTADURAS2 - Códigos adicionales: NULL [2025-11-11 22:07:00] Producto agregado a resultados (ID: 176): GOMITAS DENTADURAS2 [2025-11-11 22:07:00] Obteniendo imágenes para todos los productos: 1 [2025-11-11 22:07:00] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-11 22:07:00] Total de productos únicos encontrados: 1 [2025-11-11 22:09:03] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:09:03] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:09:03] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:09:03] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:09:03] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:09:03] DEBUG SESSION STATUS: 2 [2025-11-11 22:09:03] Negocio en sesión: 78.216.219-5 [2025-11-11 22:09:03] Nombre: SGB-ERP SpA [2025-11-11 22:09:03] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:09:03] Conexión exitosa a la base de datos [2025-11-11 22:09:03] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:09:03] Buscando producto con código/nombre: go [2025-11-11 22:09:03] DEBUG: Código recibido: 'go' (longitud: 2) [2025-11-11 22:09:03] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:09:03] No se encontró producto_id para el código exacto 'go'. Intentando búsqueda parcial... [2025-11-11 22:09:03] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:09:03] Códigos parciales encontrados: 0 [2025-11-11 22:09:03] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(p.nombre_canonico) LIKE LOWER(:termino1) OR LOWER(p.nombre_alias) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:09:03] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:09:03] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:09:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:09:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:09:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:09:06] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:09:06] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:09:06] DEBUG SESSION STATUS: 2 [2025-11-11 22:09:06] Negocio en sesión: 78.216.219-5 [2025-11-11 22:09:06] Nombre: SGB-ERP SpA [2025-11-11 22:09:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:09:06] Conexión exitosa a la base de datos [2025-11-11 22:09:06] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:09:06] Buscando producto con código/nombre: gomitas [2025-11-11 22:09:06] DEBUG: Código recibido: 'gomitas' (longitud: 7) [2025-11-11 22:09:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:09:06] No se encontró producto_id para el código exacto 'gomitas'. Intentando búsqueda parcial... [2025-11-11 22:09:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:09:06] Códigos parciales encontrados: 0 [2025-11-11 22:09:06] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(p.nombre_canonico) LIKE LOWER(:termino1) OR LOWER(p.nombre_alias) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:09:06] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:09:06] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:09:36] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:09:36] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:09:36] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:09:36] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:09:36] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:09:36] DEBUG SESSION STATUS: 2 [2025-11-11 22:09:36] Negocio en sesión: 78.216.219-5 [2025-11-11 22:09:36] Nombre: SGB-ERP SpA [2025-11-11 22:09:36] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:09:36] Conexión exitosa a la base de datos [2025-11-11 22:09:36] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:09:36] Buscando producto con código/nombre: * [2025-11-11 22:09:36] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 22:09:36] Solicitud para mostrar todos los productos [2025-11-11 22:09:36] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 22:09:36] Productos encontrados: 1 [2025-11-11 22:09:36] Producto 0: GOMITAS DENTADURAS2 - Códigos adicionales: NULL [2025-11-11 22:09:36] Producto agregado a resultados (ID: 176): GOMITAS DENTADURAS2 [2025-11-11 22:09:36] Obteniendo imágenes para todos los productos: 1 [2025-11-11 22:09:36] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-11 22:09:36] Total de productos únicos encontrados: 1 [2025-11-11 22:14:57] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:14:57] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:14:57] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:14:57] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:14:57] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:14:57] DEBUG SESSION STATUS: 2 [2025-11-11 22:14:57] Negocio en sesión: 78.216.219-5 [2025-11-11 22:14:57] Nombre: SGB-ERP SpA [2025-11-11 22:14:57] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:14:57] Conexión exitosa a la base de datos [2025-11-11 22:14:57] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:14:57] Buscando producto con código/nombre: go [2025-11-11 22:14:57] DEBUG: Código recibido: 'go' (longitud: 2) [2025-11-11 22:14:57] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:14:57] No se encontró producto_id para el código exacto 'go'. Intentando búsqueda parcial... [2025-11-11 22:14:57] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:14:57] Códigos parciales encontrados: 0 [2025-11-11 22:14:57] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(p.nombre_canonico) LIKE LOWER(:termino1) OR LOWER(p.nombre_alias) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:14:57] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:14:57] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:15:15] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:15:15] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:15:15] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:15:15] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:15:15] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:15:15] DEBUG SESSION STATUS: 2 [2025-11-11 22:15:15] Negocio en sesión: 78.216.219-5 [2025-11-11 22:15:15] Nombre: SGB-ERP SpA [2025-11-11 22:15:15] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:15:15] Conexión exitosa a la base de datos [2025-11-11 22:15:15] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:15:15] Buscando producto con código/nombre: 17629086742174 [2025-11-11 22:15:15] DEBUG: Código recibido: '17629086742174' (longitud: 14) [2025-11-11 22:15:15] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:15:15] ID de producto encontrado por código '17629086742174': 176 [2025-11-11 22:15:15] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-11 22:15:15] Detalles del producto encontrados: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso"} [2025-11-11 22:15:15] Producto normal detectado por código (ID: 176) [2025-11-11 22:15:15] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-11 22:15:15] Stock total calculado: 1 [2025-11-11 22:15:15] DEBUG: Buscando codigo_barras_id para producto_id: 176, codigo: 17629086742174 [2025-11-11 22:15:15] DEBUG: codigo_barras_id encontrado: 167 [2025-11-11 22:15:15] Producto ID: 176 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 22:15:15] DEBUG: codigo_barras_id agregado al producto: 167 [2025-11-11 22:15:15] Producto normal por código agregado a resultados (ID: 176) [2025-11-11 22:15:15] Datos finales del producto por código: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso","codigo":"17629086742174","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":167,"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 un","stock_disponible":true} [2025-11-11 22:15:15] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(p.nombre_canonico) LIKE LOWER(:termino1) OR LOWER(p.nombre_alias) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:15:15] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:15:15] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:15:21] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:15:21] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:15:21] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:15:21] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:15:21] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:15:21] DEBUG SESSION STATUS: 2 [2025-11-11 22:15:21] Negocio en sesión: 78.216.219-5 [2025-11-11 22:15:21] Nombre: SGB-ERP SpA [2025-11-11 22:15:21] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:15:21] Conexión exitosa a la base de datos [2025-11-11 22:15:21] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:15:21] Buscando producto con código/nombre: 17629086742174 [2025-11-11 22:15:21] DEBUG: Código recibido: '17629086742174' (longitud: 14) [2025-11-11 22:15:21] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:15:21] ID de producto encontrado por código '17629086742174': 176 [2025-11-11 22:15:21] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-11 22:15:21] Detalles del producto encontrados: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso"} [2025-11-11 22:15:21] Producto normal detectado por código (ID: 176) [2025-11-11 22:15:21] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-11 22:15:21] Stock total calculado: 1 [2025-11-11 22:15:21] DEBUG: Buscando codigo_barras_id para producto_id: 176, codigo: 17629086742174 [2025-11-11 22:15:21] DEBUG: codigo_barras_id encontrado: 167 [2025-11-11 22:15:21] Producto ID: 176 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 22:15:21] DEBUG: codigo_barras_id agregado al producto: 167 [2025-11-11 22:15:21] Producto normal por código agregado a resultados (ID: 176) [2025-11-11 22:15:21] Datos finales del producto por código: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso","codigo":"17629086742174","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":167,"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 un","stock_disponible":true} [2025-11-11 22:15:21] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE LOWER(:termino1) OR LOWER(p.nombre_canonico) LIKE LOWER(:termino1) OR LOWER(p.nombre_alias) LIKE LOWER(:termino1) OR LOWER(m.nombre) LIKE LOWER(:termino2) OR LOWER(tpm.nombre) LIKE LOWER(:termino3) OR LOWER(c.nombre) LIKE LOWER(:termino4)) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:15:21] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:15:21] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:16:28] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:16:28] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:16:28] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:16:28] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:16:28] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:16:28] DEBUG SESSION STATUS: 2 [2025-11-11 22:16:28] Negocio en sesión: 78.216.219-5 [2025-11-11 22:16:28] Nombre: SGB-ERP SpA [2025-11-11 22:16:28] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:16:28] Conexión exitosa a la base de datos [2025-11-11 22:16:28] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:16:28] Buscando producto con código/nombre: 17629086742174 [2025-11-11 22:16:28] DEBUG: Código recibido: '17629086742174' (longitud: 14) [2025-11-11 22:16:28] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:16:28] ID de producto encontrado por código '17629086742174': 176 [2025-11-11 22:16:28] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-11 22:16:28] Detalles del producto encontrados: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso"} [2025-11-11 22:16:28] Producto normal detectado por código (ID: 176) [2025-11-11 22:16:28] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-11 22:16:28] Stock total calculado: 1 [2025-11-11 22:16:28] DEBUG: Buscando codigo_barras_id para producto_id: 176, codigo: 17629086742174 [2025-11-11 22:16:28] DEBUG: codigo_barras_id encontrado: 167 [2025-11-11 22:16:28] Producto ID: 176 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 22:16:28] DEBUG: codigo_barras_id agregado al producto: 167 [2025-11-11 22:16:28] Producto normal por código agregado a resultados (ID: 176) [2025-11-11 22:16:28] Datos finales del producto por código: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso","codigo":"17629086742174","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":167,"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 un","stock_disponible":true} [2025-11-11 22:16:28] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino1 OR LOWER(p.nombre_canonico) LIKE :termino1 OR LOWER(p.nombre_alias) LIKE :termino1 OR LOWER(m.nombre) LIKE :termino2 OR LOWER(tpm.nombre) LIKE :termino3 OR LOWER(c.nombre) LIKE :termino4) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:16:28] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:16:28] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:16:35] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:16:35] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:16:35] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:16:35] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:16:35] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:16:35] DEBUG SESSION STATUS: 2 [2025-11-11 22:16:35] Negocio en sesión: 78.216.219-5 [2025-11-11 22:16:35] Nombre: SGB-ERP SpA [2025-11-11 22:16:35] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:16:35] Conexión exitosa a la base de datos [2025-11-11 22:16:35] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:16:35] Buscando producto con código/nombre: 17629086742174 [2025-11-11 22:16:35] DEBUG: Código recibido: '17629086742174' (longitud: 14) [2025-11-11 22:16:35] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:16:35] ID de producto encontrado por código '17629086742174': 176 [2025-11-11 22:16:35] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-11 22:16:35] Detalles del producto encontrados: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso"} [2025-11-11 22:16:35] Producto normal detectado por código (ID: 176) [2025-11-11 22:16:35] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-11 22:16:35] Stock total calculado: 1 [2025-11-11 22:16:35] DEBUG: Buscando codigo_barras_id para producto_id: 176, codigo: 17629086742174 [2025-11-11 22:16:35] DEBUG: codigo_barras_id encontrado: 167 [2025-11-11 22:16:35] Producto ID: 176 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 22:16:35] DEBUG: codigo_barras_id agregado al producto: 167 [2025-11-11 22:16:35] Producto normal por código agregado a resultados (ID: 176) [2025-11-11 22:16:35] Datos finales del producto por código: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso","codigo":"17629086742174","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":167,"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 un","stock_disponible":true} [2025-11-11 22:16:35] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino1 OR LOWER(p.nombre_canonico) LIKE :termino1 OR LOWER(p.nombre_alias) LIKE :termino1 OR LOWER(m.nombre) LIKE :termino2 OR LOWER(tpm.nombre) LIKE :termino3 OR LOWER(c.nombre) LIKE :termino4) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:16:35] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:16:35] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:16:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:16:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:16:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:16:41] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:16:41] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:16:41] DEBUG SESSION STATUS: 2 [2025-11-11 22:16:41] Negocio en sesión: 78.216.219-5 [2025-11-11 22:16:41] Nombre: SGB-ERP SpA [2025-11-11 22:16:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:16:41] Conexión exitosa a la base de datos [2025-11-11 22:16:41] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:16:41] Buscando producto con código/nombre: go [2025-11-11 22:16:41] DEBUG: Código recibido: 'go' (longitud: 2) [2025-11-11 22:16:41] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:16:41] No se encontró producto_id para el código exacto 'go'. Intentando búsqueda parcial... [2025-11-11 22:16:41] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:16:41] Códigos parciales encontrados: 0 [2025-11-11 22:16:41] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino1 OR LOWER(p.nombre_canonico) LIKE :termino1 OR LOWER(p.nombre_alias) LIKE :termino1 OR LOWER(m.nombre) LIKE :termino2 OR LOWER(tpm.nombre) LIKE :termino3 OR LOWER(c.nombre) LIKE :termino4) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:16:41] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:16:41] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:17:23] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:17:23] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:17:23] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:17:23] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:17:23] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:17:23] DEBUG SESSION STATUS: 2 [2025-11-11 22:17:23] Negocio en sesión: 78.216.219-5 [2025-11-11 22:17:23] Nombre: SGB-ERP SpA [2025-11-11 22:17:23] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:17:23] Conexión exitosa a la base de datos [2025-11-11 22:17:23] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:17:23] Buscando producto con código/nombre: go [2025-11-11 22:17:23] DEBUG: Código recibido: 'go' (longitud: 2) [2025-11-11 22:17:23] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:17:23] No se encontró producto_id para el código exacto 'go'. Intentando búsqueda parcial... [2025-11-11 22:17:23] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:17:23] Códigos parciales encontrados: 0 [2025-11-11 22:17:23] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino1 OR LOWER(p.nombre_canonico) LIKE :termino1 OR LOWER(p.nombre_alias) LIKE :termino1 OR LOWER(m.nombre) LIKE :termino2 OR LOWER(tpm.nombre) LIKE :termino3 OR LOWER(c.nombre) LIKE :termino4) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:17:23] Error en consulta SQL: SQLSTATE[HY093]: Invalid parameter number - Código: HY093 [2025-11-11 22:17:23] === FIN BÚSQUEDA DE PRODUCTO (ERROR SQL) === [2025-11-11 22:20:02] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:20:02] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:20:02] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:20:02] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:20:02] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:20:02] DEBUG SESSION STATUS: 2 [2025-11-11 22:20:02] Negocio en sesión: 78.216.219-5 [2025-11-11 22:20:02] Nombre: SGB-ERP SpA [2025-11-11 22:20:02] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:20:02] Conexión exitosa a la base de datos [2025-11-11 22:20:02] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:20:02] Buscando producto con código/nombre: go [2025-11-11 22:20:02] DEBUG: Código recibido: 'go' (longitud: 2) [2025-11-11 22:20:02] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:20:02] No se encontró producto_id para el código exacto 'go'. Intentando búsqueda parcial... [2025-11-11 22:20:02] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 22:20:02] Códigos parciales encontrados: 0 [2025-11-11 22:20:02] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:20:02] Productos encontrados por nombre: 1 [2025-11-11 22:20:02] Procesando producto encontrado por nombre: {"id":176,"codigo":"17629086742174","nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-11 22:20:02] Usando lote específico detectado: ninguno para producto ID: 176 [2025-11-11 22:20:02] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 22:20:02] Códigos encontrados para ID 176: 1 [2025-11-11 22:20:02] Detalle de códigos: [{"id":167,"codigo":"17629086742174","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":null}] [2025-11-11 22:20:02] Códigos con stock disponible: 1 [2025-11-11 22:20:02] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-11 22:20:02] Stock total calculado para ID 176: 1 [2025-11-11 22:20:02] Producto NORMAL ID: 176 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 22:20:02] Usando primer código disponible en orden FIFO para ID 176: {"id":167,"codigo":"17629086742174","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":null} [2025-11-11 22:20:02] Producto por nombre agregado a resultados (ID: 176) [2025-11-11 22:20:02] Datos finales del producto: {"id":176,"codigo":"17629086742174","nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":1,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"1.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":167,"codigo":"17629086742174","tipo_codigo":"manual","cantidad":"1.00","fecha_vencimiento":null}],"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 un","stock_disponible":true} [2025-11-11 22:20:02] Se encontraron 1 resultados en total. [2025-11-11 22:20:02] Obteniendo imágenes para productos: 176 [2025-11-11 22:20:02] Imágenes agregadas: 1 productos con imagen [2025-11-11 22:20:02] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 22:20:24] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:20:24] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:20:24] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:20:24] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:20:24] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:20:24] DEBUG SESSION STATUS: 2 [2025-11-11 22:20:24] Negocio en sesión: 78.216.219-5 [2025-11-11 22:20:24] Nombre: SGB-ERP SpA [2025-11-11 22:20:24] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:20:24] Conexión exitosa a la base de datos [2025-11-11 22:20:24] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:20:24] Buscando producto con código/nombre: 17629086742174 [2025-11-11 22:20:24] DEBUG: Código recibido: '17629086742174' (longitud: 14) [2025-11-11 22:20:24] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 22:20:24] ID de producto encontrado por código '17629086742174': 176 [2025-11-11 22:20:24] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-11 22:20:24] Detalles del producto encontrados: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso"} [2025-11-11 22:20:24] Producto normal detectado por código (ID: 176) [2025-11-11 22:20:24] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-11 22:20:24] Stock total calculado: 1 [2025-11-11 22:20:24] DEBUG: Buscando codigo_barras_id para producto_id: 176, codigo: 17629086742174 [2025-11-11 22:20:24] DEBUG: codigo_barras_id encontrado: 167 [2025-11-11 22:20:24] Producto ID: 176 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 22:20:24] DEBUG: codigo_barras_id agregado al producto: 167 [2025-11-11 22:20:24] Producto normal por código agregado a resultados (ID: 176) [2025-11-11 22:20:24] Datos finales del producto por código: {"id":176,"nombre":"GOMITAS DENTADURAS2","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"1.00","cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"riguroso","codigo":"17629086742174","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":167,"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"1 un","stock_disponible":true} [2025-11-11 22:20:24] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 22:20:24] Productos encontrados por nombre: 0 [2025-11-11 22:20:24] Se encontraron 1 resultados en total. [2025-11-11 22:20:24] Obteniendo imágenes para productos: 176 [2025-11-11 22:20:24] Imágenes agregadas: 1 productos con imagen [2025-11-11 22:20:24] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 22:40:11] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 22:40:11] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 22:40:11] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 22:40:11] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-11 22:40:11] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 22:40:11] DEBUG SESSION STATUS: 2 [2025-11-11 22:40:11] Negocio en sesión: 78.216.219-5 [2025-11-11 22:40:11] Nombre: SGB-ERP SpA [2025-11-11 22:40:11] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 22:40:11] Conexión exitosa a la base de datos [2025-11-11 22:40:11] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 22:40:11] Buscando producto con código/nombre: * [2025-11-11 22:40:11] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 22:40:11] Solicitud para mostrar todos los productos [2025-11-11 22:40:11] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 22:40:11] Productos encontrados: 1 [2025-11-11 22:40:11] Producto 0: GOMITAS DENTADURAS2 - Códigos adicionales: NULL [2025-11-11 22:40:11] Producto agregado a resultados (ID: 176): GOMITAS DENTADURAS2 [2025-11-11 22:40:11] Obteniendo imágenes para todos los productos: 1 [2025-11-11 22:40:11] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-11 22:40:11] Total de productos únicos encontrados: 1 [2025-11-11 23:22:18] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:22:18] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:22:18] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:22:18] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:22:18] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:22:18] DEBUG SESSION STATUS: 2 [2025-11-11 23:22:18] Negocio en sesión: 78.216.219-5 [2025-11-11 23:22:18] Nombre: SGB-ERP SpA [2025-11-11 23:22:18] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:22:18] Conexión exitosa a la base de datos [2025-11-11 23:22:18] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:22:18] Buscando producto con código/nombre: GO [2025-11-11 23:22:18] DEBUG: Código recibido: 'GO' (longitud: 2) [2025-11-11 23:22:18] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:22:18] No se encontró producto_id para el código exacto 'GO'. Intentando búsqueda parcial... [2025-11-11 23:22:18] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:22:18] Códigos parciales encontrados: 1 [2025-11-11 23:22:18] Procesando código parcial: GOM-178 (ID: 178) [2025-11-11 23:22:18] Producto ID: 178 - Tiene lotes: NO (cantidad: 0) [2025-11-11 23:22:18] Producto ID: 178 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-11 23:22:18] DEBUGGING STOCK (código parcial): stockTotal original = 10 (tipo: double) [2025-11-11 23:22:18] DEBUGGING STOCK (código parcial): después de number_format = 10. [2025-11-11 23:22:18] DEBUGGING STOCK (código parcial): después de rtrim = 10 [2025-11-11 23:22:18] DEBUGGING STOCK (código parcial): stock_texto final = 10 kg [2025-11-11 23:22:18] Añadido producto con código parcial: {"id":178,"nombre":"GOMITAS DENTADURAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","marca_nombre":"Fini","tipo_control_peso":"flexible","codigo":"GOM-178","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":10,"fecha_vencimiento":null,"codigo_barras_id":169,"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:22:18] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:22:18] Productos encontrados por nombre: 1 [2025-11-11 23:22:18] Omitiendo producto por nombre duplicado (ID: 178) - ya procesado por código [2025-11-11 23:22:18] Se encontraron 1 resultados en total. [2025-11-11 23:22:18] Obteniendo imágenes para productos: 178 [2025-11-11 23:22:18] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:22:18] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:22:23] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:22:23] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:22:23] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:22:23] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:22:23] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:22:23] DEBUG SESSION STATUS: 2 [2025-11-11 23:22:23] Negocio en sesión: 78.216.219-5 [2025-11-11 23:22:23] Nombre: SGB-ERP SpA [2025-11-11 23:22:23] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:22:23] Conexión exitosa a la base de datos [2025-11-11 23:22:23] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:22:23] Buscando producto con código/nombre: gomi [2025-11-11 23:22:23] DEBUG: Código recibido: 'gomi' (longitud: 4) [2025-11-11 23:22:23] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:22:23] No se encontró producto_id para el código exacto 'gomi'. Intentando búsqueda parcial... [2025-11-11 23:22:23] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:22:23] Códigos parciales encontrados: 0 [2025-11-11 23:22:23] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:22:23] Productos encontrados por nombre: 1 [2025-11-11 23:22:23] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS DENTADURAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:22:23] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:22:23] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:22:23] Códigos encontrados para ID 178: 1 [2025-11-11 23:22:23] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:22:23] Códigos con stock disponible: 1 [2025-11-11 23:22:23] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:22:23] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:22:23] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:22:23] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:22:23] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:22:23] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:22:23] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:22:23] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:22:23] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:22:23] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:22:23] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS DENTADURAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:22:23] Se encontraron 1 resultados en total. [2025-11-11 23:22:23] Obteniendo imágenes para productos: 178 [2025-11-11 23:22:23] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:22:23] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:22:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:22:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:22:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:22:41] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:22:41] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:22:41] DEBUG SESSION STATUS: 2 [2025-11-11 23:22:41] Negocio en sesión: 78.216.219-5 [2025-11-11 23:22:41] Nombre: SGB-ERP SpA [2025-11-11 23:22:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:22:41] Conexión exitosa a la base de datos [2025-11-11 23:22:41] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:22:41] Buscando producto con código/nombre: gomit [2025-11-11 23:22:41] DEBUG: Código recibido: 'gomit' (longitud: 5) [2025-11-11 23:22:41] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:22:41] No se encontró producto_id para el código exacto 'gomit'. Intentando búsqueda parcial... [2025-11-11 23:22:41] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:22:41] Códigos parciales encontrados: 0 [2025-11-11 23:22:41] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:22:41] Productos encontrados por nombre: 1 [2025-11-11 23:22:41] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS DENTADURAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:22:41] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:22:41] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:22:41] Códigos encontrados para ID 178: 1 [2025-11-11 23:22:41] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:22:41] Códigos con stock disponible: 1 [2025-11-11 23:22:41] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:22:41] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:22:41] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:22:41] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:22:41] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:22:41] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:22:41] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:22:41] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:22:41] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:22:41] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:22:41] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS DENTADURAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:22:41] Se encontraron 1 resultados en total. [2025-11-11 23:22:41] Obteniendo imágenes para productos: 178 [2025-11-11 23:22:41] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:22:41] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:24:15] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:24:15] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:24:15] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:24:15] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:24:15] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:24:15] DEBUG SESSION STATUS: 2 [2025-11-11 23:24:15] Negocio en sesión: 78.216.219-5 [2025-11-11 23:24:15] Nombre: SGB-ERP SpA [2025-11-11 23:24:15] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:24:15] Conexión exitosa a la base de datos [2025-11-11 23:24:15] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:24:15] Buscando producto con código/nombre: * [2025-11-11 23:24:15] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 23:24:15] Solicitud para mostrar todos los productos [2025-11-11 23:24:15] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 23:24:15] Productos encontrados: 1 [2025-11-11 23:24:15] Producto 0: GOMITAS DENTADURAS - Códigos adicionales: NULL [2025-11-11 23:24:15] Producto agregado a resultados (ID: 178): GOMITAS DENTADURAS [2025-11-11 23:24:15] Obteniendo imágenes para todos los productos: 1 [2025-11-11 23:24:15] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-11 23:24:15] Total de productos únicos encontrados: 1 [2025-11-11 23:24:20] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:24:20] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:24:20] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:24:20] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:24:20] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:24:20] DEBUG SESSION STATUS: 2 [2025-11-11 23:24:20] Negocio en sesión: 78.216.219-5 [2025-11-11 23:24:20] Nombre: SGB-ERP SpA [2025-11-11 23:24:20] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:24:20] Conexión exitosa a la base de datos [2025-11-11 23:24:20] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:24:20] Buscando producto con código/nombre: gomit [2025-11-11 23:24:20] DEBUG: Código recibido: 'gomit' (longitud: 5) [2025-11-11 23:24:20] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:24:20] No se encontró producto_id para el código exacto 'gomit'. Intentando búsqueda parcial... [2025-11-11 23:24:20] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:24:20] Códigos parciales encontrados: 0 [2025-11-11 23:24:20] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:24:20] Productos encontrados por nombre: 1 [2025-11-11 23:24:20] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS DENTADURAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:24:20] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:24:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:24:20] Códigos encontrados para ID 178: 1 [2025-11-11 23:24:20] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:24:20] Códigos con stock disponible: 1 [2025-11-11 23:24:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:24:20] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:24:20] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:24:20] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:24:20] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:24:20] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:24:20] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:24:20] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:24:20] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:24:20] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:24:20] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS DENTADURAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:24:20] Se encontraron 1 resultados en total. [2025-11-11 23:24:20] Obteniendo imágenes para productos: 178 [2025-11-11 23:24:20] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:24:20] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:29:11] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:29:11] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:29:11] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:29:11] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:29:11] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:29:11] DEBUG SESSION STATUS: 2 [2025-11-11 23:29:11] Negocio en sesión: 78.216.219-5 [2025-11-11 23:29:11] Nombre: SGB-ERP SpA [2025-11-11 23:29:11] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:29:11] Conexión exitosa a la base de datos [2025-11-11 23:29:11] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:29:11] Buscando producto con código/nombre: go [2025-11-11 23:29:11] DEBUG: Código recibido: 'go' (longitud: 2) [2025-11-11 23:29:11] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:29:11] No se encontró producto_id para el código exacto 'go'. Intentando búsqueda parcial... [2025-11-11 23:29:11] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:29:11] Códigos parciales encontrados: 1 [2025-11-11 23:29:11] Procesando código parcial: GOM-178 (ID: 178) [2025-11-11 23:29:11] Producto ID: 178 - Tiene lotes: NO (cantidad: 0) [2025-11-11 23:29:11] Producto ID: 178 no usa lotes (tipo: especial), ignorando comando de lote [2025-11-11 23:29:11] DEBUGGING STOCK (código parcial): stockTotal original = 10 (tipo: double) [2025-11-11 23:29:11] DEBUGGING STOCK (código parcial): después de number_format = 10. [2025-11-11 23:29:11] DEBUGGING STOCK (código parcial): después de rtrim = 10 [2025-11-11 23:29:11] DEBUGGING STOCK (código parcial): stock_texto final = 10 kg [2025-11-11 23:29:11] Añadido producto con código parcial: {"id":178,"nombre":"GOMITAS DENTADURAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","tipo_codigo":"especial","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","hash_producto":"b1f5817a49fbcb6dadc38196dcdf7587","marca_nombre":"Fini","tipo_control_peso":"flexible","codigo":"GOM-178","es_busqueda_por_codigo":true,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"cantidad_codigo":10,"fecha_vencimiento":null,"codigo_barras_id":169,"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:29:11] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:29:11] Productos encontrados por nombre: 1 [2025-11-11 23:29:11] Omitiendo producto por nombre duplicado (ID: 178) - ya procesado por código [2025-11-11 23:29:11] Se encontraron 1 resultados en total. [2025-11-11 23:29:11] Obteniendo imágenes para productos: 178 [2025-11-11 23:29:11] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:29:11] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:30:37] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:30:37] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:30:37] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:30:37] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:30:37] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:30:37] DEBUG SESSION STATUS: 2 [2025-11-11 23:30:37] Negocio en sesión: 78.216.219-5 [2025-11-11 23:30:37] Nombre: SGB-ERP SpA [2025-11-11 23:30:37] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:30:37] Conexión exitosa a la base de datos [2025-11-11 23:30:37] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:30:37] Buscando producto con código/nombre: gomit [2025-11-11 23:30:37] DEBUG: Código recibido: 'gomit' (longitud: 5) [2025-11-11 23:30:37] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:30:37] No se encontró producto_id para el código exacto 'gomit'. Intentando búsqueda parcial... [2025-11-11 23:30:37] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:30:37] Códigos parciales encontrados: 0 [2025-11-11 23:30:37] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:30:37] Productos encontrados por nombre: 1 [2025-11-11 23:30:37] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS RANAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"f1bedec429d0ce2b785c5b30a225d825","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:30:37] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:30:37] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:30:37] Códigos encontrados para ID 178: 1 [2025-11-11 23:30:37] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:30:37] Códigos con stock disponible: 1 [2025-11-11 23:30:37] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:30:37] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:30:37] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:30:37] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:30:37] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:30:37] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:30:37] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:30:37] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:30:37] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:30:37] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:30:37] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS RANAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"f1bedec429d0ce2b785c5b30a225d825","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:30:37] Se encontraron 1 resultados en total. [2025-11-11 23:30:37] Obteniendo imágenes para productos: 178 [2025-11-11 23:30:37] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:30:37] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:44:42] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:44:42] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:44:42] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:44:42] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:44:42] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:44:42] DEBUG SESSION STATUS: 2 [2025-11-11 23:44:42] Negocio en sesión: 78.216.219-5 [2025-11-11 23:44:42] Nombre: SGB-ERP SpA [2025-11-11 23:44:42] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:44:42] Conexión exitosa a la base de datos [2025-11-11 23:44:42] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:44:42] Buscando producto con código/nombre: gomitas [2025-11-11 23:44:42] DEBUG: Código recibido: 'gomitas' (longitud: 7) [2025-11-11 23:44:42] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:44:42] No se encontró producto_id para el código exacto 'gomitas'. Intentando búsqueda parcial... [2025-11-11 23:44:42] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:44:42] Códigos parciales encontrados: 0 [2025-11-11 23:44:42] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:44:42] Productos encontrados por nombre: 1 [2025-11-11 23:44:42] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"15007558d408e977be3fe97ce54f1ef8","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:44:42] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:44:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:44:42] Códigos encontrados para ID 178: 1 [2025-11-11 23:44:42] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:44:42] Códigos con stock disponible: 1 [2025-11-11 23:44:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:44:42] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:44:42] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:44:42] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:44:42] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:44:42] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:44:42] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:44:42] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:44:42] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:44:42] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:44:42] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"15007558d408e977be3fe97ce54f1ef8","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:44:42] Se encontraron 1 resultados en total. [2025-11-11 23:44:42] Obteniendo imágenes para productos: 178 [2025-11-11 23:44:42] Imágenes agregadas: 0 productos con imagen [2025-11-11 23:44:42] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:44:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:44:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:44:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:44:48] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:44:48] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:44:48] DEBUG SESSION STATUS: 2 [2025-11-11 23:44:48] Negocio en sesión: 78.216.219-5 [2025-11-11 23:44:48] Nombre: SGB-ERP SpA [2025-11-11 23:44:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:44:48] Conexión exitosa a la base de datos [2025-11-11 23:44:48] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:44:48] Buscando producto con código/nombre: * [2025-11-11 23:44:48] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-11 23:44:48] Solicitud para mostrar todos los productos [2025-11-11 23:44:48] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-11 23:44:48] Productos encontrados: 1 [2025-11-11 23:44:48] Producto 0: GOMITAS PIRATE SKULLS - Códigos adicionales: NULL [2025-11-11 23:44:48] Producto agregado a resultados (ID: 178): GOMITAS PIRATE SKULLS [2025-11-11 23:44:48] Obteniendo imágenes para todos los productos: 1 [2025-11-11 23:44:48] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-11 23:44:48] Total de productos únicos encontrados: 1 [2025-11-11 23:47:25] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:47:25] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:47:25] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:47:25] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:47:25] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:47:25] DEBUG SESSION STATUS: 2 [2025-11-11 23:47:25] Negocio en sesión: 78.216.219-5 [2025-11-11 23:47:25] Nombre: SGB-ERP SpA [2025-11-11 23:47:25] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:47:25] Conexión exitosa a la base de datos [2025-11-11 23:47:25] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:47:25] Buscando producto con código/nombre: pira [2025-11-11 23:47:25] DEBUG: Código recibido: 'pira' (longitud: 4) [2025-11-11 23:47:25] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:47:25] No se encontró producto_id para el código exacto 'pira'. Intentando búsqueda parcial... [2025-11-11 23:47:25] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:47:25] Códigos parciales encontrados: 0 [2025-11-11 23:47:25] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:47:25] Productos encontrados por nombre: 1 [2025-11-11 23:47:25] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"15007558d408e977be3fe97ce54f1ef8","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:47:25] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:47:25] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:47:25] Códigos encontrados para ID 178: 1 [2025-11-11 23:47:25] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:47:25] Códigos con stock disponible: 1 [2025-11-11 23:47:25] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:47:25] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:47:25] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:47:25] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:47:25] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:47:25] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:47:25] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:47:25] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:47:25] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:47:25] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:47:25] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"15007558d408e977be3fe97ce54f1ef8","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:47:25] Se encontraron 1 resultados en total. [2025-11-11 23:47:25] Obteniendo imágenes para productos: 178 [2025-11-11 23:47:25] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:47:25] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:53:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:53:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:53:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:53:45] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:53:45] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:53:45] DEBUG SESSION STATUS: 2 [2025-11-11 23:53:45] Negocio en sesión: 78.216.219-5 [2025-11-11 23:53:45] Nombre: SGB-ERP SpA [2025-11-11 23:53:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:53:45] Conexión exitosa a la base de datos [2025-11-11 23:53:45] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:53:45] Buscando producto con código/nombre: gomi [2025-11-11 23:53:45] DEBUG: Código recibido: 'gomi' (longitud: 4) [2025-11-11 23:53:45] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:53:45] No se encontró producto_id para el código exacto 'gomi'. Intentando búsqueda parcial... [2025-11-11 23:53:45] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:53:45] Códigos parciales encontrados: 0 [2025-11-11 23:53:45] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:53:45] Productos encontrados por nombre: 1 [2025-11-11 23:53:45] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"15007558d408e977be3fe97ce54f1ef8","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:53:45] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:53:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:53:45] Códigos encontrados para ID 178: 1 [2025-11-11 23:53:45] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:53:45] Códigos con stock disponible: 1 [2025-11-11 23:53:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:53:45] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:53:45] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:53:45] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:53:45] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:53:45] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:53:45] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:53:45] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:53:45] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:53:45] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:53:45] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"15007558d408e977be3fe97ce54f1ef8","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:53:45] Se encontraron 1 resultados en total. [2025-11-11 23:53:45] Obteniendo imágenes para productos: 178 [2025-11-11 23:53:45] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:53:45] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:54:24] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:54:24] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:54:24] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:54:24] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:54:24] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:54:24] DEBUG SESSION STATUS: 2 [2025-11-11 23:54:24] Negocio en sesión: 78.216.219-5 [2025-11-11 23:54:24] Nombre: SGB-ERP SpA [2025-11-11 23:54:24] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:54:24] Conexión exitosa a la base de datos [2025-11-11 23:54:24] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:54:24] Buscando producto con código/nombre: sapi [2025-11-11 23:54:24] DEBUG: Código recibido: 'sapi' (longitud: 4) [2025-11-11 23:54:24] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:54:24] No se encontró producto_id para el código exacto 'sapi'. Intentando búsqueda parcial... [2025-11-11 23:54:24] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:54:24] Códigos parciales encontrados: 0 [2025-11-11 23:54:24] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:54:24] Productos encontrados por nombre: 0 [2025-11-11 23:54:24] No se encontró ningún producto con stock por ningún método [2025-11-11 23:54:24] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-11 23:54:28] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:54:28] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:54:28] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:54:28] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:54:28] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:54:28] DEBUG SESSION STATUS: 2 [2025-11-11 23:54:28] Negocio en sesión: 78.216.219-5 [2025-11-11 23:54:28] Nombre: SGB-ERP SpA [2025-11-11 23:54:28] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:54:28] Conexión exitosa a la base de datos [2025-11-11 23:54:28] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:54:28] Buscando producto con código/nombre: gomi [2025-11-11 23:54:28] DEBUG: Código recibido: 'gomi' (longitud: 4) [2025-11-11 23:54:28] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:54:28] No se encontró producto_id para el código exacto 'gomi'. Intentando búsqueda parcial... [2025-11-11 23:54:28] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:54:28] Códigos parciales encontrados: 0 [2025-11-11 23:54:28] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:54:28] Productos encontrados por nombre: 1 [2025-11-11 23:54:28] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:54:28] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:54:28] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:54:28] Códigos encontrados para ID 178: 1 [2025-11-11 23:54:28] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:54:28] Códigos con stock disponible: 1 [2025-11-11 23:54:28] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:54:28] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:54:28] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:54:28] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:54:28] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:54:28] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:54:28] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:54:28] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:54:28] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:54:28] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:54:28] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:54:28] Se encontraron 1 resultados en total. [2025-11-11 23:54:28] Obteniendo imágenes para productos: 178 [2025-11-11 23:54:28] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:54:28] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:54:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:54:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:54:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:54:45] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:54:45] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:54:45] DEBUG SESSION STATUS: 2 [2025-11-11 23:54:45] Negocio en sesión: 78.216.219-5 [2025-11-11 23:54:45] Nombre: SGB-ERP SpA [2025-11-11 23:54:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:54:45] Conexión exitosa a la base de datos [2025-11-11 23:54:45] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:54:45] Buscando producto con código/nombre: gusan [2025-11-11 23:54:45] DEBUG: Código recibido: 'gusan' (longitud: 5) [2025-11-11 23:54:45] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:54:45] No se encontró producto_id para el código exacto 'gusan'. Intentando búsqueda parcial... [2025-11-11 23:54:45] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:54:45] Códigos parciales encontrados: 0 [2025-11-11 23:54:45] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:54:45] Productos encontrados por nombre: 1 [2025-11-11 23:54:45] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:54:45] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:54:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:54:45] Códigos encontrados para ID 178: 1 [2025-11-11 23:54:45] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:54:45] Códigos con stock disponible: 1 [2025-11-11 23:54:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:54:45] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:54:45] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:54:45] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:54:45] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:54:45] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:54:45] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:54:45] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:54:45] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:54:45] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:54:45] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:54:45] Se encontraron 1 resultados en total. [2025-11-11 23:54:45] Obteniendo imágenes para productos: 178 [2025-11-11 23:54:45] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:54:45] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-11 23:57:08] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-11 23:57:08] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-11 23:57:08] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-11 23:57:08] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-11 23:57:08] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-11 23:57:08] DEBUG SESSION STATUS: 2 [2025-11-11 23:57:08] Negocio en sesión: 78.216.219-5 [2025-11-11 23:57:08] Nombre: SGB-ERP SpA [2025-11-11 23:57:08] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-11 23:57:08] Conexión exitosa a la base de datos [2025-11-11 23:57:08] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-11 23:57:08] Buscando producto con código/nombre: gusano [2025-11-11 23:57:08] DEBUG: Código recibido: 'gusano' (longitud: 6) [2025-11-11 23:57:08] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-11 23:57:08] No se encontró producto_id para el código exacto 'gusano'. Intentando búsqueda parcial... [2025-11-11 23:57:08] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-11 23:57:08] Códigos parciales encontrados: 0 [2025-11-11 23:57:08] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-11 23:57:08] Productos encontrados por nombre: 1 [2025-11-11 23:57:08] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-11 23:57:08] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-11 23:57:08] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-11 23:57:08] Códigos encontrados para ID 178: 1 [2025-11-11 23:57:08] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-11 23:57:08] Códigos con stock disponible: 1 [2025-11-11 23:57:08] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-11 23:57:08] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-11 23:57:08] Producto especial por nombre con stock disponible: 10 [2025-11-11 23:57:08] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-11 23:57:08] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-11 23:57:08] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-11 23:57:08] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-11 23:57:08] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-11 23:57:08] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-11 23:57:08] Producto por nombre agregado a resultados (ID: 178) [2025-11-11 23:57:08] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-11 23:57:08] Se encontraron 1 resultados en total. [2025-11-11 23:57:08] Obteniendo imágenes para productos: 178 [2025-11-11 23:57:08] Imágenes agregadas: 1 productos con imagen [2025-11-11 23:57:08] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-12 00:00:43] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 00:00:43] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 00:00:43] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 00:00:43] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-12 00:00:43] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-12 00:00:43] DEBUG SESSION STATUS: 2 [2025-11-12 00:00:43] Negocio en sesión: 78.216.219-5 [2025-11-12 00:00:43] Nombre: SGB-ERP SpA [2025-11-12 00:00:43] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 00:00:43] Conexión exitosa a la base de datos [2025-11-12 00:00:43] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 00:00:43] Buscando producto con código/nombre: gomit [2025-11-12 00:00:43] DEBUG: Código recibido: 'gomit' (longitud: 5) [2025-11-12 00:00:43] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 00:00:43] No se encontró producto_id para el código exacto 'gomit'. Intentando búsqueda parcial... [2025-11-12 00:00:43] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 00:00:43] Códigos parciales encontrados: 0 [2025-11-12 00:00:43] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 00:00:43] Productos encontrados por nombre: 1 [2025-11-12 00:00:43] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-12 00:00:43] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-12 00:00:43] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 00:00:43] Códigos encontrados para ID 178: 1 [2025-11-12 00:00:43] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-12 00:00:43] Códigos con stock disponible: 1 [2025-11-12 00:00:43] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-12 00:00:43] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-12 00:00:43] Producto especial por nombre con stock disponible: 10 [2025-11-12 00:00:43] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 00:00:43] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-12 00:00:43] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-12 00:00:43] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-12 00:00:43] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-12 00:00:43] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-12 00:00:43] Producto por nombre agregado a resultados (ID: 178) [2025-11-12 00:00:43] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-12 00:00:43] Se encontraron 1 resultados en total. [2025-11-12 00:00:43] Obteniendo imágenes para productos: 178 [2025-11-12 00:00:43] Imágenes agregadas: 1 productos con imagen [2025-11-12 00:00:43] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-12 00:01:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 00:01:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 00:01:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 00:01:41] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-12 00:01:41] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-12 00:01:41] DEBUG SESSION STATUS: 2 [2025-11-12 00:01:41] Negocio en sesión: 78.216.219-5 [2025-11-12 00:01:41] Nombre: SGB-ERP SpA [2025-11-12 00:01:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 00:01:41] Conexión exitosa a la base de datos [2025-11-12 00:01:41] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 00:01:41] Buscando producto con código/nombre: * [2025-11-12 00:01:41] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-12 00:01:41] Solicitud para mostrar todos los productos [2025-11-12 00:01:41] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-12 00:01:41] Productos encontrados: 1 [2025-11-12 00:01:41] Producto 0: GOMITAS GUSANO ACIDO - Códigos adicionales: NULL [2025-11-12 00:01:41] Producto agregado a resultados (ID: 178): GOMITAS GUSANO ACIDO [2025-11-12 00:01:41] Obteniendo imágenes para todos los productos: 1 [2025-11-12 00:01:41] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-12 00:01:41] Total de productos únicos encontrados: 1 [2025-11-12 00:02:37] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 00:02:37] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 00:02:37] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 00:02:37] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-12 00:02:37] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-12 00:02:37] DEBUG SESSION STATUS: 2 [2025-11-12 00:02:37] Negocio en sesión: 78.216.219-5 [2025-11-12 00:02:37] Nombre: SGB-ERP SpA [2025-11-12 00:02:37] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 00:02:37] Conexión exitosa a la base de datos [2025-11-12 00:02:37] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 00:02:37] Buscando producto con código/nombre: * [2025-11-12 00:02:37] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-12 00:02:37] Solicitud para mostrar todos los productos [2025-11-12 00:02:37] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-12 00:02:37] Productos encontrados: 1 [2025-11-12 00:02:37] Producto 0: GOMITAS GUSANO ACIDO - Códigos adicionales: NULL [2025-11-12 00:02:37] Producto agregado a resultados (ID: 178): GOMITAS GUSANO ACIDO [2025-11-12 00:02:37] Obteniendo imágenes para todos los productos: 1 [2025-11-12 00:02:37] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-12 00:02:37] Total de productos únicos encontrados: 1 [2025-11-12 00:05:35] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 00:05:35] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 00:05:35] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 00:05:35] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-12 00:05:35] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-12 00:05:35] DEBUG SESSION STATUS: 2 [2025-11-12 00:05:35] Negocio en sesión: 78.216.219-5 [2025-11-12 00:05:35] Nombre: SGB-ERP SpA [2025-11-12 00:05:35] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 00:05:35] Conexión exitosa a la base de datos [2025-11-12 00:05:35] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 00:05:35] Buscando producto con código/nombre: ran [2025-11-12 00:05:35] DEBUG: Código recibido: 'ran' (longitud: 3) [2025-11-12 00:05:35] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 00:05:35] No se encontró producto_id para el código exacto 'ran'. Intentando búsqueda parcial... [2025-11-12 00:05:35] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 00:05:35] Códigos parciales encontrados: 0 [2025-11-12 00:05:35] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 00:05:35] Productos encontrados por nombre: 1 [2025-11-12 00:05:35] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS RANAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-12 00:05:35] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-12 00:05:35] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 00:05:35] Códigos encontrados para ID 178: 1 [2025-11-12 00:05:35] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-12 00:05:35] Códigos con stock disponible: 1 [2025-11-12 00:05:35] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-12 00:05:35] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-12 00:05:35] Producto especial por nombre con stock disponible: 10 [2025-11-12 00:05:35] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 00:05:35] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-12 00:05:35] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-12 00:05:35] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-12 00:05:35] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-12 00:05:35] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-12 00:05:35] Producto por nombre agregado a resultados (ID: 178) [2025-11-12 00:05:35] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS RANAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-12 00:05:35] Se encontraron 1 resultados en total. [2025-11-12 00:05:35] Obteniendo imágenes para productos: 178 [2025-11-12 00:05:35] Imágenes agregadas: 1 productos con imagen [2025-11-12 00:05:35] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-12 00:06:21] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 00:06:21] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 00:06:21] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 00:06:21] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-12 00:06:21] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-12 00:06:21] DEBUG SESSION STATUS: 2 [2025-11-12 00:06:21] Negocio en sesión: 78.216.219-5 [2025-11-12 00:06:21] Nombre: SGB-ERP SpA [2025-11-12 00:06:21] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 00:06:21] Conexión exitosa a la base de datos [2025-11-12 00:06:21] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 00:06:21] Buscando producto con código/nombre: ranas [2025-11-12 00:06:21] DEBUG: Código recibido: 'ranas' (longitud: 5) [2025-11-12 00:06:21] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 00:06:21] No se encontró producto_id para el código exacto 'ranas'. Intentando búsqueda parcial... [2025-11-12 00:06:21] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 00:06:21] Códigos parciales encontrados: 0 [2025-11-12 00:06:21] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 00:06:21] Productos encontrados por nombre: 1 [2025-11-12 00:06:21] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS RANAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-12 00:06:21] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-12 00:06:21] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 00:06:21] Códigos encontrados para ID 178: 1 [2025-11-12 00:06:21] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-12 00:06:21] Códigos con stock disponible: 1 [2025-11-12 00:06:21] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-12 00:06:21] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-12 00:06:21] Producto especial por nombre con stock disponible: 10 [2025-11-12 00:06:21] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 00:06:21] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-12 00:06:21] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-12 00:06:21] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-12 00:06:21] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-12 00:06:21] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-12 00:06:21] Producto por nombre agregado a resultados (ID: 178) [2025-11-12 00:06:21] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS RANAS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-12 00:06:21] Se encontraron 1 resultados en total. [2025-11-12 00:06:21] Obteniendo imágenes para productos: 178 [2025-11-12 00:06:21] Imágenes agregadas: 1 productos con imagen [2025-11-12 00:06:21] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-12 00:06:29] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 00:06:29] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 00:06:29] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 00:06:29] DEBUG SESSION: {"last_regeneration":1762903331,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA)."} [2025-11-12 00:06:29] DEBUG SESSION ID: 8ok8hf997csn4sqc8sndv9f7tu [2025-11-12 00:06:29] DEBUG SESSION STATUS: 2 [2025-11-12 00:06:29] Negocio en sesión: 78.216.219-5 [2025-11-12 00:06:29] Nombre: SGB-ERP SpA [2025-11-12 00:06:29] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 00:06:29] Conexión exitosa a la base de datos [2025-11-12 00:06:29] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 00:06:29] Buscando producto con código/nombre: * [2025-11-12 00:06:29] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-12 00:06:29] Solicitud para mostrar todos los productos [2025-11-12 00:06:29] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-12 00:06:29] Productos encontrados: 1 [2025-11-12 00:06:29] Producto 0: GOMITAS RANAS - Códigos adicionales: NULL [2025-11-12 00:06:29] Producto agregado a resultados (ID: 178): GOMITAS RANAS [2025-11-12 00:06:29] Obteniendo imágenes para todos los productos: 1 [2025-11-12 00:06:29] Imágenes agregadas (mostrar todos): 1 productos con imagen [2025-11-12 00:06:29] Total de productos únicos encontrados: 1 [2025-11-12 10:36:38] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 10:36:38] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 10:36:38] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 10:36:38] DEBUG SESSION: {"last_regeneration":1762954089,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-12 10:36:38] DEBUG SESSION ID: p9v4vtfi4ir5onge6ioir88l7p [2025-11-12 10:36:38] DEBUG SESSION STATUS: 2 [2025-11-12 10:36:38] Negocio en sesión: 78.216.219-5 [2025-11-12 10:36:38] Nombre: SGB-ERP SpA [2025-11-12 10:36:38] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 10:36:38] Conexión exitosa a la base de datos [2025-11-12 10:36:38] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 10:36:38] Buscando producto con código/nombre: * [2025-11-12 10:36:38] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-12 10:36:38] Solicitud para mostrar todos los productos [2025-11-12 10:36:38] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-12 10:36:38] Productos encontrados: 3 [2025-11-12 10:36:38] Producto 0: COCA COLA NORMAL 2 L DESECHABLE - Códigos adicionales: NULL [2025-11-12 10:36:38] Producto 1: COCA COLA NORMAL 2 L RETORNABLE - Códigos adicionales: NULL [2025-11-12 10:36:38] Producto 2: GOMITAS GUSANO ACIDO2 - Códigos adicionales: NULL [2025-11-12 10:36:38] Producto agregado a resultados (ID: 185): COCA COLA NORMAL 2 L DESECHABLE [2025-11-12 10:36:38] Producto agregado a resultados (ID: 183): COCA COLA NORMAL 2 L RETORNABLE [2025-11-12 10:36:38] Producto agregado a resultados (ID: 178): GOMITAS GUSANO ACIDO2 [2025-11-12 10:36:38] Obteniendo imágenes para todos los productos: 3 [2025-11-12 10:36:38] Imágenes agregadas (mostrar todos): 3 productos con imagen [2025-11-12 10:36:38] Total de productos únicos encontrados: 3 [2025-11-12 10:36:47] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 10:36:47] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 10:36:47] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 10:36:47] DEBUG SESSION: {"last_regeneration":1762954089,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-12 10:36:47] DEBUG SESSION ID: p9v4vtfi4ir5onge6ioir88l7p [2025-11-12 10:36:47] DEBUG SESSION STATUS: 2 [2025-11-12 10:36:47] Negocio en sesión: 78.216.219-5 [2025-11-12 10:36:47] Nombre: SGB-ERP SpA [2025-11-12 10:36:47] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 10:36:47] Conexión exitosa a la base de datos [2025-11-12 10:36:47] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 10:36:47] Buscando producto con código/nombre: * [2025-11-12 10:36:47] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-12 10:36:47] Solicitud para mostrar todos los productos [2025-11-12 10:36:47] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-12 10:36:47] Productos encontrados: 3 [2025-11-12 10:36:47] Producto 0: COCA COLA NORMAL 2 L DESECHABLE - Códigos adicionales: NULL [2025-11-12 10:36:47] Producto 1: COCA COLA NORMAL 2 L RETORNABLE - Códigos adicionales: NULL [2025-11-12 10:36:47] Producto 2: GOMITAS GUSANO ACIDO2 - Códigos adicionales: NULL [2025-11-12 10:36:47] Producto agregado a resultados (ID: 185): COCA COLA NORMAL 2 L DESECHABLE [2025-11-12 10:36:47] Producto agregado a resultados (ID: 183): COCA COLA NORMAL 2 L RETORNABLE [2025-11-12 10:36:47] Producto agregado a resultados (ID: 178): GOMITAS GUSANO ACIDO2 [2025-11-12 10:36:47] Obteniendo imágenes para todos los productos: 3 [2025-11-12 10:36:47] Imágenes agregadas (mostrar todos): 3 productos con imagen [2025-11-12 10:36:47] Total de productos únicos encontrados: 3 [2025-11-12 10:42:46] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 10:42:46] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 10:42:46] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 10:42:46] DEBUG SESSION: {"last_regeneration":1762954709,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","redirect_after_login":"\/admin\/catalogo\/gestionar_imagenes.php","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"success_mensaje":"Producto actualizado correctamente (stock, precios e IVA).","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-12 10:42:46] DEBUG SESSION ID: d68auvjt2c7shqe9ilhf0ej4aa [2025-11-12 10:42:46] DEBUG SESSION STATUS: 2 [2025-11-12 10:42:46] Negocio en sesión: 78.216.219-5 [2025-11-12 10:42:46] Nombre: SGB-ERP SpA [2025-11-12 10:42:46] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 10:42:46] Conexión exitosa a la base de datos [2025-11-12 10:42:46] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 10:42:46] Buscando producto con código/nombre: c [2025-11-12 10:42:46] DEBUG: Código recibido: 'c' (longitud: 1) [2025-11-12 10:42:46] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 10:42:46] No se encontró producto_id para el código exacto 'c'. Intentando búsqueda parcial... [2025-11-12 10:42:46] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 10:42:46] Códigos parciales encontrados: 0 [2025-11-12 10:42:46] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 10:42:46] Productos encontrados por nombre: 2 [2025-11-12 10:42:46] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO2","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-12 10:42:46] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-12 10:42:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 10:42:46] Códigos encontrados para ID 178: 1 [2025-11-12 10:42:46] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-12 10:42:46] Códigos con stock disponible: 1 [2025-11-12 10:42:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-12 10:42:46] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-12 10:42:46] Producto especial por nombre con stock disponible: 10 [2025-11-12 10:42:46] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 10:42:46] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-12 10:42:46] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-12 10:42:46] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-12 10:42:46] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-12 10:42:46] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-12 10:42:46] Producto por nombre agregado a resultados (ID: 178) [2025-11-12 10:42:46] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS GUSANO ACIDO2","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-12 10:42:46] Procesando producto encontrado por nombre: {"id":187,"codigo":"17629548612194","nombre":"COCA COLA NORMAL 2 L RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","hash_producto":"e2341de5c42186f90e42d27a1697f0d0","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 10:42:46] Usando lote específico detectado: ninguno para producto ID: 187 [2025-11-12 10:42:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 10:42:46] Códigos encontrados para ID 187: 1 [2025-11-12 10:42:46] Detalle de códigos: [{"id":178,"codigo":"17629548612194","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-12 10:42:46] Códigos con stock disponible: 1 [2025-11-12 10:42:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 10:42:46] Stock total calculado para ID 187: 10 [2025-11-12 10:42:46] Producto NORMAL ID: 187 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 10:42:46] Usando primer código disponible en orden FIFO para ID 187: {"id":178,"codigo":"17629548612194","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null} [2025-11-12 10:42:46] Producto por nombre agregado a resultados (ID: 187) [2025-11-12 10:42:46] Datos finales del producto: {"id":187,"codigo":"17629548612194","nombre":"COCA COLA NORMAL 2 L RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":10,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","hash_producto":"e2341de5c42186f90e42d27a1697f0d0","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":178,"codigo":"17629548612194","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}],"precio":"2000.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSAx7fB9VY4vczojBRyRBYWLNtX-ywdepBS-A&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 l","stock_disponible":true} [2025-11-12 10:42:46] Se encontraron 2 resultados en total. [2025-11-12 10:42:46] Obteniendo imágenes para productos: 178, 187 [2025-11-12 10:42:46] Imágenes agregadas: 2 productos con imagen [2025-11-12 10:42:46] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 2 resultados) === [2025-11-12 22:22:50] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 22:22:50] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 22:22:50] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 22:22:50] DEBUG SESSION: {"last_regeneration":1762996243,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-12 22:22:50] DEBUG SESSION ID: r20omr2esstic5cbevp2hqdggf [2025-11-12 22:22:50] DEBUG SESSION STATUS: 2 [2025-11-12 22:22:50] Negocio en sesión: 78.216.219-5 [2025-11-12 22:22:50] Nombre: SGB-ERP SpA [2025-11-12 22:22:50] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 22:22:50] Conexión exitosa a la base de datos [2025-11-12 22:22:50] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 22:22:50] Buscando producto con código/nombre: gomi [2025-11-12 22:22:50] DEBUG: Código recibido: 'gomi' (longitud: 4) [2025-11-12 22:22:50] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 22:22:50] No se encontró producto_id para el código exacto 'gomi'. Intentando búsqueda parcial... [2025-11-12 22:22:50] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 22:22:50] Códigos parciales encontrados: 0 [2025-11-12 22:22:50] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 22:22:50] Productos encontrados por nombre: 1 [2025-11-12 22:22:50] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"especial","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-12 22:22:50] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-12 22:22:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 22:22:50] Códigos encontrados para ID 178: 1 [2025-11-12 22:22:50] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-12 22:22:50] Códigos con stock disponible: 1 [2025-11-12 22:22:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-12 22:22:50] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-12 22:22:50] Producto especial por nombre con stock disponible: 10 [2025-11-12 22:22:50] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 22:22:50] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-12 22:22:50] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-12 22:22:50] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-12 22:22:50] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-12 22:22:50] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-12 22:22:50] Producto por nombre agregado a resultados (ID: 178) [2025-11-12 22:22:50] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"especial","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-12 22:22:50] Se encontraron 1 resultados en total. [2025-11-12 22:22:50] Obteniendo imágenes para productos: 178 [2025-11-12 22:22:50] Imágenes agregadas: 1 productos con imagen [2025-11-12 22:22:50] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-12 23:25:50] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 23:25:50] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 23:25:50] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 23:25:50] DEBUG SESSION: {"last_regeneration":1762996243,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-12 23:25:50] DEBUG SESSION ID: r20omr2esstic5cbevp2hqdggf [2025-11-12 23:25:50] DEBUG SESSION STATUS: 2 [2025-11-12 23:25:50] Negocio en sesión: 78.216.219-5 [2025-11-12 23:25:50] Nombre: SGB-ERP SpA [2025-11-12 23:25:50] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 23:25:50] Conexión exitosa a la base de datos [2025-11-12 23:25:50] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 23:25:50] Buscando producto con código/nombre: gomitas [2025-11-12 23:25:50] DEBUG: Código recibido: 'gomitas' (longitud: 7) [2025-11-12 23:25:50] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 23:25:50] No se encontró producto_id para el código exacto 'gomitas'. Intentando búsqueda parcial... [2025-11-12 23:25:50] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 23:25:50] Códigos parciales encontrados: 0 [2025-11-12 23:25:50] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 23:25:50] Productos encontrados por nombre: 1 [2025-11-12 23:25:50] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"especial","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-12 23:25:50] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-12 23:25:50] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:25:50] Códigos encontrados para ID 178: 1 [2025-11-12 23:25:50] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-12 23:25:50] Códigos con stock disponible: 1 [2025-11-12 23:25:50] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-12 23:25:50] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-12 23:25:50] Producto especial por nombre con stock disponible: 10 [2025-11-12 23:25:50] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:25:50] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-12 23:25:50] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-12 23:25:50] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-12 23:25:50] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-12 23:25:50] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-12 23:25:50] Producto por nombre agregado a resultados (ID: 178) [2025-11-12 23:25:50] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"especial","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-12 23:25:50] Se encontraron 1 resultados en total. [2025-11-12 23:25:50] Obteniendo imágenes para productos: 178 [2025-11-12 23:25:50] Imágenes agregadas: 1 productos con imagen [2025-11-12 23:25:50] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-12 23:41:23] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 23:41:23] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 23:41:23] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 23:41:23] DEBUG SESSION: {"last_regeneration":1762996243,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-12 23:41:23] DEBUG SESSION ID: r20omr2esstic5cbevp2hqdggf [2025-11-12 23:41:23] DEBUG SESSION STATUS: 2 [2025-11-12 23:41:23] Negocio en sesión: 78.216.219-5 [2025-11-12 23:41:23] Nombre: SGB-ERP SpA [2025-11-12 23:41:23] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 23:41:23] Conexión exitosa a la base de datos [2025-11-12 23:41:23] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-12 23:41:23] Buscando producto con código/nombre: 17629970831784 [2025-11-12 23:41:23] DEBUG: Código recibido: '17629970831784' (longitud: 14) [2025-11-12 23:41:23] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 23:41:23] ID de producto encontrado por código '17629970831784': 189 [2025-11-12 23:41:23] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.hash_producto, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-12 23:41:23] Detalles del producto encontrados: {"id":189,"nombre":"COCA-COLA 2 LITROS NORMAL RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"2.00","hash_producto":"8fc0c24b0199fa10c8700ccb4f8f2f4c","marca_nombre":"Coca-Cola","tipo_control_peso":"riguroso"} [2025-11-12 23:41:23] Producto normal detectado por código (ID: 189) [2025-11-12 23:41:23] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-12 23:41:23] Stock total calculado: 10 [2025-11-12 23:41:23] DEBUG: Buscando codigo_barras_id para producto_id: 189, codigo: 17629970831784 [2025-11-12 23:41:23] DEBUG: codigo_barras_id encontrado: 180 [2025-11-12 23:41:23] Producto ID: 189 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:41:23] DEBUG: codigo_barras_id agregado al producto: 180 [2025-11-12 23:41:23] Producto normal por código agregado a resultados (ID: 189) [2025-11-12 23:41:23] Datos finales del producto por código: {"id":189,"nombre":"COCA-COLA 2 LITROS NORMAL RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"2.00","hash_producto":"8fc0c24b0199fa10c8700ccb4f8f2f4c","marca_nombre":"Coca-Cola","tipo_control_peso":"riguroso","codigo":"17629970831784","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":180,"precio":"1765.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSAx7fB9VY4vczojBRyRBYWLNtX-ywdepBS-A&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 l","stock_disponible":true} [2025-11-12 23:41:23] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 23:41:23] Productos encontrados por nombre: 0 [2025-11-12 23:41:23] Se encontraron 1 resultados en total. [2025-11-12 23:41:23] Obteniendo imágenes para productos: 189 [2025-11-12 23:41:23] Imágenes agregadas: 1 productos con imagen [2025-11-12 23:41:23] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-12 23:50:56] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 23:50:56] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 23:50:56] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 23:50:56] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-12 23:50:56] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-12 23:50:56] DEBUG SESSION STATUS: 2 [2025-11-12 23:50:56] Negocio en sesión: 17.612.457-1 [2025-11-12 23:50:56] Nombre: Mis dos princesas [2025-11-12 23:50:56] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 23:50:56] Conexión exitosa a la base de datos [2025-11-12 23:50:56] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-12 23:50:56] Buscando producto con código/nombre: gomitas [2025-11-12 23:50:56] DEBUG: Código recibido: 'gomitas' (longitud: 7) [2025-11-12 23:50:56] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 23:50:56] No se encontró producto_id para el código exacto 'gomitas'. Intentando búsqueda parcial... [2025-11-12 23:50:56] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 23:50:56] Códigos parciales encontrados: 0 [2025-11-12 23:50:56] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 23:50:56] Productos encontrados por nombre: 4 [2025-11-12 23:50:56] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:50:56] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-12 23:50:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:50:56] Códigos encontrados para ID 103: 1 [2025-11-12 23:50:56] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-12 23:50:56] Códigos con stock disponible: 1 [2025-11-12 23:50:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:50:56] Stock total calculado para ID 103: 8 [2025-11-12 23:50:56] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:50:56] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-12 23:50:56] Producto por nombre agregado a resultados (ID: 103) [2025-11-12 23:50:56] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-12 23:50:56] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:50:56] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-12 23:50:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:50:56] Códigos encontrados para ID 104: 1 [2025-11-12 23:50:56] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-12 23:50:56] Códigos con stock disponible: 1 [2025-11-12 23:50:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:50:56] Stock total calculado para ID 104: 8 [2025-11-12 23:50:56] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:50:56] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-12 23:50:56] Producto por nombre agregado a resultados (ID: 104) [2025-11-12 23:50:56] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-12 23:50:56] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:50:56] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-12 23:50:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:50:56] Códigos encontrados para ID 105: 1 [2025-11-12 23:50:56] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-12 23:50:56] Códigos con stock disponible: 1 [2025-11-12 23:50:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:50:56] Stock total calculado para ID 105: 5 [2025-11-12 23:50:56] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:50:56] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-12 23:50:56] Producto por nombre agregado a resultados (ID: 105) [2025-11-12 23:50:56] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-12 23:50:56] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:50:56] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-12 23:50:56] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:50:56] Códigos encontrados para ID 106: 1 [2025-11-12 23:50:56] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-12 23:50:56] Códigos con stock disponible: 1 [2025-11-12 23:50:56] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:50:56] Stock total calculado para ID 106: 10 [2025-11-12 23:50:56] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:50:56] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-12 23:50:56] Producto por nombre agregado a resultados (ID: 106) [2025-11-12 23:50:56] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-12 23:50:56] Se encontraron 4 resultados en total. [2025-11-12 23:50:56] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-12 23:50:56] Imágenes agregadas: 4 productos con imagen [2025-11-12 23:50:56] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-12 23:55:35] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 23:55:35] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 23:55:35] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 23:55:35] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-12 23:55:35] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-12 23:55:35] DEBUG SESSION STATUS: 2 [2025-11-12 23:55:35] Negocio en sesión: 17.612.457-1 [2025-11-12 23:55:35] Nombre: Mis dos princesas [2025-11-12 23:55:35] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 23:55:35] Conexión exitosa a la base de datos [2025-11-12 23:55:35] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-12 23:55:35] Buscando producto con código/nombre: gomit [2025-11-12 23:55:35] DEBUG: Código recibido: 'gomit' (longitud: 5) [2025-11-12 23:55:35] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 23:55:35] No se encontró producto_id para el código exacto 'gomit'. Intentando búsqueda parcial... [2025-11-12 23:55:35] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 23:55:35] Códigos parciales encontrados: 0 [2025-11-12 23:55:35] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 23:55:35] Productos encontrados por nombre: 4 [2025-11-12 23:55:35] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:55:35] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-12 23:55:35] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:55:35] Códigos encontrados para ID 103: 1 [2025-11-12 23:55:35] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-12 23:55:35] Códigos con stock disponible: 1 [2025-11-12 23:55:35] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:55:35] Stock total calculado para ID 103: 8 [2025-11-12 23:55:35] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:55:35] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-12 23:55:35] Producto por nombre agregado a resultados (ID: 103) [2025-11-12 23:55:35] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-12 23:55:35] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:55:35] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-12 23:55:35] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:55:35] Códigos encontrados para ID 104: 1 [2025-11-12 23:55:35] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-12 23:55:35] Códigos con stock disponible: 1 [2025-11-12 23:55:35] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:55:35] Stock total calculado para ID 104: 8 [2025-11-12 23:55:35] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:55:35] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-12 23:55:35] Producto por nombre agregado a resultados (ID: 104) [2025-11-12 23:55:35] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-12 23:55:35] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:55:35] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-12 23:55:35] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:55:35] Códigos encontrados para ID 105: 1 [2025-11-12 23:55:35] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-12 23:55:35] Códigos con stock disponible: 1 [2025-11-12 23:55:35] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:55:35] Stock total calculado para ID 105: 5 [2025-11-12 23:55:35] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:55:35] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-12 23:55:35] Producto por nombre agregado a resultados (ID: 105) [2025-11-12 23:55:35] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-12 23:55:35] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:55:35] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-12 23:55:35] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:55:35] Códigos encontrados para ID 106: 1 [2025-11-12 23:55:35] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-12 23:55:35] Códigos con stock disponible: 1 [2025-11-12 23:55:35] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:55:35] Stock total calculado para ID 106: 10 [2025-11-12 23:55:35] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:55:35] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-12 23:55:35] Producto por nombre agregado a resultados (ID: 106) [2025-11-12 23:55:35] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-12 23:55:35] Se encontraron 4 resultados en total. [2025-11-12 23:55:35] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-12 23:55:35] Imágenes agregadas: 4 productos con imagen [2025-11-12 23:55:35] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-12 23:56:43] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 23:56:43] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 23:56:43] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 23:56:43] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-12 23:56:43] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-12 23:56:43] DEBUG SESSION STATUS: 2 [2025-11-12 23:56:43] Negocio en sesión: 17.612.457-1 [2025-11-12 23:56:43] Nombre: Mis dos princesas [2025-11-12 23:56:43] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 23:56:43] Conexión exitosa a la base de datos [2025-11-12 23:56:43] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-12 23:56:43] Buscando producto con código/nombre: 7898591453212 [2025-11-12 23:56:43] DEBUG: Código recibido: '7898591453212' (longitud: 13) [2025-11-12 23:56:43] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 23:56:43] ID de producto encontrado por código '7898591453212': 103 [2025-11-12 23:56:43] Obteniendo detalles del producto: SELECT p.id, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.hash_producto, m.nombre AS marca_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id WHERE p.id = :id_producto AND p.negocio_rut = :negocio_rut [2025-11-12 23:56:43] Detalles del producto encontrados: {"id":103,"nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_control_peso":"riguroso"} [2025-11-12 23:56:43] Producto normal detectado por código (ID: 103) [2025-11-12 23:56:43] Calculando stock total: SELECT SUM(cantidad) as stock_total FROM codigos_barras WHERE producto_id = :id_producto [2025-11-12 23:56:43] Stock total calculado: 8 [2025-11-12 23:56:43] DEBUG: Buscando codigo_barras_id para producto_id: 103, codigo: 7898591453212 [2025-11-12 23:56:43] DEBUG: codigo_barras_id encontrado: 119 [2025-11-12 23:56:43] Producto ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:56:43] DEBUG: codigo_barras_id agregado al producto: 119 [2025-11-12 23:56:43] Producto normal por código agregado a resultados (ID: 103) [2025-11-12 23:56:43] Datos finales del producto por código: {"id":103,"nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","tipo_codigo":"manual","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_control_peso":"riguroso","codigo":"7898591453212","es_busqueda_por_codigo":true,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigo_barras_id":119,"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-12 23:56:43] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 23:56:43] Productos encontrados por nombre: 0 [2025-11-12 23:56:43] Se encontraron 1 resultados en total. [2025-11-12 23:56:43] Obteniendo imágenes para productos: 103 [2025-11-12 23:56:43] Imágenes agregadas: 1 productos con imagen [2025-11-12 23:56:43] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-12 23:58:26] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-12 23:58:26] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-12 23:58:26] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-12 23:58:26] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-12 23:58:26] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-12 23:58:26] DEBUG SESSION STATUS: 2 [2025-11-12 23:58:26] Negocio en sesión: 17.612.457-1 [2025-11-12 23:58:26] Nombre: Mis dos princesas [2025-11-12 23:58:26] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-12 23:58:26] Conexión exitosa a la base de datos [2025-11-12 23:58:26] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-12 23:58:26] Buscando producto con código/nombre: gomitas [2025-11-12 23:58:26] DEBUG: Código recibido: 'gomitas' (longitud: 7) [2025-11-12 23:58:26] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-12 23:58:26] No se encontró producto_id para el código exacto 'gomitas'. Intentando búsqueda parcial... [2025-11-12 23:58:26] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-12 23:58:26] Códigos parciales encontrados: 0 [2025-11-12 23:58:26] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-12 23:58:26] Productos encontrados por nombre: 4 [2025-11-12 23:58:26] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:58:26] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-12 23:58:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:58:26] Códigos encontrados para ID 103: 1 [2025-11-12 23:58:26] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-12 23:58:26] Códigos con stock disponible: 1 [2025-11-12 23:58:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:58:26] Stock total calculado para ID 103: 8 [2025-11-12 23:58:26] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:58:26] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-12 23:58:26] Producto por nombre agregado a resultados (ID: 103) [2025-11-12 23:58:26] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-12 23:58:26] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:58:26] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-12 23:58:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:58:26] Códigos encontrados para ID 104: 1 [2025-11-12 23:58:26] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-12 23:58:26] Códigos con stock disponible: 1 [2025-11-12 23:58:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:58:26] Stock total calculado para ID 104: 8 [2025-11-12 23:58:26] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:58:26] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-12 23:58:26] Producto por nombre agregado a resultados (ID: 104) [2025-11-12 23:58:26] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-12 23:58:26] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:58:26] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-12 23:58:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:58:26] Códigos encontrados para ID 105: 1 [2025-11-12 23:58:26] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-12 23:58:26] Códigos con stock disponible: 1 [2025-11-12 23:58:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:58:26] Stock total calculado para ID 105: 5 [2025-11-12 23:58:26] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:58:26] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-12 23:58:26] Producto por nombre agregado a resultados (ID: 105) [2025-11-12 23:58:26] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-12 23:58:26] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-12 23:58:26] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-12 23:58:26] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-12 23:58:26] Códigos encontrados para ID 106: 1 [2025-11-12 23:58:26] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-12 23:58:26] Códigos con stock disponible: 1 [2025-11-12 23:58:26] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-12 23:58:26] Stock total calculado para ID 106: 10 [2025-11-12 23:58:26] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-12 23:58:26] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-12 23:58:26] Producto por nombre agregado a resultados (ID: 106) [2025-11-12 23:58:26] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-12 23:58:26] Se encontraron 4 resultados en total. [2025-11-12 23:58:26] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-12 23:58:26] Imágenes agregadas: 4 productos con imagen [2025-11-12 23:58:26] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-13 00:01:20] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:01:20] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:01:20] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:01:20] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-13 00:01:20] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-13 00:01:20] DEBUG SESSION STATUS: 2 [2025-11-13 00:01:20] Negocio en sesión: 17.612.457-1 [2025-11-13 00:01:20] Nombre: Mis dos princesas [2025-11-13 00:01:20] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:01:20] Conexión exitosa a la base de datos [2025-11-13 00:01:20] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-13 00:01:20] Buscando producto con código/nombre: gomitas [2025-11-13 00:01:20] DEBUG: Código recibido: 'gomitas' (longitud: 7) [2025-11-13 00:01:20] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 00:01:20] No se encontró producto_id para el código exacto 'gomitas'. Intentando búsqueda parcial... [2025-11-13 00:01:20] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 00:01:20] Códigos parciales encontrados: 0 [2025-11-13 00:01:20] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 00:01:20] Productos encontrados por nombre: 4 [2025-11-13 00:01:20] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:01:20] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-13 00:01:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:01:20] Códigos encontrados para ID 103: 1 [2025-11-13 00:01:20] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-13 00:01:20] Códigos con stock disponible: 1 [2025-11-13 00:01:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:01:20] Stock total calculado para ID 103: 8 [2025-11-13 00:01:20] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:01:20] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-13 00:01:20] Producto por nombre agregado a resultados (ID: 103) [2025-11-13 00:01:20] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:01:20] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:01:20] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-13 00:01:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:01:20] Códigos encontrados para ID 104: 1 [2025-11-13 00:01:20] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-13 00:01:20] Códigos con stock disponible: 1 [2025-11-13 00:01:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:01:20] Stock total calculado para ID 104: 8 [2025-11-13 00:01:20] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:01:20] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-13 00:01:20] Producto por nombre agregado a resultados (ID: 104) [2025-11-13 00:01:20] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:01:20] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:01:20] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-13 00:01:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:01:20] Códigos encontrados para ID 105: 1 [2025-11-13 00:01:20] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-13 00:01:20] Códigos con stock disponible: 1 [2025-11-13 00:01:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:01:20] Stock total calculado para ID 105: 5 [2025-11-13 00:01:20] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:01:20] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-13 00:01:20] Producto por nombre agregado a resultados (ID: 105) [2025-11-13 00:01:20] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-13 00:01:20] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:01:20] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-13 00:01:20] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:01:20] Códigos encontrados para ID 106: 1 [2025-11-13 00:01:20] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-13 00:01:20] Códigos con stock disponible: 1 [2025-11-13 00:01:20] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:01:20] Stock total calculado para ID 106: 10 [2025-11-13 00:01:20] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:01:20] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-13 00:01:20] Producto por nombre agregado a resultados (ID: 106) [2025-11-13 00:01:20] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-13 00:01:20] Se encontraron 4 resultados en total. [2025-11-13 00:01:20] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-13 00:01:20] Imágenes agregadas: 4 productos con imagen [2025-11-13 00:01:20] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-13 00:02:55] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:02:55] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:02:55] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:02:55] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-13 00:02:55] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-13 00:02:55] DEBUG SESSION STATUS: 2 [2025-11-13 00:02:55] Negocio en sesión: 17.612.457-1 [2025-11-13 00:02:55] Nombre: Mis dos princesas [2025-11-13 00:02:55] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:02:55] Conexión exitosa a la base de datos [2025-11-13 00:02:55] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-13 00:02:55] Buscando producto con código/nombre: * [2025-11-13 00:02:55] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-13 00:02:55] Solicitud para mostrar todos los productos [2025-11-13 00:02:55] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-13 00:02:55] Productos encontrados: 4 [2025-11-13 00:02:55] Producto 0: GOMITAS DENTADURAS - Códigos adicionales: NULL [2025-11-13 00:02:55] Producto 1: GOMITAS GUSANO ACIDO - Códigos adicionales: NULL [2025-11-13 00:02:55] Producto 2: GOMITAS PIRATE SKULLS - Códigos adicionales: NULL [2025-11-13 00:02:55] Producto 3: GOMITAS RANAS - Códigos adicionales: NULL [2025-11-13 00:02:55] Producto agregado a resultados (ID: 103): GOMITAS DENTADURAS [2025-11-13 00:02:55] Producto agregado a resultados (ID: 105): GOMITAS GUSANO ACIDO [2025-11-13 00:02:55] Producto agregado a resultados (ID: 106): GOMITAS PIRATE SKULLS [2025-11-13 00:02:55] Producto agregado a resultados (ID: 104): GOMITAS RANAS [2025-11-13 00:02:55] Obteniendo imágenes para todos los productos: 4 [2025-11-13 00:02:55] Imágenes agregadas (mostrar todos): 4 productos con imagen [2025-11-13 00:02:55] Total de productos únicos encontrados: 4 [2025-11-13 00:03:00] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:03:00] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:03:00] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:03:00] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-13 00:03:00] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-13 00:03:00] DEBUG SESSION STATUS: 2 [2025-11-13 00:03:00] Negocio en sesión: 17.612.457-1 [2025-11-13 00:03:00] Nombre: Mis dos princesas [2025-11-13 00:03:00] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:03:00] Conexión exitosa a la base de datos [2025-11-13 00:03:00] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-13 00:03:00] Buscando producto con código/nombre: * [2025-11-13 00:03:00] DEBUG: Código recibido: '*' (longitud: 1) [2025-11-13 00:03:00] Solicitud para mostrar todos los productos [2025-11-13 00:03:00] Ejecutando consulta para todos los productos: SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.tipo_codigo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_control_peso, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, (p.modo_venta = 'PESO') as es_por_peso, (p.modo_venta = 'PRECIO_ABIERTO') as es_precio_abierto, (p.tipo_codigo = 'especial') as es_especial, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT 100 [2025-11-13 00:03:00] Productos encontrados: 4 [2025-11-13 00:03:00] Producto 0: GOMITAS DENTADURAS - Códigos adicionales: NULL [2025-11-13 00:03:00] Producto 1: GOMITAS GUSANO ACIDO - Códigos adicionales: NULL [2025-11-13 00:03:00] Producto 2: GOMITAS PIRATE SKULLS - Códigos adicionales: NULL [2025-11-13 00:03:00] Producto 3: GOMITAS RANAS - Códigos adicionales: NULL [2025-11-13 00:03:00] Producto agregado a resultados (ID: 103): GOMITAS DENTADURAS [2025-11-13 00:03:00] Producto agregado a resultados (ID: 105): GOMITAS GUSANO ACIDO [2025-11-13 00:03:00] Producto agregado a resultados (ID: 106): GOMITAS PIRATE SKULLS [2025-11-13 00:03:00] Producto agregado a resultados (ID: 104): GOMITAS RANAS [2025-11-13 00:03:00] Obteniendo imágenes para todos los productos: 4 [2025-11-13 00:03:00] Imágenes agregadas (mostrar todos): 4 productos con imagen [2025-11-13 00:03:00] Total de productos únicos encontrados: 4 [2025-11-13 00:03:13] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:03:13] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:03:13] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:03:13] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-13 00:03:13] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-13 00:03:13] DEBUG SESSION STATUS: 2 [2025-11-13 00:03:13] Negocio en sesión: 17.612.457-1 [2025-11-13 00:03:13] Nombre: Mis dos princesas [2025-11-13 00:03:13] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:03:13] Conexión exitosa a la base de datos [2025-11-13 00:03:13] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-13 00:03:13] Buscando producto con código/nombre: gomi [2025-11-13 00:03:13] DEBUG: Código recibido: 'gomi' (longitud: 4) [2025-11-13 00:03:13] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 00:03:13] No se encontró producto_id para el código exacto 'gomi'. Intentando búsqueda parcial... [2025-11-13 00:03:13] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 00:03:13] Códigos parciales encontrados: 0 [2025-11-13 00:03:13] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 00:03:13] Productos encontrados por nombre: 4 [2025-11-13 00:03:13] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:13] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-13 00:03:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:13] Códigos encontrados para ID 103: 1 [2025-11-13 00:03:13] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-13 00:03:13] Códigos con stock disponible: 1 [2025-11-13 00:03:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:13] Stock total calculado para ID 103: 8 [2025-11-13 00:03:13] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:13] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-13 00:03:13] Producto por nombre agregado a resultados (ID: 103) [2025-11-13 00:03:13] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:03:13] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:13] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-13 00:03:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:13] Códigos encontrados para ID 104: 1 [2025-11-13 00:03:13] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-13 00:03:13] Códigos con stock disponible: 1 [2025-11-13 00:03:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:13] Stock total calculado para ID 104: 8 [2025-11-13 00:03:13] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:13] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-13 00:03:13] Producto por nombre agregado a resultados (ID: 104) [2025-11-13 00:03:13] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:03:13] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:13] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-13 00:03:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:13] Códigos encontrados para ID 105: 1 [2025-11-13 00:03:13] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-13 00:03:13] Códigos con stock disponible: 1 [2025-11-13 00:03:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:13] Stock total calculado para ID 105: 5 [2025-11-13 00:03:13] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:13] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-13 00:03:13] Producto por nombre agregado a resultados (ID: 105) [2025-11-13 00:03:13] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-13 00:03:13] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:13] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-13 00:03:13] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:13] Códigos encontrados para ID 106: 1 [2025-11-13 00:03:13] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-13 00:03:13] Códigos con stock disponible: 1 [2025-11-13 00:03:13] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:13] Stock total calculado para ID 106: 10 [2025-11-13 00:03:13] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:13] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-13 00:03:13] Producto por nombre agregado a resultados (ID: 106) [2025-11-13 00:03:13] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-13 00:03:13] Se encontraron 4 resultados en total. [2025-11-13 00:03:13] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-13 00:03:13] Imágenes agregadas: 4 productos con imagen [2025-11-13 00:03:13] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-13 00:03:19] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:03:19] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:03:19] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:03:19] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-13 00:03:19] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-13 00:03:19] DEBUG SESSION STATUS: 2 [2025-11-13 00:03:19] Negocio en sesión: 17.612.457-1 [2025-11-13 00:03:19] Nombre: Mis dos princesas [2025-11-13 00:03:19] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:03:19] Conexión exitosa a la base de datos [2025-11-13 00:03:19] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-13 00:03:19] Buscando producto con código/nombre: gomit [2025-11-13 00:03:19] DEBUG: Código recibido: 'gomit' (longitud: 5) [2025-11-13 00:03:19] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 00:03:19] No se encontró producto_id para el código exacto 'gomit'. Intentando búsqueda parcial... [2025-11-13 00:03:19] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 00:03:19] Códigos parciales encontrados: 0 [2025-11-13 00:03:19] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 00:03:19] Productos encontrados por nombre: 4 [2025-11-13 00:03:19] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:19] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-13 00:03:19] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:19] Códigos encontrados para ID 103: 1 [2025-11-13 00:03:19] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-13 00:03:19] Códigos con stock disponible: 1 [2025-11-13 00:03:19] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:19] Stock total calculado para ID 103: 8 [2025-11-13 00:03:19] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:19] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-13 00:03:19] Producto por nombre agregado a resultados (ID: 103) [2025-11-13 00:03:19] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:03:19] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:19] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-13 00:03:19] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:19] Códigos encontrados para ID 104: 1 [2025-11-13 00:03:19] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-13 00:03:19] Códigos con stock disponible: 1 [2025-11-13 00:03:19] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:19] Stock total calculado para ID 104: 8 [2025-11-13 00:03:19] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:19] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-13 00:03:19] Producto por nombre agregado a resultados (ID: 104) [2025-11-13 00:03:19] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:03:19] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:19] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-13 00:03:19] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:19] Códigos encontrados para ID 105: 1 [2025-11-13 00:03:19] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-13 00:03:19] Códigos con stock disponible: 1 [2025-11-13 00:03:19] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:19] Stock total calculado para ID 105: 5 [2025-11-13 00:03:19] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:19] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-13 00:03:19] Producto por nombre agregado a resultados (ID: 105) [2025-11-13 00:03:19] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-13 00:03:19] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:19] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-13 00:03:19] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:19] Códigos encontrados para ID 106: 1 [2025-11-13 00:03:19] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-13 00:03:19] Códigos con stock disponible: 1 [2025-11-13 00:03:19] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:19] Stock total calculado para ID 106: 10 [2025-11-13 00:03:19] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:19] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-13 00:03:19] Producto por nombre agregado a resultados (ID: 106) [2025-11-13 00:03:19] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-13 00:03:19] Se encontraron 4 resultados en total. [2025-11-13 00:03:19] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-13 00:03:19] Imágenes agregadas: 4 productos con imagen [2025-11-13 00:03:19] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-13 00:03:45] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:03:45] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:03:45] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:03:45] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-13 00:03:45] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-13 00:03:45] DEBUG SESSION STATUS: 2 [2025-11-13 00:03:45] Negocio en sesión: 17.612.457-1 [2025-11-13 00:03:45] Nombre: Mis dos princesas [2025-11-13 00:03:45] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:03:45] Conexión exitosa a la base de datos [2025-11-13 00:03:45] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-13 00:03:45] Buscando producto con código/nombre: fini [2025-11-13 00:03:45] DEBUG: Código recibido: 'fini' (longitud: 4) [2025-11-13 00:03:45] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 00:03:45] No se encontró producto_id para el código exacto 'fini'. Intentando búsqueda parcial... [2025-11-13 00:03:45] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 00:03:45] Códigos parciales encontrados: 0 [2025-11-13 00:03:45] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 00:03:45] Productos encontrados por nombre: 4 [2025-11-13 00:03:45] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:45] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-13 00:03:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:45] Códigos encontrados para ID 103: 1 [2025-11-13 00:03:45] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-13 00:03:45] Códigos con stock disponible: 1 [2025-11-13 00:03:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:45] Stock total calculado para ID 103: 8 [2025-11-13 00:03:45] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:45] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-13 00:03:45] Producto por nombre agregado a resultados (ID: 103) [2025-11-13 00:03:45] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:03:45] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:45] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-13 00:03:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:45] Códigos encontrados para ID 104: 1 [2025-11-13 00:03:45] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-13 00:03:45] Códigos con stock disponible: 1 [2025-11-13 00:03:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:45] Stock total calculado para ID 104: 8 [2025-11-13 00:03:45] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:45] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-13 00:03:45] Producto por nombre agregado a resultados (ID: 104) [2025-11-13 00:03:45] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:03:45] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:45] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-13 00:03:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:45] Códigos encontrados para ID 105: 1 [2025-11-13 00:03:45] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-13 00:03:45] Códigos con stock disponible: 1 [2025-11-13 00:03:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:45] Stock total calculado para ID 105: 5 [2025-11-13 00:03:45] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:45] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-13 00:03:45] Producto por nombre agregado a resultados (ID: 105) [2025-11-13 00:03:45] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-13 00:03:45] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:03:45] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-13 00:03:45] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:03:45] Códigos encontrados para ID 106: 1 [2025-11-13 00:03:45] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-13 00:03:45] Códigos con stock disponible: 1 [2025-11-13 00:03:45] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:03:45] Stock total calculado para ID 106: 10 [2025-11-13 00:03:45] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:03:45] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-13 00:03:45] Producto por nombre agregado a resultados (ID: 106) [2025-11-13 00:03:45] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-13 00:03:45] Se encontraron 4 resultados en total. [2025-11-13 00:03:45] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-13 00:03:45] Imágenes agregadas: 4 productos con imagen [2025-11-13 00:03:45] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-13 00:05:18] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:05:18] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:05:18] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:05:18] DEBUG SESSION: {"last_regeneration":1763001802,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","id_sesion_caja":20,"sesion_caja_id":20,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-13 00:05:18] DEBUG SESSION ID: airboq7m5ra7ftadi7qla9do7e [2025-11-13 00:05:18] DEBUG SESSION STATUS: 2 [2025-11-13 00:05:18] Negocio en sesión: 17.612.457-1 [2025-11-13 00:05:18] Nombre: Mis dos princesas [2025-11-13 00:05:18] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:05:18] Conexión exitosa a la base de datos [2025-11-13 00:05:18] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-13 00:05:18] Buscando producto con código/nombre: fini [2025-11-13 00:05:18] DEBUG: Código recibido: 'fini' (longitud: 4) [2025-11-13 00:05:18] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 00:05:18] No se encontró producto_id para el código exacto 'fini'. Intentando búsqueda parcial... [2025-11-13 00:05:18] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 00:05:18] Códigos parciales encontrados: 0 [2025-11-13 00:05:18] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 00:05:18] Productos encontrados por nombre: 4 [2025-11-13 00:05:18] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:05:18] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-13 00:05:18] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:05:18] Códigos encontrados para ID 103: 1 [2025-11-13 00:05:18] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-13 00:05:18] Códigos con stock disponible: 1 [2025-11-13 00:05:18] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:05:18] Stock total calculado para ID 103: 8 [2025-11-13 00:05:18] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:05:18] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-13 00:05:18] Producto por nombre agregado a resultados (ID: 103) [2025-11-13 00:05:18] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:05:18] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:05:18] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-13 00:05:18] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:05:18] Códigos encontrados para ID 104: 1 [2025-11-13 00:05:18] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-13 00:05:18] Códigos con stock disponible: 1 [2025-11-13 00:05:18] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:05:18] Stock total calculado para ID 104: 8 [2025-11-13 00:05:18] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:05:18] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-13 00:05:18] Producto por nombre agregado a resultados (ID: 104) [2025-11-13 00:05:18] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-13 00:05:18] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:05:18] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-13 00:05:18] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:05:18] Códigos encontrados para ID 105: 1 [2025-11-13 00:05:18] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-13 00:05:18] Códigos con stock disponible: 1 [2025-11-13 00:05:18] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:05:18] Stock total calculado para ID 105: 5 [2025-11-13 00:05:18] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:05:18] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-13 00:05:18] Producto por nombre agregado a resultados (ID: 105) [2025-11-13 00:05:18] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-13 00:05:18] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:05:18] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-13 00:05:18] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:05:18] Códigos encontrados para ID 106: 1 [2025-11-13 00:05:18] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-13 00:05:18] Códigos con stock disponible: 1 [2025-11-13 00:05:18] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:05:18] Stock total calculado para ID 106: 10 [2025-11-13 00:05:18] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:05:18] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-13 00:05:18] Producto por nombre agregado a resultados (ID: 106) [2025-11-13 00:05:18] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-13 00:05:18] Se encontraron 4 resultados en total. [2025-11-13 00:05:18] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-13 00:05:18] Imágenes agregadas: 4 productos con imagen [2025-11-13 00:05:18] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-13 00:32:41] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:32:41] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:32:41] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:32:41] DEBUG SESSION: {"last_regeneration":1763004620,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-13 00:32:41] DEBUG SESSION ID: pcvd5r9k62qjq980e2fi0ic3k5 [2025-11-13 00:32:41] DEBUG SESSION STATUS: 2 [2025-11-13 00:32:41] Negocio en sesión: 78.216.219-5 [2025-11-13 00:32:41] Nombre: SGB-ERP SpA [2025-11-13 00:32:41] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:32:41] Conexión exitosa a la base de datos [2025-11-13 00:32:41] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-13 00:32:41] Buscando producto con código/nombre: Co [2025-11-13 00:32:41] DEBUG: Código recibido: 'Co' (longitud: 2) [2025-11-13 00:32:41] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 00:32:41] No se encontró producto_id para el código exacto 'Co'. Intentando búsqueda parcial... [2025-11-13 00:32:41] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 00:32:41] Códigos parciales encontrados: 0 [2025-11-13 00:32:41] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 00:32:41] Productos encontrados por nombre: 1 [2025-11-13 00:32:41] Procesando producto encontrado por nombre: {"id":189,"codigo":"17629970831784","nombre":"COCA-COLA 2 LITROS NORMAL RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","hash_producto":"8fc0c24b0199fa10c8700ccb4f8f2f4c","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 00:32:41] Usando lote específico detectado: ninguno para producto ID: 189 [2025-11-13 00:32:41] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:32:41] Códigos encontrados para ID 189: 1 [2025-11-13 00:32:41] Detalle de códigos: [{"id":180,"codigo":"17629970831784","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-13 00:32:41] Códigos con stock disponible: 1 [2025-11-13 00:32:41] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 00:32:41] Stock total calculado para ID 189: 10 [2025-11-13 00:32:41] Producto NORMAL ID: 189 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:32:41] Usando primer código disponible en orden FIFO para ID 189: {"id":180,"codigo":"17629970831784","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null} [2025-11-13 00:32:41] Producto por nombre agregado a resultados (ID: 189) [2025-11-13 00:32:41] Datos finales del producto: {"id":189,"codigo":"17629970831784","nombre":"COCA-COLA 2 LITROS NORMAL RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":10,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","hash_producto":"8fc0c24b0199fa10c8700ccb4f8f2f4c","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":180,"codigo":"17629970831784","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}],"precio":"1765.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSAx7fB9VY4vczojBRyRBYWLNtX-ywdepBS-A&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 l","stock_disponible":true} [2025-11-13 00:32:41] Se encontraron 1 resultados en total. [2025-11-13 00:32:41] Obteniendo imágenes para productos: 189 [2025-11-13 00:32:41] Imágenes agregadas: 1 productos con imagen [2025-11-13 00:32:41] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-13 00:32:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 00:32:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 00:32:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 00:32:48] DEBUG SESSION: {"last_regeneration":1763004620,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-13 00:32:48] DEBUG SESSION ID: pcvd5r9k62qjq980e2fi0ic3k5 [2025-11-13 00:32:48] DEBUG SESSION STATUS: 2 [2025-11-13 00:32:48] Negocio en sesión: 78.216.219-5 [2025-11-13 00:32:48] Nombre: SGB-ERP SpA [2025-11-13 00:32:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 00:32:48] Conexión exitosa a la base de datos [2025-11-13 00:32:48] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-13 00:32:48] Buscando producto con código/nombre: Gomi [2025-11-13 00:32:48] DEBUG: Código recibido: 'Gomi' (longitud: 4) [2025-11-13 00:32:48] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 00:32:48] No se encontró producto_id para el código exacto 'Gomi'. Intentando búsqueda parcial... [2025-11-13 00:32:48] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 00:32:48] Códigos parciales encontrados: 0 [2025-11-13 00:32:48] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 00:32:48] Productos encontrados por nombre: 1 [2025-11-13 00:32:48] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"especial","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-13 00:32:48] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-13 00:32:48] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 00:32:48] Códigos encontrados para ID 178: 1 [2025-11-13 00:32:48] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-13 00:32:48] Códigos con stock disponible: 1 [2025-11-13 00:32:48] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-13 00:32:48] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-13 00:32:48] Producto especial por nombre con stock disponible: 10 [2025-11-13 00:32:48] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 00:32:48] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-13 00:32:48] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-13 00:32:48] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-13 00:32:48] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-13 00:32:48] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-13 00:32:48] Producto por nombre agregado a resultados (ID: 178) [2025-11-13 00:32:48] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"especial","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-13 00:32:48] Se encontraron 1 resultados en total. [2025-11-13 00:32:48] Obteniendo imágenes para productos: 178 [2025-11-13 00:32:48] Imágenes agregadas: 1 productos con imagen [2025-11-13 00:32:48] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-13 09:36:48] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 09:36:48] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 09:36:48] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 09:36:48] DEBUG SESSION: {"last_regeneration":1763037143,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-13 09:36:48] DEBUG SESSION ID: ejil9klj2tmvgkme1bnnk0ldnu [2025-11-13 09:36:48] DEBUG SESSION STATUS: 2 [2025-11-13 09:36:48] Negocio en sesión: 78.216.219-5 [2025-11-13 09:36:48] Nombre: SGB-ERP SpA [2025-11-13 09:36:48] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 09:36:48] Conexión exitosa a la base de datos [2025-11-13 09:36:48] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-13 09:36:48] Buscando producto con código/nombre: coca [2025-11-13 09:36:48] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-13 09:36:48] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 09:36:48] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-13 09:36:48] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 09:36:48] Códigos parciales encontrados: 0 [2025-11-13 09:36:48] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 09:36:48] Productos encontrados por nombre: 1 [2025-11-13 09:36:48] Procesando producto encontrado por nombre: {"id":189,"codigo":"17629970831784","nombre":"COCA-COLA 2 LITROS NORMAL RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"2.00","tipo_codigo":"manual","hash_producto":"8fc0c24b0199fa10c8700ccb4f8f2f4c","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 09:36:48] Usando lote específico detectado: ninguno para producto ID: 189 [2025-11-13 09:36:48] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 09:36:48] Códigos encontrados para ID 189: 1 [2025-11-13 09:36:48] Detalle de códigos: [{"id":180,"codigo":"17629970831784","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-13 09:36:48] Códigos con stock disponible: 1 [2025-11-13 09:36:48] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 09:36:48] Stock total calculado para ID 189: 10 [2025-11-13 09:36:48] Producto NORMAL ID: 189 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 09:36:48] Usando primer código disponible en orden FIFO para ID 189: {"id":180,"codigo":"17629970831784","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null} [2025-11-13 09:36:48] Producto por nombre agregado a resultados (ID: 189) [2025-11-13 09:36:48] Datos finales del producto: {"id":189,"codigo":"17629970831784","nombre":"COCA-COLA 2 LITROS NORMAL RETORNABLE","precio_venta":"1765.00","precio_final_publico":"2100.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":10,"cantidad_por_unidad":"2.00","tipo_codigo":"manual","hash_producto":"8fc0c24b0199fa10c8700ccb4f8f2f4c","marca_nombre":"Coca-Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":180,"codigo":"17629970831784","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}],"precio":"1765.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSAx7fB9VY4vczojBRyRBYWLNtX-ywdepBS-A&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 l","stock_disponible":true} [2025-11-13 09:36:48] Se encontraron 1 resultados en total. [2025-11-13 09:36:48] Obteniendo imágenes para productos: 189 [2025-11-13 09:36:48] Imágenes agregadas: 1 productos con imagen [2025-11-13 09:36:48] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-13 09:36:54] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 09:36:54] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 09:36:54] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 09:36:54] DEBUG SESSION: {"last_regeneration":1763037143,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-13 09:36:54] DEBUG SESSION ID: ejil9klj2tmvgkme1bnnk0ldnu [2025-11-13 09:36:54] DEBUG SESSION STATUS: 2 [2025-11-13 09:36:54] Negocio en sesión: 78.216.219-5 [2025-11-13 09:36:54] Nombre: SGB-ERP SpA [2025-11-13 09:36:54] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 09:36:54] Conexión exitosa a la base de datos [2025-11-13 09:36:54] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-13 09:36:54] Buscando producto con código/nombre: skull [2025-11-13 09:36:54] DEBUG: Código recibido: 'skull' (longitud: 5) [2025-11-13 09:36:54] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 09:36:54] No se encontró producto_id para el código exacto 'skull'. Intentando búsqueda parcial... [2025-11-13 09:36:54] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 09:36:54] Códigos parciales encontrados: 0 [2025-11-13 09:36:54] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 09:36:54] Productos encontrados por nombre: 1 [2025-11-13 09:36:54] Procesando producto encontrado por nombre: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"especial","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-13 09:36:54] Usando lote específico detectado: ninguno para producto ID: 178 [2025-11-13 09:36:54] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 09:36:54] Códigos encontrados para ID 178: 1 [2025-11-13 09:36:54] Detalle de códigos: [{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-13 09:36:54] Códigos con stock disponible: 1 [2025-11-13 09:36:54] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-13 09:36:54] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-13 09:36:54] Producto especial por nombre con stock disponible: 10 [2025-11-13 09:36:54] Producto ESPECIAL ID: 178 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 09:36:54] Usando primer código disponible en orden FIFO para ID 178: {"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-13 09:36:54] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-13 09:36:54] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-13 09:36:54] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-13 09:36:54] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-13 09:36:54] Producto por nombre agregado a resultados (ID: 178) [2025-11-13 09:36:54] Datos finales del producto: {"id":178,"codigo":"GOM-178","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"17.00","precio_final_publico":"20.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"especial","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":169,"codigo":"GOM-178","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"17.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-13 09:36:54] Se encontraron 1 resultados en total. [2025-11-13 09:36:54] Obteniendo imágenes para productos: 178 [2025-11-13 09:36:54] Imágenes agregadas: 1 productos con imagen [2025-11-13 09:36:54] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-13 19:01:57] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-13 19:01:57] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-13 19:01:57] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-13 19:01:57] DEBUG SESSION: {"last_regeneration":1763071086,"admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","total_alertas_stock":1,"total_vencidos_sidebar":3,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":19,"sesion_caja_id":19,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false} [2025-11-13 19:01:57] DEBUG SESSION ID: liohhcadunldk8ovf3117o6p31 [2025-11-13 19:01:57] DEBUG SESSION STATUS: 2 [2025-11-13 19:01:57] Negocio en sesión: 78.216.219-5 [2025-11-13 19:01:57] Nombre: SGB-ERP SpA [2025-11-13 19:01:57] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-13 19:01:57] Conexión exitosa a la base de datos [2025-11-13 19:01:57] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-13 19:01:57] Buscando producto con código/nombre: aceite [2025-11-13 19:01:57] DEBUG: Código recibido: 'aceite' (longitud: 6) [2025-11-13 19:01:57] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-13 19:01:57] No se encontró producto_id para el código exacto 'aceite'. Intentando búsqueda parcial... [2025-11-13 19:01:57] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-13 19:01:57] Códigos parciales encontrados: 0 [2025-11-13 19:01:57] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-13 19:01:57] Productos encontrados por nombre: 1 [2025-11-13 19:01:57] Procesando producto encontrado por nombre: {"id":198,"codigo":"7801234567899","nombre":"ACEITE DE OLIVA EXTRA VIRGEN","precio_venta":"7500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"50.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"72b2269f13eb7ee9e94c58232951f6d9","marca_nombre":"Olium","tipo_nombre":"Aceite maravilla","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-13 19:01:57] Usando lote específico detectado: ninguno para producto ID: 198 [2025-11-13 19:01:57] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-13 19:01:57] Códigos encontrados para ID 198: 1 [2025-11-13 19:01:57] Detalle de códigos: [{"id":191,"codigo":"7801234567899","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2024-09-01"}] [2025-11-13 19:01:57] Códigos con stock disponible: 1 [2025-11-13 19:01:57] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-13 19:01:57] Stock total calculado para ID 198: 50 [2025-11-13 19:01:57] Producto NORMAL ID: 198 - Tiene lotes: SÍ (cantidad: 1) [2025-11-13 19:01:57] Usando primer código disponible en orden FIFO para ID 198: {"id":191,"codigo":"7801234567899","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2024-09-01"} [2025-11-13 19:01:57] Producto por nombre agregado a resultados (ID: 198) [2025-11-13 19:01:57] Datos finales del producto: {"id":198,"codigo":"7801234567899","nombre":"ACEITE DE OLIVA EXTRA VIRGEN","precio_venta":"7500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":50,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"72b2269f13eb7ee9e94c58232951f6d9","marca_nombre":"Olium","tipo_nombre":"Aceite maravilla","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"50.00","fecha_vencimiento":"2024-09-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":191,"codigo":"7801234567899","tipo_codigo":"manual","cantidad":"50.00","fecha_vencimiento":"2024-09-01"}],"precio":"7500.00","marca_logo":"https:\/\/logo.clearbit.com\/olium.com","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"50 un","stock_disponible":true} [2025-11-13 19:01:57] Se encontraron 1 resultados en total. [2025-11-13 19:01:57] Obteniendo imágenes para productos: 198 [2025-11-13 19:01:57] Imágenes agregadas: 0 productos con imagen [2025-11-13 19:01:57] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-14 10:04:03] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-14 10:04:03] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-14 10:04:03] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-14 10:04:03] DEBUG SESSION: {"last_regeneration":1763125303,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":0,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":"21","sesion_caja_id":"21","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-14 10:04:03] DEBUG SESSION ID: lgFHoNrKXWRG94tcJU3FGsgQBWFBrI3gFFX8hItTAyliGEve [2025-11-14 10:04:03] DEBUG SESSION STATUS: 2 [2025-11-14 10:04:03] Negocio en sesión: 78.216.219-5 [2025-11-14 10:04:03] Nombre: SGB-ERP SpA [2025-11-14 10:04:03] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-14 10:04:03] Conexión exitosa a la base de datos [2025-11-14 10:04:03] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-14 10:04:03] Buscando producto con código/nombre: coca [2025-11-14 10:04:03] DEBUG: Código recibido: 'coca' (longitud: 4) [2025-11-14 10:04:03] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-14 10:04:03] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2025-11-14 10:04:03] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-14 10:04:03] Códigos parciales encontrados: 0 [2025-11-14 10:04:03] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-14 10:04:03] Productos encontrados por nombre: 1 [2025-11-14 10:04:03] Procesando producto encontrado por nombre: {"id":298,"codigo":"7801234567840","nombre":"COCA COLA 3 L NORMAL RETORNABLE","precio_venta":"1250.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"80.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"1fa71a23c5006b8704018e104a96e025","marca_nombre":"Coca Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-14 10:04:03] Usando lote específico detectado: ninguno para producto ID: 298 [2025-11-14 10:04:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-14 10:04:03] Códigos encontrados para ID 298: 1 [2025-11-14 10:04:03] Detalle de códigos: [{"id":260,"codigo":"7801234567840","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-14 10:04:03] Códigos con stock disponible: 1 [2025-11-14 10:04:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-14 10:04:03] Stock total calculado para ID 298: 10 [2025-11-14 10:04:03] Producto NORMAL ID: 298 - Tiene lotes: SÍ (cantidad: 1) [2025-11-14 10:04:03] Usando primer código disponible en orden FIFO para ID 298: {"id":260,"codigo":"7801234567840","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null} [2025-11-14 10:04:03] Producto por nombre agregado a resultados (ID: 298) [2025-11-14 10:04:03] Datos finales del producto: {"id":298,"codigo":"7801234567840","nombre":"COCA COLA 3 L NORMAL RETORNABLE","precio_venta":"1250.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"1fa71a23c5006b8704018e104a96e025","marca_nombre":"Coca Cola","tipo_nombre":"Bebida 2 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":260,"codigo":"7801234567840","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}],"precio":"1250.00","marca_logo":"https:\/\/logo.clearbit.com\/cocacola.com","marca_fallback":"bi bi-cup-straw","marca_fallback_color":"#007bff","stock_texto":"10 un","stock_disponible":true} [2025-11-14 10:04:03] Se encontraron 1 resultados en total. [2025-11-14 10:04:03] Obteniendo imágenes para productos: 298 [2025-11-14 10:04:03] Imágenes agregadas: 1 productos con imagen [2025-11-14 10:04:03] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-14 17:12:14] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-14 17:12:14] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-14 17:12:14] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-14 17:12:14] DEBUG SESSION: {"last_regeneration":1763151050,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":2,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":"23","sesion_caja_id":"23","last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-14 17:12:14] DEBUG SESSION ID: jsht7sms4vntt7fb64dl5nqtti [2025-11-14 17:12:14] DEBUG SESSION STATUS: 2 [2025-11-14 17:12:14] Negocio en sesión: 78.216.219-5 [2025-11-14 17:12:14] Nombre: SGB-ERP SpA [2025-11-14 17:12:14] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-14 17:12:14] Conexión exitosa a la base de datos [2025-11-14 17:12:14] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-14 17:12:14] Buscando producto con código/nombre: Coca [2025-11-14 17:12:14] DEBUG: Código recibido: 'Coca' (longitud: 4) [2025-11-14 17:12:14] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-14 17:12:14] No se encontró producto_id para el código exacto 'Coca'. Intentando búsqueda parcial... [2025-11-14 17:12:14] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-14 17:12:14] Códigos parciales encontrados: 0 [2025-11-14 17:12:14] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-14 17:12:14] Productos encontrados por nombre: 1 [2025-11-14 17:12:14] Procesando producto encontrado por nombre: {"id":410,"codigo":"17631254986628","nombre":"COCA COLA 3 L NORMAL RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"3.00","tipo_codigo":"manual","hash_producto":"1fa71a23c5006b8704018e104a96e025","marca_nombre":"Coca Cola","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-14 17:12:14] Usando lote específico detectado: ninguno para producto ID: 410 [2025-11-14 17:12:14] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-14 17:12:14] Códigos encontrados para ID 410: 1 [2025-11-14 17:12:14] Detalle de códigos: [{"id":327,"codigo":"17631254986628","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2025-12-06"}] [2025-11-14 17:12:14] Códigos con stock disponible: 1 [2025-11-14 17:12:14] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-14 17:12:14] Stock total calculado para ID 410: 10 [2025-11-14 17:12:14] Producto NORMAL ID: 410 - Tiene lotes: SÍ (cantidad: 1) [2025-11-14 17:12:14] Usando primer código disponible en orden FIFO para ID 410: {"id":327,"codigo":"17631254986628","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2025-12-06"} [2025-11-14 17:12:14] Producto por nombre agregado a resultados (ID: 410) [2025-11-14 17:12:14] Datos finales del producto: {"id":410,"codigo":"17631254986628","nombre":"COCA COLA 3 L NORMAL RETORNABLE","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":10,"cantidad_por_unidad":"3.00","tipo_codigo":"manual","hash_producto":"1fa71a23c5006b8704018e104a96e025","marca_nombre":"Coca Cola","tipo_nombre":"Bebida 3 Litros","categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2025-12-06","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":327,"codigo":"17631254986628","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2025-12-06"}],"precio":"2000.00","marca_logo":"https:\/\/logo.clearbit.com\/cocacola.com","marca_fallback":"bi bi-cup-straw","marca_fallback_color":"#007bff","stock_texto":"10 l","stock_disponible":true} [2025-11-14 17:12:14] Se encontraron 1 resultados en total. [2025-11-14 17:12:14] Obteniendo imágenes para productos: 410 [2025-11-14 17:12:14] Imágenes agregadas: 1 productos con imagen [2025-11-14 17:12:14] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-15 08:03:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-15 08:03:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-15 08:03:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-15 08:03:06] DEBUG SESSION: {"last_regeneration":1763203820,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":3,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php","admin_rut":"16.414.902-1","admin_nombre":"Administrador Principal","admin_tipo":"admin","id_sesion_caja":"24","sesion_caja_id":"24","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php"}} [2025-11-15 08:03:06] DEBUG SESSION ID: n5fjcbeqpbss1jka58ttntdonc [2025-11-15 08:03:06] DEBUG SESSION STATUS: 2 [2025-11-15 08:03:06] Negocio en sesión: 78.216.219-5 [2025-11-15 08:03:06] Nombre: SGB-ERP SpA [2025-11-15 08:03:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-15 08:03:06] Conexión exitosa a la base de datos [2025-11-15 08:03:06] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-15 08:03:06] Buscando producto con código/nombre: Cer [2025-11-15 08:03:06] DEBUG: Código recibido: 'Cer' (longitud: 3) [2025-11-15 08:03:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-15 08:03:06] No se encontró producto_id para el código exacto 'Cer'. Intentando búsqueda parcial... [2025-11-15 08:03:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-15 08:03:06] Códigos parciales encontrados: 0 [2025-11-15 08:03:06] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-15 08:03:06] Productos encontrados por nombre: 1 [2025-11-15 08:03:06] Procesando producto encontrado por nombre: {"id":443,"codigo":"7801234567898","nombre":"CERVEZA ESCUDO 350ML","precio_venta":"600.00","precio_final_publico":"714.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"80.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"e40671ff2661a6572a15b17a7df67edc","marca_nombre":"Escudo","tipo_nombre":"Cervezas","categoria_nombre":"Licores","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-15 08:03:06] Usando lote específico detectado: ninguno para producto ID: 443 [2025-11-15 08:03:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-15 08:03:06] Códigos encontrados para ID 443: 1 [2025-11-15 08:03:06] Detalle de códigos: [{"id":355,"codigo":"7801234567898","tipo_codigo":"manual","cantidad":"80.00","fecha_vencimiento":null}] [2025-11-15 08:03:06] Códigos con stock disponible: 1 [2025-11-15 08:03:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-15 08:03:06] Stock total calculado para ID 443: 80 [2025-11-15 08:03:06] Producto NORMAL ID: 443 - Tiene lotes: SÍ (cantidad: 1) [2025-11-15 08:03:06] Usando primer código disponible en orden FIFO para ID 443: {"id":355,"codigo":"7801234567898","tipo_codigo":"manual","cantidad":"80.00","fecha_vencimiento":null} [2025-11-15 08:03:06] Producto por nombre agregado a resultados (ID: 443) [2025-11-15 08:03:06] Datos finales del producto: {"id":443,"codigo":"7801234567898","nombre":"CERVEZA ESCUDO 350ML","precio_venta":"600.00","precio_final_publico":"714.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":80,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"e40671ff2661a6572a15b17a7df67edc","marca_nombre":"Escudo","tipo_nombre":"Cervezas","categoria_nombre":"Licores","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"80.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":355,"codigo":"7801234567898","tipo_codigo":"manual","cantidad":"80.00","fecha_vencimiento":null}],"precio":"600.00","marca_logo":"https:\/\/yt3.googleusercontent.com\/ytc\/AIdro_mTmXApU97VrH8px4oaAqSotPjcQ07EpT4CTuoK7nyHBY4=s900-c-k-c0x00ffffff-no-rj","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"80 un","stock_disponible":true} [2025-11-15 08:03:06] Se encontraron 1 resultados en total. [2025-11-15 08:03:06] Obteniendo imágenes para productos: 443 [2025-11-15 08:03:06] Imágenes agregadas: 1 productos con imagen [2025-11-15 08:03:06] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-18 20:21:42] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-18 20:21:42] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-18 20:21:42] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-18 20:21:42] DEBUG SESSION: {"last_regeneration":1763505381,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":3,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":24,"sesion_caja_id":24,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-18 20:21:42] DEBUG SESSION ID: h5k7gd580ml8j74oomfn45flpa [2025-11-18 20:21:42] DEBUG SESSION STATUS: 2 [2025-11-18 20:21:42] Negocio en sesión: 78.216.219-5 [2025-11-18 20:21:42] Nombre: SGB-ERP SpA [2025-11-18 20:21:42] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-18 20:21:42] Conexión exitosa a la base de datos [2025-11-18 20:21:42] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-18 20:21:42] Buscando producto con código/nombre: ar [2025-11-18 20:21:42] DEBUG: Código recibido: 'ar' (longitud: 2) [2025-11-18 20:21:42] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-18 20:21:42] No se encontró producto_id para el código exacto 'ar'. Intentando búsqueda parcial... [2025-11-18 20:21:42] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-18 20:21:42] Códigos parciales encontrados: 0 [2025-11-18 20:21:42] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-18 20:21:42] Productos encontrados por nombre: 8 [2025-11-18 20:21:42] Procesando producto encontrado por nombre: {"id":435,"codigo":"17631697582680","nombre":"PAN MARRAQUETA","precio_venta":"500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"1.00","tipo_codigo":"masivo","hash_producto":"0b3718a948758f777efc237af390b1e2","marca_nombre":null,"tipo_nombre":"Pan rallado","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:21:42] Usando lote específico detectado: ninguno para producto ID: 435 [2025-11-18 20:21:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:21:42] Códigos encontrados para ID 435: 1 [2025-11-18 20:21:42] Detalle de códigos: [{"id":346,"codigo":"17631697582680","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-18 20:21:42] Códigos con stock disponible: 1 [2025-11-18 20:21:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-18 20:21:42] Stock total calculado para ID 435: 100 [2025-11-18 20:21:42] Producto NORMAL ID: 435 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:21:42] Usando primer código disponible en orden FIFO para ID 435: {"id":346,"codigo":"17631697582680","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null} [2025-11-18 20:21:42] Producto por nombre agregado a resultados (ID: 435) [2025-11-18 20:21:42] Datos finales del producto: {"id":435,"codigo":"17631697582680","nombre":"PAN MARRAQUETA","precio_venta":"500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","tipo_codigo":"masivo","hash_producto":"0b3718a948758f777efc237af390b1e2","marca_nombre":null,"tipo_nombre":"Pan rallado","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":346,"codigo":"17631697582680","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}],"precio":"500.00","stock_texto":"100 un","stock_disponible":true} [2025-11-18 20:21:42] Procesando producto encontrado por nombre: {"id":436,"codigo":"17631697582340","nombre":"LECHE ENTERA 1 L","precio_venta":"850.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"40.00","cantidad_por_unidad":"1.00","tipo_codigo":"masivo","hash_producto":"90ee6d0b7a664dfac4d29f14dc03bc81","marca_nombre":"Colun","tipo_nombre":"Leche condensada","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:21:42] Usando lote específico detectado: ninguno para producto ID: 436 [2025-11-18 20:21:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:21:42] Códigos encontrados para ID 436: 1 [2025-11-18 20:21:42] Detalle de códigos: [{"id":347,"codigo":"17631697582340","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}] [2025-11-18 20:21:42] Códigos con stock disponible: 1 [2025-11-18 20:21:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-18 20:21:42] Stock total calculado para ID 436: 40 [2025-11-18 20:21:42] Producto NORMAL ID: 436 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:21:42] Usando primer código disponible en orden FIFO para ID 436: {"id":347,"codigo":"17631697582340","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null} [2025-11-18 20:21:42] Producto por nombre agregado a resultados (ID: 436) [2025-11-18 20:21:42] Datos finales del producto: {"id":436,"codigo":"17631697582340","nombre":"LECHE ENTERA 1 L","precio_venta":"850.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","tipo_codigo":"masivo","hash_producto":"90ee6d0b7a664dfac4d29f14dc03bc81","marca_nombre":"Colun","tipo_nombre":"Leche condensada","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"40.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":347,"codigo":"17631697582340","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}],"precio":"850.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcS9_x6n0D63AXoHWJnip8py6Ml4ktko6v-CPA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-18 20:21:42] Procesando producto encontrado por nombre: {"id":438,"codigo":"7801234567895","nombre":"ACEITE GIRASOL 1 L","precio_venta":"1500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"0.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"64ef415f475ab0caee0bef5532b52bc3","marca_nombre":"Natura","tipo_nombre":"Aceites","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:21:42] Usando lote específico detectado: ninguno para producto ID: 438 [2025-11-18 20:21:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:21:42] Códigos encontrados para ID 438: 1 [2025-11-18 20:21:42] Detalle de códigos: [{"id":350,"codigo":"7801234567895","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-11-18 20:21:42] Códigos con stock disponible: 0 [2025-11-18 20:21:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:21:42] Stock encontrado en inventario para ID 438: 0 [2025-11-18 20:21:42] Stock total calculado para ID 438: 0 [2025-11-18 20:21:42] Producto por nombre (ID: 438) sin stock disponible, omitiendo. [2025-11-18 20:21:42] Procesando producto encontrado por nombre: {"id":439,"codigo":"RUT12345678-9","nombre":"FIDEOS SPAGHETTI 500 G","precio_venta":"800.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"35.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"ba05f084203189f769772187a7a0880f","marca_nombre":"Carozzi","tipo_nombre":null,"categoria_nombre":null,"tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:21:42] Usando lote específico detectado: ninguno para producto ID: 439 [2025-11-18 20:21:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:21:42] Códigos encontrados para ID 439: 1 [2025-11-18 20:21:42] Detalle de códigos: [{"id":351,"codigo":"RUT12345678-9","tipo_codigo":"manual","cantidad":"35.00","fecha_vencimiento":null}] [2025-11-18 20:21:42] Códigos con stock disponible: 1 [2025-11-18 20:21:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:21:42] Stock total calculado para ID 439: 35 [2025-11-18 20:21:42] Producto NORMAL ID: 439 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:21:42] Usando primer código disponible en orden FIFO para ID 439: {"id":351,"codigo":"RUT12345678-9","tipo_codigo":"manual","cantidad":"35.00","fecha_vencimiento":null} [2025-11-18 20:21:42] Producto por nombre agregado a resultados (ID: 439) [2025-11-18 20:21:42] Datos finales del producto: {"id":439,"codigo":"RUT12345678-9","nombre":"FIDEOS SPAGHETTI 500 G","precio_venta":"800.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":35,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"ba05f084203189f769772187a7a0880f","marca_nombre":"Carozzi","tipo_nombre":null,"categoria_nombre":null,"tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"35.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":351,"codigo":"RUT12345678-9","tipo_codigo":"manual","cantidad":"35.00","fecha_vencimiento":null}],"precio":"800.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSOtiYsRRWp1TI9Z2auLMk4zIUq26TqOYfVeg&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"35 un","stock_disponible":true} [2025-11-18 20:21:42] Procesando producto encontrado por nombre: {"id":440,"codigo":"7801234567896","nombre":"AT\u00daN EN LATA 160 G","precio_venta":"1200.00","precio_final_publico":"1428.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"630e8793bed98c1a935b090d977df7e6","marca_nombre":"L\u00edder","tipo_nombre":"Conservas","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:21:42] Usando lote específico detectado: ninguno para producto ID: 440 [2025-11-18 20:21:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:21:42] Códigos encontrados para ID 440: 1 [2025-11-18 20:21:42] Detalle de códigos: [{"id":352,"codigo":"7801234567896","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-18 20:21:42] Códigos con stock disponible: 1 [2025-11-18 20:21:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:21:42] Stock total calculado para ID 440: 20 [2025-11-18 20:21:42] Producto NORMAL ID: 440 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:21:42] Usando primer código disponible en orden FIFO para ID 440: {"id":352,"codigo":"7801234567896","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-18 20:21:42] Producto por nombre agregado a resultados (ID: 440) [2025-11-18 20:21:42] Datos finales del producto: {"id":440,"codigo":"7801234567896","nombre":"AT\u00daN EN LATA 160 G","precio_venta":"1200.00","precio_final_publico":"1428.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"630e8793bed98c1a935b090d977df7e6","marca_nombre":"L\u00edder","tipo_nombre":"Conservas","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":352,"codigo":"7801234567896","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"1200.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcTOvm1jg9bsrB3Lts-ktYgK2475tExcpaNbzA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-18 20:21:42] Procesando producto encontrado por nombre: {"id":444,"codigo":"","nombre":"AZ\u00daCAR GRANEL","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"200.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"f88d1ed2dfe706b1b21144dccaf81436","marca_nombre":null,"tipo_nombre":"Az\u00facar","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:21:42] Usando lote específico detectado: ninguno para producto ID: 444 [2025-11-18 20:21:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:21:42] Códigos encontrados para ID 444: 1 [2025-11-18 20:21:42] Detalle de códigos: [{"id":356,"codigo":"","tipo_codigo":"especial","cantidad":"200.00","fecha_vencimiento":null}] [2025-11-18 20:21:42] Códigos con stock disponible: 1 [2025-11-18 20:21:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-18 20:21:42] Producto especial por nombre - Stock desde productos/inventario: 200 [2025-11-18 20:21:42] Producto especial por nombre con stock disponible: 200 [2025-11-18 20:21:42] Producto ESPECIAL ID: 444 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:21:42] Usando primer código disponible en orden FIFO para ID 444: {"id":356,"codigo":"","tipo_codigo":"especial","cantidad":"200.00","fecha_vencimiento":null} [2025-11-18 20:21:42] DEBUGGING STOCK (nombre): stockTotal original = 200 (tipo: double) [2025-11-18 20:21:42] DEBUGGING STOCK (nombre): después de number_format = 200. [2025-11-18 20:21:42] DEBUGGING STOCK (nombre): después de rtrim = 200 [2025-11-18 20:21:42] DEBUGGING STOCK (nombre): stock_texto final = 200 kg [2025-11-18 20:21:42] Producto por nombre agregado a resultados (ID: 444) [2025-11-18 20:21:42] Datos finales del producto: {"id":444,"codigo":"","nombre":"AZ\u00daCAR GRANEL","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":200,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"f88d1ed2dfe706b1b21144dccaf81436","marca_nombre":null,"tipo_nombre":"Az\u00facar","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"200.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":356,"codigo":"","tipo_codigo":"especial","cantidad":"200.00","fecha_vencimiento":null}],"precio":"2000.00","stock_texto":"200 kg","stock_disponible":true} [2025-11-18 20:21:42] Procesando producto encontrado por nombre: {"id":445,"codigo":"HAR-445","nombre":"HARINA GRANEL","precio_venta":"0.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"ff1124c9900fce7fe4beda0889e4f1ed","marca_nombre":null,"tipo_nombre":"Harina","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:21:42] Usando lote específico detectado: ninguno para producto ID: 445 [2025-11-18 20:21:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:21:42] Códigos encontrados para ID 445: 0 [2025-11-18 20:21:42] Detalle de códigos: [] [2025-11-18 20:21:42] Códigos con stock disponible: 0 [2025-11-18 20:21:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='', es_producto_especial=true [2025-11-18 20:21:42] Producto especial por nombre - Stock desde productos/inventario: 150 [2025-11-18 20:21:42] Producto especial por nombre con stock disponible: 150 [2025-11-18 20:21:42] Producto ESPECIAL ID: 445 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:21:42] No hay códigos de barras para ID 445, generando datos temporales [2025-11-18 20:21:42] DEBUGGING STOCK (nombre): stockTotal original = 150 (tipo: double) [2025-11-18 20:21:42] DEBUGGING STOCK (nombre): después de number_format = 150. [2025-11-18 20:21:42] DEBUGGING STOCK (nombre): después de rtrim = 150 [2025-11-18 20:21:42] DEBUGGING STOCK (nombre): stock_texto final = 150 kg [2025-11-18 20:21:42] Producto por nombre agregado a resultados (ID: 445) [2025-11-18 20:21:42] Datos finales del producto: {"id":445,"codigo":"PROD-445","nombre":"HARINA GRANEL","precio_venta":"0.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":150,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"ff1124c9900fce7fe4beda0889e4f1ed","marca_nombre":null,"tipo_nombre":"Harina","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":150,"fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[],"precio":"0.00","stock_texto":"150 kg","stock_disponible":true} [2025-11-18 20:21:42] Procesando producto encontrado por nombre: {"id":446,"codigo":"17632604128051","nombre":"ARROZ GRADO 1","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"4023dfe54d42ed41ba5677eb3a43f6bf","marca_nombre":"Miraflores","tipo_nombre":"Arroz","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:21:42] Usando lote específico detectado: ninguno para producto ID: 446 [2025-11-18 20:21:42] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:21:42] Códigos encontrados para ID 446: 1 [2025-11-18 20:21:42] Detalle de códigos: [{"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-18 20:21:42] Códigos con stock disponible: 1 [2025-11-18 20:21:42] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:21:42] Stock total calculado para ID 446: 10 [2025-11-18 20:21:42] Producto NORMAL ID: 446 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:21:42] Usando primer código disponible en orden FIFO para ID 446: {"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null} [2025-11-18 20:21:42] Producto por nombre agregado a resultados (ID: 446) [2025-11-18 20:21:42] Datos finales del producto: {"id":446,"codigo":"17632604128051","nombre":"ARROZ GRADO 1","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"4023dfe54d42ed41ba5677eb3a43f6bf","marca_nombre":"Miraflores","tipo_nombre":"Arroz","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}],"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSA6AwSDbF_raoAsMKnNkGb2dyvKMvOHih5Gg&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 kg","stock_disponible":true} [2025-11-18 20:21:42] Se encontraron 7 resultados en total. [2025-11-18 20:21:42] Obteniendo imágenes para productos: 435, 436, 439, 440, 444, 445, 446 [2025-11-18 20:21:42] Imágenes agregadas: 7 productos con imagen [2025-11-18 20:21:42] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 7 resultados) === [2025-11-18 20:23:05] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-18 20:23:05] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-18 20:23:05] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-18 20:23:05] DEBUG SESSION: {"last_regeneration":1763505381,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":3,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":24,"sesion_caja_id":24,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-18 20:23:05] DEBUG SESSION ID: h5k7gd580ml8j74oomfn45flpa [2025-11-18 20:23:05] DEBUG SESSION STATUS: 2 [2025-11-18 20:23:05] Negocio en sesión: 78.216.219-5 [2025-11-18 20:23:05] Nombre: SGB-ERP SpA [2025-11-18 20:23:05] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-18 20:23:05] Conexión exitosa a la base de datos [2025-11-18 20:23:05] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-18 20:23:05] Buscando producto con código/nombre: arroz [2025-11-18 20:23:05] DEBUG: Código recibido: 'arroz' (longitud: 5) [2025-11-18 20:23:05] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-18 20:23:05] No se encontró producto_id para el código exacto 'arroz'. Intentando búsqueda parcial... [2025-11-18 20:23:05] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-18 20:23:05] Códigos parciales encontrados: 0 [2025-11-18 20:23:05] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-18 20:23:05] Productos encontrados por nombre: 1 [2025-11-18 20:23:05] Procesando producto encontrado por nombre: {"id":446,"codigo":"17632604128051","nombre":"ARROZ GRADO 1","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"9.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"4023dfe54d42ed41ba5677eb3a43f6bf","marca_nombre":"Miraflores","tipo_nombre":"Arroz","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:23:05] Usando lote específico detectado: ninguno para producto ID: 446 [2025-11-18 20:23:05] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:23:05] Códigos encontrados para ID 446: 1 [2025-11-18 20:23:05] Detalle de códigos: [{"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null}] [2025-11-18 20:23:05] Códigos con stock disponible: 1 [2025-11-18 20:23:05] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:23:05] Stock total calculado para ID 446: 9 [2025-11-18 20:23:05] Producto NORMAL ID: 446 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:23:05] Usando primer código disponible en orden FIFO para ID 446: {"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null} [2025-11-18 20:23:05] Producto por nombre agregado a resultados (ID: 446) [2025-11-18 20:23:05] Datos finales del producto: {"id":446,"codigo":"17632604128051","nombre":"ARROZ GRADO 1","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":9,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"4023dfe54d42ed41ba5677eb3a43f6bf","marca_nombre":"Miraflores","tipo_nombre":"Arroz","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"9.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"9.00","fecha_vencimiento":null}],"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSA6AwSDbF_raoAsMKnNkGb2dyvKMvOHih5Gg&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"9 kg","stock_disponible":true} [2025-11-18 20:23:05] Se encontraron 1 resultados en total. [2025-11-18 20:23:05] Obteniendo imágenes para productos: 446 [2025-11-18 20:23:05] Imágenes agregadas: 1 productos con imagen [2025-11-18 20:23:05] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-18 20:27:59] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-18 20:27:59] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-18 20:27:59] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-18 20:27:59] DEBUG SESSION: {"last_regeneration":1763505381,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":3,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":24,"sesion_caja_id":24,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-18 20:27:59] DEBUG SESSION ID: h5k7gd580ml8j74oomfn45flpa [2025-11-18 20:27:59] DEBUG SESSION STATUS: 2 [2025-11-18 20:27:59] Negocio en sesión: 78.216.219-5 [2025-11-18 20:27:59] Nombre: SGB-ERP SpA [2025-11-18 20:27:59] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-18 20:27:59] Conexión exitosa a la base de datos [2025-11-18 20:27:59] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-18 20:27:59] Buscando producto con código/nombre: arroz [2025-11-18 20:27:59] DEBUG: Código recibido: 'arroz' (longitud: 5) [2025-11-18 20:27:59] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-18 20:27:59] No se encontró producto_id para el código exacto 'arroz'. Intentando búsqueda parcial... [2025-11-18 20:27:59] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-18 20:27:59] Códigos parciales encontrados: 0 [2025-11-18 20:27:59] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-18 20:27:59] Productos encontrados por nombre: 1 [2025-11-18 20:27:59] Procesando producto encontrado por nombre: {"id":446,"codigo":"17632604128051","nombre":"ARROZ GRADO 1","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"4023dfe54d42ed41ba5677eb3a43f6bf","marca_nombre":"Miraflores","tipo_nombre":"Arroz","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:27:59] Usando lote específico detectado: ninguno para producto ID: 446 [2025-11-18 20:27:59] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:27:59] Códigos encontrados para ID 446: 1 [2025-11-18 20:27:59] Detalle de códigos: [{"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":null}] [2025-11-18 20:27:59] Códigos con stock disponible: 1 [2025-11-18 20:27:59] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:27:59] Stock total calculado para ID 446: 8 [2025-11-18 20:27:59] Producto NORMAL ID: 446 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:27:59] Usando primer código disponible en orden FIFO para ID 446: {"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":null} [2025-11-18 20:27:59] Producto por nombre agregado a resultados (ID: 446) [2025-11-18 20:27:59] Datos finales del producto: {"id":446,"codigo":"17632604128051","nombre":"ARROZ GRADO 1","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":8,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"4023dfe54d42ed41ba5677eb3a43f6bf","marca_nombre":"Miraflores","tipo_nombre":"Arroz","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":null}],"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSA6AwSDbF_raoAsMKnNkGb2dyvKMvOHih5Gg&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 kg","stock_disponible":true} [2025-11-18 20:27:59] Se encontraron 1 resultados en total. [2025-11-18 20:27:59] Obteniendo imágenes para productos: 446 [2025-11-18 20:27:59] Imágenes agregadas: 1 productos con imagen [2025-11-18 20:27:59] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2025-11-18 20:28:03] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-18 20:28:03] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-18 20:28:03] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-18 20:28:03] DEBUG SESSION: {"last_regeneration":1763505381,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":3,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":24,"sesion_caja_id":24,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2025-11-18 20:28:03] DEBUG SESSION ID: h5k7gd580ml8j74oomfn45flpa [2025-11-18 20:28:03] DEBUG SESSION STATUS: 2 [2025-11-18 20:28:03] Negocio en sesión: 78.216.219-5 [2025-11-18 20:28:03] Nombre: SGB-ERP SpA [2025-11-18 20:28:03] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-18 20:28:03] Conexión exitosa a la base de datos [2025-11-18 20:28:03] RUT del negocio en sesión para filtro: 78.216.219-5 [2025-11-18 20:28:03] Buscando producto con código/nombre: arr [2025-11-18 20:28:03] DEBUG: Código recibido: 'arr' (longitud: 3) [2025-11-18 20:28:03] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-18 20:28:03] No se encontró producto_id para el código exacto 'arr'. Intentando búsqueda parcial... [2025-11-18 20:28:03] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-18 20:28:03] Códigos parciales encontrados: 0 [2025-11-18 20:28:03] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-18 20:28:03] Productos encontrados por nombre: 7 [2025-11-18 20:28:03] Procesando producto encontrado por nombre: {"id":435,"codigo":"17631697582680","nombre":"PAN MARRAQUETA","precio_venta":"500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"100.00","cantidad_por_unidad":"1.00","tipo_codigo":"masivo","hash_producto":"0b3718a948758f777efc237af390b1e2","marca_nombre":null,"tipo_nombre":"Pan rallado","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:28:03] Usando lote específico detectado: ninguno para producto ID: 435 [2025-11-18 20:28:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:28:03] Códigos encontrados para ID 435: 1 [2025-11-18 20:28:03] Detalle de códigos: [{"id":346,"codigo":"17631697582680","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}] [2025-11-18 20:28:03] Códigos con stock disponible: 1 [2025-11-18 20:28:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-18 20:28:03] Stock total calculado para ID 435: 100 [2025-11-18 20:28:03] Producto NORMAL ID: 435 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:28:03] Usando primer código disponible en orden FIFO para ID 435: {"id":346,"codigo":"17631697582680","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null} [2025-11-18 20:28:03] Producto por nombre agregado a resultados (ID: 435) [2025-11-18 20:28:03] Datos finales del producto: {"id":435,"codigo":"17631697582680","nombre":"PAN MARRAQUETA","precio_venta":"500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":100,"cantidad_por_unidad":"1.00","tipo_codigo":"masivo","hash_producto":"0b3718a948758f777efc237af390b1e2","marca_nombre":null,"tipo_nombre":"Pan rallado","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"100.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":346,"codigo":"17631697582680","tipo_codigo":"masivo","cantidad":"100.00","fecha_vencimiento":null}],"precio":"500.00","stock_texto":"100 un","stock_disponible":true} [2025-11-18 20:28:03] Procesando producto encontrado por nombre: {"id":436,"codigo":"17631697582340","nombre":"LECHE ENTERA 1 L","precio_venta":"850.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"40.00","cantidad_por_unidad":"1.00","tipo_codigo":"masivo","hash_producto":"90ee6d0b7a664dfac4d29f14dc03bc81","marca_nombre":"Colun","tipo_nombre":"Leche condensada","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:28:03] Usando lote específico detectado: ninguno para producto ID: 436 [2025-11-18 20:28:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:28:03] Códigos encontrados para ID 436: 1 [2025-11-18 20:28:03] Detalle de códigos: [{"id":347,"codigo":"17631697582340","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}] [2025-11-18 20:28:03] Códigos con stock disponible: 1 [2025-11-18 20:28:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='masivo', es_producto_especial=false [2025-11-18 20:28:03] Stock total calculado para ID 436: 40 [2025-11-18 20:28:03] Producto NORMAL ID: 436 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:28:03] Usando primer código disponible en orden FIFO para ID 436: {"id":347,"codigo":"17631697582340","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null} [2025-11-18 20:28:03] Producto por nombre agregado a resultados (ID: 436) [2025-11-18 20:28:03] Datos finales del producto: {"id":436,"codigo":"17631697582340","nombre":"LECHE ENTERA 1 L","precio_venta":"850.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":40,"cantidad_por_unidad":"1.00","tipo_codigo":"masivo","hash_producto":"90ee6d0b7a664dfac4d29f14dc03bc81","marca_nombre":"Colun","tipo_nombre":"Leche condensada","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"40.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":347,"codigo":"17631697582340","tipo_codigo":"masivo","cantidad":"40.00","fecha_vencimiento":null}],"precio":"850.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcS9_x6n0D63AXoHWJnip8py6Ml4ktko6v-CPA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"40 un","stock_disponible":true} [2025-11-18 20:28:03] Procesando producto encontrado por nombre: {"id":438,"codigo":"7801234567895","nombre":"ACEITE GIRASOL 1 L","precio_venta":"1500.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"0.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"64ef415f475ab0caee0bef5532b52bc3","marca_nombre":"Natura","tipo_nombre":"Aceites","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:28:03] Usando lote específico detectado: ninguno para producto ID: 438 [2025-11-18 20:28:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:28:03] Códigos encontrados para ID 438: 1 [2025-11-18 20:28:03] Detalle de códigos: [{"id":350,"codigo":"7801234567895","tipo_codigo":"manual","cantidad":"0.00","fecha_vencimiento":null}] [2025-11-18 20:28:03] Códigos con stock disponible: 0 [2025-11-18 20:28:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:28:03] Stock encontrado en inventario para ID 438: 0 [2025-11-18 20:28:03] Stock total calculado para ID 438: 0 [2025-11-18 20:28:03] Producto por nombre (ID: 438) sin stock disponible, omitiendo. [2025-11-18 20:28:03] Procesando producto encontrado por nombre: {"id":440,"codigo":"7801234567896","nombre":"AT\u00daN EN LATA 160 G","precio_venta":"1200.00","precio_final_publico":"1428.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"20.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"630e8793bed98c1a935b090d977df7e6","marca_nombre":"L\u00edder","tipo_nombre":"Conservas","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:28:03] Usando lote específico detectado: ninguno para producto ID: 440 [2025-11-18 20:28:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:28:03] Códigos encontrados para ID 440: 1 [2025-11-18 20:28:03] Detalle de códigos: [{"id":352,"codigo":"7801234567896","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}] [2025-11-18 20:28:03] Códigos con stock disponible: 1 [2025-11-18 20:28:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:28:03] Stock total calculado para ID 440: 20 [2025-11-18 20:28:03] Producto NORMAL ID: 440 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:28:03] Usando primer código disponible en orden FIFO para ID 440: {"id":352,"codigo":"7801234567896","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null} [2025-11-18 20:28:03] Producto por nombre agregado a resultados (ID: 440) [2025-11-18 20:28:03] Datos finales del producto: {"id":440,"codigo":"7801234567896","nombre":"AT\u00daN EN LATA 160 G","precio_venta":"1200.00","precio_final_publico":"1428.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":20,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"630e8793bed98c1a935b090d977df7e6","marca_nombre":"L\u00edder","tipo_nombre":"Conservas","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"20.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":352,"codigo":"7801234567896","tipo_codigo":"manual","cantidad":"20.00","fecha_vencimiento":null}],"precio":"1200.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcTOvm1jg9bsrB3Lts-ktYgK2475tExcpaNbzA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"20 un","stock_disponible":true} [2025-11-18 20:28:03] Procesando producto encontrado por nombre: {"id":444,"codigo":"","nombre":"AZ\u00daCAR GRANEL","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"200.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"f88d1ed2dfe706b1b21144dccaf81436","marca_nombre":null,"tipo_nombre":"Az\u00facar","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:28:03] Usando lote específico detectado: ninguno para producto ID: 444 [2025-11-18 20:28:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:28:03] Códigos encontrados para ID 444: 1 [2025-11-18 20:28:03] Detalle de códigos: [{"id":356,"codigo":"","tipo_codigo":"especial","cantidad":"200.00","fecha_vencimiento":null}] [2025-11-18 20:28:03] Códigos con stock disponible: 1 [2025-11-18 20:28:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-18 20:28:03] Producto especial por nombre - Stock desde productos/inventario: 200 [2025-11-18 20:28:03] Producto especial por nombre con stock disponible: 200 [2025-11-18 20:28:03] Producto ESPECIAL ID: 444 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:28:03] Usando primer código disponible en orden FIFO para ID 444: {"id":356,"codigo":"","tipo_codigo":"especial","cantidad":"200.00","fecha_vencimiento":null} [2025-11-18 20:28:03] DEBUGGING STOCK (nombre): stockTotal original = 200 (tipo: double) [2025-11-18 20:28:03] DEBUGGING STOCK (nombre): después de number_format = 200. [2025-11-18 20:28:03] DEBUGGING STOCK (nombre): después de rtrim = 200 [2025-11-18 20:28:03] DEBUGGING STOCK (nombre): stock_texto final = 200 kg [2025-11-18 20:28:03] Producto por nombre agregado a resultados (ID: 444) [2025-11-18 20:28:03] Datos finales del producto: {"id":444,"codigo":"","nombre":"AZ\u00daCAR GRANEL","precio_venta":"2000.00","precio_final_publico":"2380.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":200,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"f88d1ed2dfe706b1b21144dccaf81436","marca_nombre":null,"tipo_nombre":"Az\u00facar","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"200.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":356,"codigo":"","tipo_codigo":"especial","cantidad":"200.00","fecha_vencimiento":null}],"precio":"2000.00","stock_texto":"200 kg","stock_disponible":true} [2025-11-18 20:28:03] Procesando producto encontrado por nombre: {"id":445,"codigo":"HAR-445","nombre":"HARINA GRANEL","precio_venta":"0.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"150.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"ff1124c9900fce7fe4beda0889e4f1ed","marca_nombre":null,"tipo_nombre":"Harina","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:28:03] Usando lote específico detectado: ninguno para producto ID: 445 [2025-11-18 20:28:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:28:03] Códigos encontrados para ID 445: 0 [2025-11-18 20:28:03] Detalle de códigos: [] [2025-11-18 20:28:03] Códigos con stock disponible: 0 [2025-11-18 20:28:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='', es_producto_especial=true [2025-11-18 20:28:03] Producto especial por nombre - Stock desde productos/inventario: 150 [2025-11-18 20:28:03] Producto especial por nombre con stock disponible: 150 [2025-11-18 20:28:03] Producto ESPECIAL ID: 445 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:28:03] No hay códigos de barras para ID 445, generando datos temporales [2025-11-18 20:28:03] DEBUGGING STOCK (nombre): stockTotal original = 150 (tipo: double) [2025-11-18 20:28:03] DEBUGGING STOCK (nombre): después de number_format = 150. [2025-11-18 20:28:03] DEBUGGING STOCK (nombre): después de rtrim = 150 [2025-11-18 20:28:03] DEBUGGING STOCK (nombre): stock_texto final = 150 kg [2025-11-18 20:28:03] Producto por nombre agregado a resultados (ID: 445) [2025-11-18 20:28:03] Datos finales del producto: {"id":445,"codigo":"PROD-445","nombre":"HARINA GRANEL","precio_venta":"0.00","precio_final_publico":null,"stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":150,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"ff1124c9900fce7fe4beda0889e4f1ed","marca_nombre":null,"tipo_nombre":"Harina","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":150,"fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[],"precio":"0.00","stock_texto":"150 kg","stock_disponible":true} [2025-11-18 20:28:03] Procesando producto encontrado por nombre: {"id":446,"codigo":"17632604128051","nombre":"ARROZ GRADO 1","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"4023dfe54d42ed41ba5677eb3a43f6bf","marca_nombre":"Miraflores","tipo_nombre":"Arroz","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-18 20:28:03] Usando lote específico detectado: ninguno para producto ID: 446 [2025-11-18 20:28:03] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-18 20:28:03] Códigos encontrados para ID 446: 1 [2025-11-18 20:28:03] Detalle de códigos: [{"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":null}] [2025-11-18 20:28:03] Códigos con stock disponible: 1 [2025-11-18 20:28:03] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-18 20:28:03] Stock total calculado para ID 446: 8 [2025-11-18 20:28:03] Producto NORMAL ID: 446 - Tiene lotes: SÍ (cantidad: 1) [2025-11-18 20:28:03] Usando primer código disponible en orden FIFO para ID 446: {"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":null} [2025-11-18 20:28:03] Producto por nombre agregado a resultados (ID: 446) [2025-11-18 20:28:03] Datos finales del producto: {"id":446,"codigo":"17632604128051","nombre":"ARROZ GRADO 1","precio_venta":"20.00","precio_final_publico":"24.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"kg","controla_stock":1,"stock":8,"cantidad_por_unidad":"1.00","tipo_codigo":"manual","hash_producto":"4023dfe54d42ed41ba5677eb3a43f6bf","marca_nombre":"Miraflores","tipo_nombre":"Arroz","categoria_nombre":"Abarrotes","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":357,"codigo":"17632604128051","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":null}],"precio":"20.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSA6AwSDbF_raoAsMKnNkGb2dyvKMvOHih5Gg&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 kg","stock_disponible":true} [2025-11-18 20:28:03] Se encontraron 6 resultados en total. [2025-11-18 20:28:03] Obteniendo imágenes para productos: 435, 436, 440, 444, 445, 446 [2025-11-18 20:28:03] Imágenes agregadas: 6 productos con imagen [2025-11-18 20:28:03] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 6 resultados) === [2025-11-21 18:35:06] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-21 18:35:06] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-21 18:35:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-21 18:35:06] DEBUG SESSION: {"last_regeneration":1763760881,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":22,"sesion_caja_id":22,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-21 18:35:06] DEBUG SESSION ID: tjngs8hcrkgtuoed7horrlqcu1 [2025-11-21 18:35:06] DEBUG SESSION STATUS: 2 [2025-11-21 18:35:06] Negocio en sesión: 17.612.457-1 [2025-11-21 18:35:06] Nombre: Mis dos princesas [2025-11-21 18:35:06] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-21 18:35:06] Conexión exitosa a la base de datos [2025-11-21 18:35:06] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-21 18:35:06] Buscando producto con código/nombre: gom [2025-11-21 18:35:06] DEBUG: Código recibido: 'gom' (longitud: 3) [2025-11-21 18:35:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-21 18:35:06] No se encontró producto_id para el código exacto 'gom'. Intentando búsqueda parcial... [2025-11-21 18:35:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-21 18:35:06] Códigos parciales encontrados: 1 [2025-11-21 18:35:06] Procesando código parcial: GOM-178 (ID: 178) [2025-11-21 18:35:06] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-21 18:35:06] Productos encontrados por nombre: 4 [2025-11-21 18:35:06] Procesando producto encontrado por nombre: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-21 18:35:06] Usando lote específico detectado: ninguno para producto ID: 103 [2025-11-21 18:35:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-21 18:35:06] Códigos encontrados para ID 103: 1 [2025-11-21 18:35:06] Detalle de códigos: [{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}] [2025-11-21 18:35:06] Códigos con stock disponible: 1 [2025-11-21 18:35:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-21 18:35:06] Stock total calculado para ID 103: 8 [2025-11-21 18:35:06] Producto NORMAL ID: 103 - Tiene lotes: SÍ (cantidad: 1) [2025-11-21 18:35:06] Usando primer código disponible en orden FIFO para ID 103: {"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"} [2025-11-21 18:35:06] Producto por nombre agregado a resultados (ID: 103) [2025-11-21 18:35:06] Datos finales del producto: {"id":103,"codigo":"7898591453212","nombre":"GOMITAS DENTADURAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"ec38233f4daee0bbcf96363e406fe004","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-05-05","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":119,"codigo":"7898591453212","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-05-05"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-21 18:35:06] Procesando producto encontrado por nombre: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"8.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-21 18:35:06] Usando lote específico detectado: ninguno para producto ID: 104 [2025-11-21 18:35:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-21 18:35:06] Códigos encontrados para ID 104: 1 [2025-11-21 18:35:06] Detalle de códigos: [{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}] [2025-11-21 18:35:06] Códigos con stock disponible: 1 [2025-11-21 18:35:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-21 18:35:06] Stock total calculado para ID 104: 8 [2025-11-21 18:35:06] Producto NORMAL ID: 104 - Tiene lotes: SÍ (cantidad: 1) [2025-11-21 18:35:06] Usando primer código disponible en orden FIFO para ID 104: {"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"} [2025-11-21 18:35:06] Producto por nombre agregado a resultados (ID: 104) [2025-11-21 18:35:06] Datos finales del producto: {"id":104,"codigo":"7908228805151","nombre":"GOMITAS RANAS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":8,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"54dd210dbe553003d7e9dec168cc0cf2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"8.00","fecha_vencimiento":"2026-10-10","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":120,"codigo":"7908228805151","tipo_codigo":"manual","cantidad":"8.00","fecha_vencimiento":"2026-10-10"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"8 g","stock_disponible":true} [2025-11-21 18:35:06] Procesando producto encontrado por nombre: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"5.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-21 18:35:06] Usando lote específico detectado: ninguno para producto ID: 105 [2025-11-21 18:35:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-21 18:35:06] Códigos encontrados para ID 105: 1 [2025-11-21 18:35:06] Detalle de códigos: [{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}] [2025-11-21 18:35:06] Códigos con stock disponible: 1 [2025-11-21 18:35:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-21 18:35:06] Stock total calculado para ID 105: 5 [2025-11-21 18:35:06] Producto NORMAL ID: 105 - Tiene lotes: SÍ (cantidad: 1) [2025-11-21 18:35:06] Usando primer código disponible en orden FIFO para ID 105: {"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"} [2025-11-21 18:35:06] Producto por nombre agregado a resultados (ID: 105) [2025-11-21 18:35:06] Datos finales del producto: {"id":105,"codigo":"7898591453274","nombre":"GOMITAS GUSANO ACIDO","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":5,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"6d196c41bf6aef52a59c9c07498600c2","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"5.00","fecha_vencimiento":"2026-10-08","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":121,"codigo":"7898591453274","tipo_codigo":"manual","cantidad":"5.00","fecha_vencimiento":"2026-10-08"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"5 g","stock_disponible":true} [2025-11-21 18:35:06] Procesando producto encontrado por nombre: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null} [2025-11-21 18:35:06] Usando lote específico detectado: ninguno para producto ID: 106 [2025-11-21 18:35:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-21 18:35:06] Códigos encontrados para ID 106: 1 [2025-11-21 18:35:06] Detalle de códigos: [{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}] [2025-11-21 18:35:06] Códigos con stock disponible: 1 [2025-11-21 18:35:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2025-11-21 18:35:06] Stock total calculado para ID 106: 10 [2025-11-21 18:35:06] Producto NORMAL ID: 106 - Tiene lotes: SÍ (cantidad: 1) [2025-11-21 18:35:06] Usando primer código disponible en orden FIFO para ID 106: {"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"} [2025-11-21 18:35:06] Producto por nombre agregado a resultados (ID: 106) [2025-11-21 18:35:06] Datos finales del producto: {"id":106,"codigo":"8410525151743","nombre":"GOMITAS PIRATE SKULLS","precio_venta":"1008.00","precio_final_publico":"1200.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"90.00","tipo_codigo":"manual","hash_producto":"47e0698608fde001a3cdf9740fdbd362","marca_nombre":"Fini","tipo_nombre":"Gomitas","categoria_nombre":"Snacks","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":"2027-06-01","es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":122,"codigo":"8410525151743","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":"2027-06-01"}],"precio":"1008.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcQp_jeoqpdTJ5TYj2JB5tUp7yh6-CduUen0AA&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2025-11-21 18:35:06] Se encontraron 4 resultados en total. [2025-11-21 18:35:06] Obteniendo imágenes para productos: 103, 104, 105, 106 [2025-11-21 18:35:06] Imágenes agregadas: 4 productos con imagen [2025-11-21 18:35:06] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 4 resultados) === [2025-11-21 18:36:58] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-21 18:36:58] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-21 18:36:58] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-21 18:36:58] DEBUG SESSION: {"last_regeneration":1763760881,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":22,"sesion_caja_id":22,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"}} [2025-11-21 18:36:58] DEBUG SESSION ID: tjngs8hcrkgtuoed7horrlqcu1 [2025-11-21 18:36:58] DEBUG SESSION STATUS: 2 [2025-11-21 18:36:58] Negocio en sesión: 17.612.457-1 [2025-11-21 18:36:58] Nombre: Mis dos princesas [2025-11-21 18:36:58] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-21 18:36:58] Conexión exitosa a la base de datos [2025-11-21 18:36:58] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-21 18:36:58] Buscando producto con código/nombre: pan [2025-11-21 18:36:58] DEBUG: Código recibido: 'pan' (longitud: 3) [2025-11-21 18:36:58] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-21 18:36:58] No se encontró producto_id para el código exacto 'pan'. Intentando búsqueda parcial... [2025-11-21 18:36:58] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-21 18:36:58] Códigos parciales encontrados: 0 [2025-11-21 18:36:58] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-21 18:36:58] Productos encontrados por nombre: 0 [2025-11-21 18:36:58] No se encontró ningún producto con stock por ningún método [2025-11-21 18:36:58] === FIN BÚSQUEDA DE PRODUCTO (NO ENCONTRADO / SIN STOCK) === [2025-11-21 19:00:46] === INICIO BÚSQUEDA DE PRODUCTO === [2025-11-21 19:00:46] Ruta raíz relativa: [PROYECTO_ROOT] [2025-11-21 19:00:46] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2025-11-21 19:00:46] DEBUG SESSION: {"last_regeneration":1763760881,"negocio_rut":"17.612.457-1","negocio_id":"17.612.457-1","negocio_nombre":"Mis dos princesas","negocio_vencimiento":"2025-12-18","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":0,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":22,"sesion_caja_id":22,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=17.612.457-1"},"producto_creado_id":"452"} [2025-11-21 19:00:46] DEBUG SESSION ID: tjngs8hcrkgtuoed7horrlqcu1 [2025-11-21 19:00:46] DEBUG SESSION STATUS: 2 [2025-11-21 19:00:46] Negocio en sesión: 17.612.457-1 [2025-11-21 19:00:46] Nombre: Mis dos princesas [2025-11-21 19:00:46] Intentando conectar a la base de datos usando la función conectarDB() [2025-11-21 19:00:46] Conexión exitosa a la base de datos [2025-11-21 19:00:46] RUT del negocio en sesión para filtro: 17.612.457-1 [2025-11-21 19:00:46] Buscando producto con código/nombre: jamon [2025-11-21 19:00:46] DEBUG: Código recibido: 'jamon' (longitud: 5) [2025-11-21 19:00:46] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2025-11-21 19:00:46] No se encontró producto_id para el código exacto 'jamon'. Intentando búsqueda parcial... [2025-11-21 19:00:46] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2025-11-21 19:00:46] Códigos parciales encontrados: 0 [2025-11-21 19:00:46] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id LIMIT 50 [2025-11-21 19:00:46] Productos encontrados por nombre: 1 [2025-11-21 19:00:46] Procesando producto encontrado por nombre: {"id":452,"codigo":"JAM-452","nombre":"JAMON CENTENARIO","precio_venta":"20000.00","precio_final_publico":"23800.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"512311b0f7aed0b7ce7234fe0677948b","marca_nombre":null,"tipo_nombre":"Agua mineral","categoria_nombre":"Bebidas","tipo_control_peso":"flexible","codigos_adicionales":null} [2025-11-21 19:00:46] Usando lote específico detectado: ninguno para producto ID: 452 [2025-11-21 19:00:46] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2025-11-21 19:00:46] Códigos encontrados para ID 452: 1 [2025-11-21 19:00:46] Detalle de códigos: [{"id":363,"codigo":"JAM-452","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}] [2025-11-21 19:00:46] Códigos con stock disponible: 1 [2025-11-21 19:00:46] DEBUG DETECCIÓN ESPECIAL: modo_venta='PESO', tipo_codigo_primero='especial', es_producto_especial=true [2025-11-21 19:00:46] Producto especial por nombre - Stock desde productos/inventario: 10 [2025-11-21 19:00:46] Producto especial por nombre con stock disponible: 10 [2025-11-21 19:00:46] Producto ESPECIAL ID: 452 - Tiene lotes: SÍ (cantidad: 1) [2025-11-21 19:00:46] Usando primer código disponible en orden FIFO para ID 452: {"id":363,"codigo":"JAM-452","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null} [2025-11-21 19:00:46] DEBUGGING STOCK (nombre): stockTotal original = 10 (tipo: double) [2025-11-21 19:00:46] DEBUGGING STOCK (nombre): después de number_format = 10. [2025-11-21 19:00:46] DEBUGGING STOCK (nombre): después de rtrim = 10 [2025-11-21 19:00:46] DEBUGGING STOCK (nombre): stock_texto final = 10 kg [2025-11-21 19:00:46] Producto por nombre agregado a resultados (ID: 452) [2025-11-21 19:00:46] Datos finales del producto: {"id":452,"codigo":"JAM-452","nombre":"JAMON CENTENARIO","precio_venta":"20000.00","precio_final_publico":"23800.00","stock_minimo":"5.00","modo_venta":"PESO","unidad_medida":"Kg","controla_stock":1,"stock":10,"cantidad_por_unidad":"1.00","tipo_codigo":"especial","hash_producto":"512311b0f7aed0b7ce7234fe0677948b","marca_nombre":null,"tipo_nombre":"Agua mineral","categoria_nombre":"Bebidas","tipo_control_peso":"flexible","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":true,"es_por_peso":true,"es_precio_abierto":false,"codigos_disponibles":[{"id":363,"codigo":"JAM-452","tipo_codigo":"especial","cantidad":"10.00","fecha_vencimiento":null}],"precio":"20000.00","stock_texto":"10 kg","stock_disponible":true} [2025-11-21 19:00:46] Se encontraron 1 resultados en total. [2025-11-21 19:00:46] Obteniendo imágenes para productos: 452 [2025-11-21 19:00:46] Imágenes agregadas: 0 productos con imagen [2025-11-21 19:00:46] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2026-03-16 08:24:52] === INICIO BÚSQUEDA DE PRODUCTO === [2026-03-16 08:24:52] Ruta raíz relativa: [PROYECTO_ROOT] [2026-03-16 08:24:52] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2026-03-16 08:24:52] DEBUG SESSION: {"last_regeneration":1773659308,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"id_sesion_caja":3,"sesion_caja_id":3,"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"},"alertas_vencimiento_modo_tabla":false,"titulo_pagina":"Productos sin Proveedor","pagina_actual":"productos_sin_proveedor"} [2026-03-16 08:24:52] DEBUG SESSION ID: p94rfjs9t1j3ocu9k9dc4q4p6j [2026-03-16 08:24:52] DEBUG SESSION STATUS: 2 [2026-03-16 08:24:52] Negocio en sesión: 78.216.219-5 [2026-03-16 08:24:52] Nombre: SGB-ERP SpA [2026-03-16 08:24:52] Intentando conectar a la base de datos usando la función conectarDB() [2026-03-16 08:24:52] Conexión exitosa a la base de datos [2026-03-16 08:24:52] RUT del negocio en sesión para filtro: 78.216.219-5 [2026-03-16 08:24:52] Buscando producto con código/nombre: coca [2026-03-16 08:24:52] DEBUG: Código recibido: 'coca' (longitud: 4) [2026-03-16 08:24:52] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2026-03-16 08:24:52] No se encontró producto_id para el código exacto 'coca'. Intentando búsqueda parcial... [2026-03-16 08:24:52] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2026-03-16 08:24:52] Códigos parciales encontrados: 0 [2026-03-16 08:24:52] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT :limit OFFSET :offset [2026-03-16 08:24:52] Productos encontrados por nombre: 1 [2026-03-16 08:24:52] Procesando producto encontrado por nombre: {"id":5,"codigo":"17643419664927","nombre":"COCA COLA BOTELLA DESECHABLE - COCA-COLA - 3 L","precio_venta":"2521.00","precio_final_publico":"3000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":"4.00","cantidad_por_unidad":"3.00","tipo_codigo":"manual","hash_producto":"57edfc6e9afc3428421aa73e5713359d","marca_nombre":"Coca-Cola","tipo_nombre":null,"categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null} [2026-03-16 08:24:52] Usando lote específico detectado: ninguno para producto ID: 5 [2026-03-16 08:24:52] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2026-03-16 08:24:52] Códigos encontrados para ID 5: 1 [2026-03-16 08:24:52] Detalle de códigos: [{"id":5,"codigo":"17643419664927","tipo_codigo":"manual","cantidad":"4.00","fecha_vencimiento":null}] [2026-03-16 08:24:52] Códigos con stock disponible: 1 [2026-03-16 08:24:52] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2026-03-16 08:24:52] Stock total calculado para ID 5: 4 [2026-03-16 08:24:52] Producto NORMAL ID: 5 - Tiene lotes: SÍ (cantidad: 1) [2026-03-16 08:24:52] Usando primer código disponible en orden FIFO para ID 5: {"id":5,"codigo":"17643419664927","tipo_codigo":"manual","cantidad":"4.00","fecha_vencimiento":null} [2026-03-16 08:24:52] Producto por nombre agregado a resultados (ID: 5) [2026-03-16 08:24:52] Datos finales del producto: {"id":5,"codigo":"17643419664927","nombre":"COCA COLA BOTELLA DESECHABLE - COCA-COLA - 3 L","precio_venta":"2521.00","precio_final_publico":"3000.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"l","controla_stock":1,"stock":4,"cantidad_por_unidad":"3.00","tipo_codigo":"manual","hash_producto":"57edfc6e9afc3428421aa73e5713359d","marca_nombre":"Coca-Cola","tipo_nombre":null,"categoria_nombre":"Bebidas","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"4.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":5,"codigo":"17643419664927","tipo_codigo":"manual","cantidad":"4.00","fecha_vencimiento":null}],"precio":"2521.00","marca_logo":"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSAx7fB9VY4vczojBRyRBYWLNtX-ywdepBS-A&s","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"4 l","stock_disponible":true} [2026-03-16 08:24:52] Se encontraron 1 resultados en total. [2026-03-16 08:24:52] Obteniendo imágenes para productos: 5 [2026-03-16 08:24:52] Imágenes agregadas: 1 productos con imagen [2026-03-16 08:24:52] Respuesta JSON - total_disponible: 1, offset: 0, count: 1, has_more: false [2026-03-16 08:24:52] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2026-03-17 12:07:44] === INICIO BÚSQUEDA DE PRODUCTO === [2026-03-17 12:07:44] Ruta raíz relativa: [PROYECTO_ROOT] [2026-03-17 12:07:44] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2026-03-17 12:07:44] DEBUG SESSION: {"last_regeneration":1773760015,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","id_sesion_caja":3,"sesion_caja_id":3,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2026-03-17 12:07:44] DEBUG SESSION ID: 6h3ec14e3e2nb7a7j6lqdgdjtb [2026-03-17 12:07:44] DEBUG SESSION STATUS: 2 [2026-03-17 12:07:44] Negocio en sesión: 78.216.219-5 [2026-03-17 12:07:44] Nombre: SGB-ERP SpA [2026-03-17 12:07:44] Intentando conectar a la base de datos usando la función conectarDB() [2026-03-17 12:07:44] Conexión exitosa a la base de datos [2026-03-17 12:07:44] RUT del negocio en sesión para filtro: 78.216.219-5 [2026-03-17 12:07:44] Buscando producto con código/nombre: pap [2026-03-17 12:07:44] DEBUG: Código recibido: 'pap' (longitud: 3) [2026-03-17 12:07:44] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2026-03-17 12:07:44] No se encontró producto_id para el código exacto 'pap'. Intentando búsqueda parcial... [2026-03-17 12:07:44] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2026-03-17 12:07:44] Códigos parciales encontrados: 0 [2026-03-17 12:07:44] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT :limit OFFSET :offset [2026-03-17 12:07:44] Productos encontrados por nombre: 1 [2026-03-17 12:07:44] Procesando producto encontrado por nombre: {"id":9,"codigo":"17682764263746","nombre":"PAPAS FRITAS LAYS CIBOULETTE INDIVIDUAL - LAYS - 40 GR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":"10.00","cantidad_por_unidad":"40.00","tipo_codigo":"manual","hash_producto":"70f8ab60fd864e3cfc721dd41faec7e0","marca_nombre":"Lays","tipo_nombre":"Papas fritas artesanales","categoria_nombre":"Snacks Salados","tipo_control_peso":"riguroso","codigos_adicionales":null} [2026-03-17 12:07:44] Usando lote específico detectado: ninguno para producto ID: 9 [2026-03-17 12:07:44] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2026-03-17 12:07:44] Códigos encontrados para ID 9: 1 [2026-03-17 12:07:44] Detalle de códigos: [{"id":9,"codigo":"17682764263746","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}] [2026-03-17 12:07:44] Códigos con stock disponible: 1 [2026-03-17 12:07:44] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2026-03-17 12:07:44] Stock total calculado para ID 9: 10 [2026-03-17 12:07:44] Producto NORMAL ID: 9 - Tiene lotes: SÍ (cantidad: 1) [2026-03-17 12:07:44] Usando primer código disponible en orden FIFO para ID 9: {"id":9,"codigo":"17682764263746","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null} [2026-03-17 12:07:44] Producto por nombre agregado a resultados (ID: 9) [2026-03-17 12:07:44] Datos finales del producto: {"id":9,"codigo":"17682764263746","nombre":"PAPAS FRITAS LAYS CIBOULETTE INDIVIDUAL - LAYS - 40 GR","precio_venta":"2101.00","precio_final_publico":"2500.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"g","controla_stock":1,"stock":10,"cantidad_por_unidad":"40.00","tipo_codigo":"manual","hash_producto":"70f8ab60fd864e3cfc721dd41faec7e0","marca_nombre":"Lays","tipo_nombre":"Papas fritas artesanales","categoria_nombre":"Snacks Salados","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"10.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":9,"codigo":"17682764263746","tipo_codigo":"manual","cantidad":"10.00","fecha_vencimiento":null}],"precio":"2101.00","marca_logo":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/6\/67\/Lay%27s_logo_2019.svg\/1280px-Lay%27s_logo_2019.svg.png","marca_fallback":"fas fa-tag","marca_fallback_color":"#6c757d","stock_texto":"10 g","stock_disponible":true} [2026-03-17 12:07:44] Se encontraron 1 resultados en total. [2026-03-17 12:07:44] Obteniendo imágenes para productos: 9 [2026-03-17 12:07:44] Imágenes agregadas: 1 productos con imagen [2026-03-17 12:07:44] Respuesta JSON - total_disponible: 1, offset: 0, count: 1, has_more: false [2026-03-17 12:07:44] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2026-03-17 12:42:06] === INICIO BÚSQUEDA DE PRODUCTO === [2026-03-17 12:42:06] Ruta raíz relativa: [PROYECTO_ROOT] [2026-03-17 12:42:06] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2026-03-17 12:42:06] DEBUG SESSION: {"last_regeneration":1773760274,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","producto_creado_id":"10","id_sesion_caja":3,"sesion_caja_id":3,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2026-03-17 12:42:06] DEBUG SESSION ID: b84uv9ujnvns8193946p5vnmnk [2026-03-17 12:42:06] DEBUG SESSION STATUS: 2 [2026-03-17 12:42:06] Negocio en sesión: 78.216.219-5 [2026-03-17 12:42:06] Nombre: SGB-ERP SpA [2026-03-17 12:42:06] Intentando conectar a la base de datos usando la función conectarDB() [2026-03-17 12:42:06] Conexión exitosa a la base de datos [2026-03-17 12:42:06] RUT del negocio en sesión para filtro: 78.216.219-5 [2026-03-17 12:42:06] Buscando producto con código/nombre: huevo [2026-03-17 12:42:06] DEBUG: Código recibido: 'huevo' (longitud: 5) [2026-03-17 12:42:06] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2026-03-17 12:42:06] No se encontró producto_id para el código exacto 'huevo'. Intentando búsqueda parcial... [2026-03-17 12:42:06] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2026-03-17 12:42:06] Códigos parciales encontrados: 0 [2026-03-17 12:42:06] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT :limit OFFSET :offset [2026-03-17 12:42:06] Productos encontrados por nombre: 1 [2026-03-17 12:42:06] Procesando producto encontrado por nombre: {"id":10,"codigo":"17737621147948","nombre":"HUEVO EXTRA BLANCO - 180 UN","precio_venta":"210.00","precio_final_publico":"250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"180.00","cantidad_por_unidad":"180.00","tipo_codigo":"manual","hash_producto":"df87f0ff5bfd7756a0ac55791fd639e0","marca_nombre":null,"tipo_nombre":"Caf\u00e9 en grano","categoria_nombre":"Caf\u00e9","tipo_control_peso":"riguroso","codigos_adicionales":null} [2026-03-17 12:42:06] Usando lote específico detectado: ninguno para producto ID: 10 [2026-03-17 12:42:06] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2026-03-17 12:42:06] Códigos encontrados para ID 10: 1 [2026-03-17 12:42:06] Detalle de códigos: [{"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null}] [2026-03-17 12:42:06] Códigos con stock disponible: 1 [2026-03-17 12:42:06] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2026-03-17 12:42:06] Stock total calculado para ID 10: 180 [2026-03-17 12:42:06] Producto NORMAL ID: 10 - Tiene lotes: SÍ (cantidad: 1) [2026-03-17 12:42:06] Usando primer código disponible en orden FIFO para ID 10: {"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null} [2026-03-17 12:42:06] Producto por nombre agregado a resultados (ID: 10) [2026-03-17 12:42:06] Datos finales del producto: {"id":10,"codigo":"17737621147948","nombre":"HUEVO EXTRA BLANCO - 180 UN","precio_venta":"210.00","precio_final_publico":"250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"180.00","tipo_codigo":"manual","hash_producto":"df87f0ff5bfd7756a0ac55791fd639e0","marca_nombre":null,"tipo_nombre":"Caf\u00e9 en grano","categoria_nombre":"Caf\u00e9","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"180.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null}],"precio":"210.00","stock_texto":"180 un","stock_disponible":true} [2026-03-17 12:42:06] Se encontraron 1 resultados en total. [2026-03-17 12:42:06] Obteniendo imágenes para productos: 10 [2026-03-17 12:42:06] Imágenes agregadas: 0 productos con imagen [2026-03-17 12:42:06] Respuesta JSON - total_disponible: 1, offset: 0, count: 1, has_more: false [2026-03-17 12:42:06] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2026-03-17 12:42:38] === INICIO BÚSQUEDA DE PRODUCTO === [2026-03-17 12:42:38] Ruta raíz relativa: [PROYECTO_ROOT] [2026-03-17 12:42:38] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2026-03-17 12:42:38] DEBUG SESSION: {"last_regeneration":1773760274,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","producto_creado_id":"10","id_sesion_caja":3,"sesion_caja_id":3,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2026-03-17 12:42:38] DEBUG SESSION ID: b84uv9ujnvns8193946p5vnmnk [2026-03-17 12:42:38] DEBUG SESSION STATUS: 2 [2026-03-17 12:42:38] Negocio en sesión: 78.216.219-5 [2026-03-17 12:42:38] Nombre: SGB-ERP SpA [2026-03-17 12:42:38] Intentando conectar a la base de datos usando la función conectarDB() [2026-03-17 12:42:38] Conexión exitosa a la base de datos [2026-03-17 12:42:38] RUT del negocio en sesión para filtro: 78.216.219-5 [2026-03-17 12:42:38] Buscando producto con código/nombre: huevo [2026-03-17 12:42:38] DEBUG: Código recibido: 'huevo' (longitud: 5) [2026-03-17 12:42:38] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2026-03-17 12:42:38] No se encontró producto_id para el código exacto 'huevo'. Intentando búsqueda parcial... [2026-03-17 12:42:38] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2026-03-17 12:42:38] Códigos parciales encontrados: 0 [2026-03-17 12:42:38] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT :limit OFFSET :offset [2026-03-17 12:42:38] Productos encontrados por nombre: 1 [2026-03-17 12:42:38] Procesando producto encontrado por nombre: {"id":10,"codigo":"17737621147948","nombre":"HUEVO EXTRA BLANCO - 180 UN","precio_venta":"210.00","precio_final_publico":"250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"180.00","cantidad_por_unidad":"180.00","tipo_codigo":"manual","hash_producto":"df87f0ff5bfd7756a0ac55791fd639e0","marca_nombre":null,"tipo_nombre":"Caf\u00e9 en grano","categoria_nombre":"Caf\u00e9","tipo_control_peso":"riguroso","codigos_adicionales":null} [2026-03-17 12:42:38] Usando lote específico detectado: ninguno para producto ID: 10 [2026-03-17 12:42:38] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2026-03-17 12:42:38] Códigos encontrados para ID 10: 1 [2026-03-17 12:42:38] Detalle de códigos: [{"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null}] [2026-03-17 12:42:38] Códigos con stock disponible: 1 [2026-03-17 12:42:38] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2026-03-17 12:42:38] Stock total calculado para ID 10: 180 [2026-03-17 12:42:38] Producto NORMAL ID: 10 - Tiene lotes: SÍ (cantidad: 1) [2026-03-17 12:42:38] Usando primer código disponible en orden FIFO para ID 10: {"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null} [2026-03-17 12:42:38] Producto por nombre agregado a resultados (ID: 10) [2026-03-17 12:42:38] Datos finales del producto: {"id":10,"codigo":"17737621147948","nombre":"HUEVO EXTRA BLANCO - 180 UN","precio_venta":"210.00","precio_final_publico":"250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"180.00","tipo_codigo":"manual","hash_producto":"df87f0ff5bfd7756a0ac55791fd639e0","marca_nombre":null,"tipo_nombre":"Caf\u00e9 en grano","categoria_nombre":"Caf\u00e9","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"180.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null}],"precio":"210.00","stock_texto":"180 un","stock_disponible":true} [2026-03-17 12:42:38] Se encontraron 1 resultados en total. [2026-03-17 12:42:38] Obteniendo imágenes para productos: 10 [2026-03-17 12:42:38] Imágenes agregadas: 0 productos con imagen [2026-03-17 12:42:38] Respuesta JSON - total_disponible: 1, offset: 0, count: 1, has_more: false [2026-03-17 12:42:38] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2026-03-17 14:06:22] === INICIO BÚSQUEDA DE PRODUCTO === [2026-03-17 14:06:22] Ruta raíz relativa: [PROYECTO_ROOT] [2026-03-17 14:06:22] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2026-03-17 14:06:22] DEBUG SESSION: {"last_regeneration":1773766957,"negocio_rut":"78.216.219-5","negocio_id":"78.216.219-5","negocio_nombre":"SGB-ERP SpA","negocio_vencimiento":"2026-11-03","2fa_verificado":false,"total_alertas_stock":1,"total_vencidos_sidebar":1,"productos_por_vencer":{"7":0,"15":0,"30":0,"60":0,"90":0},"last_valid_page":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5","producto_creado_id":"11","id_sesion_caja":3,"sesion_caja_id":3,"pagina_actual_acceso":{"ventas_nueva_venta":"\/negocio\/venta\/nueva_venta2.php?rut=78.216.219-5"}} [2026-03-17 14:06:22] DEBUG SESSION ID: 63kerngqhid1ujh9pnud0m5rpn [2026-03-17 14:06:22] DEBUG SESSION STATUS: 2 [2026-03-17 14:06:22] Negocio en sesión: 78.216.219-5 [2026-03-17 14:06:22] Nombre: SGB-ERP SpA [2026-03-17 14:06:22] Intentando conectar a la base de datos usando la función conectarDB() [2026-03-17 14:06:22] Conexión exitosa a la base de datos [2026-03-17 14:06:22] RUT del negocio en sesión para filtro: 78.216.219-5 [2026-03-17 14:06:22] Buscando producto con código/nombre: HUEVO [2026-03-17 14:06:22] DEBUG: Código recibido: 'HUEVO' (longitud: 5) [2026-03-17 14:06:22] Buscando producto_id por código exacto: SELECT DISTINCT producto_id FROM codigos_barras WHERE LOWER(codigo) = LOWER(:codigo) LIMIT 1 [2026-03-17 14:06:22] No se encontró producto_id para el código exacto 'HUEVO'. Intentando búsqueda parcial... [2026-03-17 14:06:22] Buscando producto_id por código parcial: SELECT DISTINCT producto_id, codigo FROM codigos_barras WHERE LOWER(codigo) LIKE LOWER(:codigo_parcial) ORDER BY LENGTH(codigo) LIMIT 20 [2026-03-17 14:06:22] Códigos parciales encontrados: 0 [2026-03-17 14:06:22] Ejecutando consulta por nombre/marca/tipo (parámetros únicos): SELECT p.id, p.codigo, p.nombre, p.precio_venta, p.precio_final_publico, p.stock_minimo, p.modo_venta, p.unidad_medida, p.controla_stock, p.stock, p.cantidad_por_unidad, p.tipo_codigo, p.hash_producto, m.nombre AS marca_nombre, tpm.nombre AS tipo_nombre, c.nombre AS categoria_nombre, COALESCE(p.tipo_control_peso, 'riguroso') as tipo_control_peso, GROUP_CONCAT(CONCAT(cb.codigo, '|', COALESCE(cb.descripcion, ''), '|', cb.tipo_codigo) SEPARATOR ';;') as codigos_adicionales FROM productos p LEFT JOIN marcas_productos_maestra m ON p.marca_id = m.id LEFT JOIN tipos_productos_maestro tpm ON p.tipo_producto_id = tpm.id LEFT JOIN categorias c ON p.id_categoria = c.id LEFT JOIN codigos_barras cb ON p.id = cb.producto_id AND cb.negocio_rut = p.negocio_rut AND cb.codigo != p.codigo WHERE (LOWER(p.nombre) LIKE :termino_nombre OR LOWER(p.nombre_canonico) LIKE :termino_canonico OR LOWER(p.nombre_alias) LIKE :termino_alias OR LOWER(m.nombre) LIKE :termino_marca OR LOWER(tpm.nombre) LIKE :termino_tipo OR LOWER(c.nombre) LIKE :termino_categoria) AND p.negocio_rut = :negocio_rut GROUP BY p.id ORDER BY p.nombre ASC LIMIT :limit OFFSET :offset [2026-03-17 14:06:22] Productos encontrados por nombre: 1 [2026-03-17 14:06:22] Procesando producto encontrado por nombre: {"id":10,"codigo":"17737621147948","nombre":"HUEVO EXTRA BLANCO - 180 UN","precio_venta":"210.00","precio_final_publico":"250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":"180.00","cantidad_por_unidad":"180.00","tipo_codigo":"manual","hash_producto":"df87f0ff5bfd7756a0ac55791fd639e0","marca_nombre":null,"tipo_nombre":"Caf\u00e9 en grano","categoria_nombre":"Caf\u00e9","tipo_control_peso":"riguroso","codigos_adicionales":null} [2026-03-17 14:06:22] Usando lote específico detectado: ninguno para producto ID: 10 [2026-03-17 14:06:22] Buscando códigos para producto: SELECT id, codigo, tipo_codigo, cantidad, fecha_vencimiento FROM codigos_barras WHERE producto_id = :id_producto ORDER BY CASE WHEN fecha_vencimiento IS NULL THEN 1 ELSE 0 END, fecha_vencimiento ASC, id ASC [2026-03-17 14:06:22] Códigos encontrados para ID 10: 1 [2026-03-17 14:06:22] Detalle de códigos: [{"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null}] [2026-03-17 14:06:22] Códigos con stock disponible: 1 [2026-03-17 14:06:22] DEBUG DETECCIÓN ESPECIAL: modo_venta='UNIDAD', tipo_codigo_primero='manual', es_producto_especial=false [2026-03-17 14:06:22] Stock total calculado para ID 10: 180 [2026-03-17 14:06:22] Producto NORMAL ID: 10 - Tiene lotes: SÍ (cantidad: 1) [2026-03-17 14:06:22] Usando primer código disponible en orden FIFO para ID 10: {"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null} [2026-03-17 14:06:22] Producto por nombre agregado a resultados (ID: 10) [2026-03-17 14:06:22] Datos finales del producto: {"id":10,"codigo":"17737621147948","nombre":"HUEVO EXTRA BLANCO - 180 UN","precio_venta":"210.00","precio_final_publico":"250.00","stock_minimo":"5.00","modo_venta":"UNIDAD","unidad_medida":"unidad","controla_stock":1,"stock":180,"cantidad_por_unidad":"180.00","tipo_codigo":"manual","hash_producto":"df87f0ff5bfd7756a0ac55791fd639e0","marca_nombre":null,"tipo_nombre":"Caf\u00e9 en grano","categoria_nombre":"Caf\u00e9","tipo_control_peso":"riguroso","codigos_adicionales":null,"cantidad_codigo":"180.00","fecha_vencimiento":null,"es_busqueda_por_codigo":false,"es_especial":false,"es_por_peso":false,"es_precio_abierto":false,"codigos_disponibles":[{"id":10,"codigo":"17737621147948","tipo_codigo":"manual","cantidad":"180.00","fecha_vencimiento":null}],"precio":"210.00","stock_texto":"180 un","stock_disponible":true} [2026-03-17 14:06:22] Se encontraron 1 resultados en total. [2026-03-17 14:06:22] Obteniendo imágenes para productos: 10 [2026-03-17 14:06:22] Imágenes agregadas: 0 productos con imagen [2026-03-17 14:06:22] Respuesta JSON - total_disponible: 1, offset: 0, count: 1, has_more: false [2026-03-17 14:06:22] === FIN BÚSQUEDA DE PRODUCTO (ÉXITO - 1 resultados) === [2026-04-11 01:35:15] === INICIO BÚSQUEDA DE PRODUCTO === [2026-04-11 01:35:15] Ruta raíz relativa: [PROYECTO_ROOT] [2026-04-11 01:35:15] Archivo config: [PROYECTO_ROOT]/config/config.php - Existe [2026-04-11 01:35:15] DEBUG SESSION: [] [2026-04-11 01:35:15] DEBUG SESSION ID: l4HNxOYPizXpoEKbR1ZT2AF7LPUKopNEUjfJ2CuyUNdffbm7 [2026-04-11 01:35:15] DEBUG SESSION STATUS: 2 [2026-04-11 01:35:15] Error de autenticación. SESSION: []