Crear y Editar Artículos

Manual completo del módulo IN-002: catálogo, formulario, precios, inventario e imágenes

9.2 IN-002 Permiso 411 v3.0 Actualizado 2026-05-13 Nivel operativo 10 min de lectura AY-010
Menú Ayuda

Novedades v3.0 — Mayo 2026

Refactor mayor del editor de artículos

  • Ajuste rápido de stock desde el listado: cuando filtrás una bodega en la búsqueda, la columna Stock de cada artículo se vuelve editable con un control [ − ] cantidad [ + ]. El botón (rojo) resta y el + (verde) suma esa cantidad al stock actual; si en cambio escribís el total y presionás Enter, fija esa cantidad (ajusta por la diferencia) y salta a la siguiente fila. Cada cambio queda registrado en el kardex como ajuste (AJU) en la bodega filtrada. Requiere el permiso "Suma o resta existencia a una bodega" (405).
  • Botón "Buscar" resaltado: el botón de búsqueda del panel de filtros ahora tiene un fondo amarillo suave para ubicarlo más rápido.
  • Lista de precios única: el panel ArticuloPrecios reemplaza la grilla legacy P1..P10. Toda la administración de precios va por los modales Editar Precio (MAP-001) y Agregar Precio (MAP-002).
  • Modal Agregar Precio (MAP-002): permite definir N° de precio, alcance (este artículo o TODOS los activos), moneda, modo Auto/Manual, margen sobre Costo o Venta, % margen, redondeo y descuentos. Incluye barra de progreso para operaciones masivas.
  • Modal Editar Precio (MAP-001) renovado: apariencia moderna con gradiente azul en la cabecera, esquinas redondeadas, animación de entrada y secciones tipo card. La sección Descuentos y Utilidad Mínima se reorganizó en mini-cards con icono semántico (🏷 Desc. Fijo, ↗ Desc. Máximo, 📈 Util. Mínima), texto de ayuda corto bajo cada campo y sufijo % visual dentro del input.
  • Wizard "Nuevo Rápido" (W-001): botón verde en la barra de título que abre un asistente guiado de 4 pasos (Nombre → Categoría → Tributación → Precios+Imagen). La IA sugiere Categoría, SubCategoría, Naturaleza (Producto/Servicio) y CABYS desde el catálogo oficial de Hacienda. Pre-selecciona la tarifa IVA más usada y la actividad económica si solo hay una. En el paso final el usuario digita el precio NETO (con IVA) por cada nivel existente, y elige una imagen del producto desde sugerencias web.
  • Eliminación de niveles de precio con selector de alcance: el botón Eliminar del modal MAP-001 ahora pregunta primero el alcance — "Solo este artículo" (default, sin captcha) o "Todos los artículos de la empresa" (captcha matemático obligatorio). Antes forzaba siempre alcance global. Si no hay artículo cargado, se fuerza el modo "Todos".
  • Banner de niveles redundantes: en el card "Costos y Precios", cuando dos o más niveles tienen exactamente el mismo Precio + Moneda, aparece un banner amarillo con la leyenda "P4, P5, P6 son idénticos a P3 (CRC 500.00)" y un botón Eliminar redundantes que los borra solo en este artículo. Útil para limpiar catálogos legacy donde se repetían valores por defecto en los 10 niveles.
  • Búsqueda de imágenes mejorada: el modal "Buscar imágenes" ahora usa DuckDuckGo Images con SafeSearch estricto, limpia automáticamente la descripción (quita códigos internos, símbolos placeholder, letras huérfanas) y enriquece la búsqueda con la Categoría y la Marca del artículo como hints contextuales. Lista negra defensiva de dominios. Resultados mucho más relevantes que antes (ej. "Fanta 350 ml" devuelve fotos reales de la gaseosa, no resultados aleatorios).
  • Margen sobre Costo o Venta automático: el catálogo de artículos calcula y muestra el % de margen según el campo MargenSobre de cada nivel de precio. Indicador C (Costo / markup) o V (Venta / margen real) al lado del %.
  • Configuración de campos visibles ampliada: Comisión % y Unidad de Medida también se pueden ocultar desde el botón ⚙ Config.
  • Aplicar a TODOS los artículos: al agregar un nivel de precio se aplica automáticamente a TODOS los artículos activos (los niveles son globales). Sincronización automática a empresas externas en una sola operación.
  • Origen del costo default = Promedio: al crear un artículo y aplicar una compra, el sistema usa el costo promedio sin necesidad de configurar manualmente.
  • Stock por Bodega + Ajuste unificados: una sola card con botones + / por fila para sumar/restar stock con la cantidad y justificación que se escribe debajo. Lista TODAS las bodegas aunque el artículo no tenga stock todavía.
  • Botón Config en la barra de título: permite mostrar/ocultar 17 campos opcionales (Marca, Clase, Forma Farmacéutica, Cuenta Inventario, Partida Arancelaria, etc.) y el panel de Imágenes — la configuración es por empresa.
  • Banda de auditoría compacta (Ventas, Creado, Modificado por, fechas) movida al pie en la barra de paginación, centrada.
  • Categoría / Subcategoría reubicadas debajo del Nombre del artículo.
  • Look modernizado: esquinas redondeadas, focus halos azules, hover sutil, botones tipo pill, badges Auto verde / Manual ámbar.
  • Performance: operaciones masivas (12k+ artículos) ahora corren en segundos vía bulk INSERT y MERGE optimizados.
  • Clonar conserva los precios: al clonar un artículo —o al cargar uno, cambiar el código por uno nuevo y Guardar— el artículo nuevo se crea con la misma lista de precios completa (margen, moneda, descuentos y redondeo de cada nivel) y los demás datos del original, sin tener que volver a cargarlos. Disponible en escritorio y móvil.

Vista general

Alcance
Catálogo completo
Productos, servicios y recetas
Precios
Multi-nivel dinámico
Con margen automático y multi-moneda
Stock
Multi-bodega
Ajuste in-situ
Cumplimiento
Hacienda CR
CABYS + Actividad

El módulo Crear y Editar Artículos (IN-002) es la herramienta principal para administrar el catálogo de productos y servicios de la empresa. Desde aquí puede:

  • Crear nuevos artículos con código automático o manual.
  • Editar todos los datos de un artículo existente.
  • Gestionar listas de precios multi-nivel y multi-moneda (cantidad de niveles definida por la empresa) con cálculo automático de margen y redondeo.
  • Administrar múltiples imágenes por artículo (subir, pegar, reordenar, eliminar).
  • Consultar y ajustar el stock por bodega.
  • Buscar y filtrar artículos con más de 15 criterios combinables.
  • Exportar resultados a Excel o PDF.

Flujo de trabajo recomendado

1
Datos básicos
Código, nombre, categoría, IVA
2
Hacienda
CABYS + Actividad económica
3
Costos y precios
Costo + niveles de precio con margen
4
Inventario
Stock inicial por bodega
5
Imágenes
Subir / pegar / buscar web
6
Guardar
Ctrl+S o botón Guardar

Estructura de pantalla

La pantalla se divide en dos áreas principales:

  • Formulario (arriba) — Editor con 3 columnas: Datos + Costos/Precios, Otros Datos, e Imágenes + Inventario. En móvil se apilan verticalmente con acordeones colapsables.
  • Buscador (abajo) — Tabla con filtros para localizar artículos. Al hacer clic en un artículo se carga en el formulario para editarlo.
Layout editor — 3 columnas
BARRA TÍTULO — Nuevo · Clonar · Guardar · Kardex · Imprimir · Excel · Salir
Card: Datos Básicos
Card: Costos y Precios
Card: Imágenes
Card: Otros Datos
Card: Stock por Bodega
Card: Ajuste Stock
BUSCADOR — Filtros + tabla paginada con doble clic → cargar
Modo móvil En pantallas pequeñas, cada sección del formulario se convierte en un acordeón que puede expandir o colapsar tocando su encabezado. Al editar un artículo desde el celular también puede:
  • Eliminar el artículo: botón de papelera en el encabezado (solo si la existencia está en cero, igual que en escritorio).
  • Ajustar stock por bodega: toque una bodega en la tarjeta Stock por Bodega y sume o reste unidades con su justificación; el movimiento queda en el kardex como ajuste (AJU).

Casos de uso por rol

Cajero / Vendedor
Consulta y venta
  • Consultar precio y stock desde facturación
  • Ver imágenes para confirmar producto
  • No modifica datos (solo lectura)
Encargado de Inventario
Gestión completa
  • Crear y editar artículos (permiso 411)
  • Ajustar stock por bodega
  • Administrar imágenes y categorías
  • Buscar duplicados y hacer cambios globales
Contador / Administrador
Precios, costos, cumplimiento
  • Ver costos y utilidades (permiso 013)
  • Validar CABYS y tarifa IVA
  • Exportar catálogo a Excel para análisis
  • Ajustar márgenes por subcategoría

Acceso y permisos

El módulo requiere los siguientes permisos:

PermisoDescripciónFuncionalidad
411Crear y editar artículosGuardar, eliminar, ajustar stock, subir imágenes
055Ver existenciasVer la tabla de Stock por Bodega
013Ver costos y utilidadesVer columnas de costo en la tabla de búsqueda
Sin permiso 411 Si no tiene el permiso 411, podrá ver los datos del artículo pero no podrá guardar cambios. Los botones de acción aparecerán deshabilitados.

Datos del artículo

La sección Datos contiene la información básica obligatoria del artículo:

CampoTipoOblig.ValidaciónEjemplo
Código VARCHAR(15) Sí* Máx 15 caracteres. Auto si se deja vacío (CCSS####). 99010003
Cód. Barra VARCHAR(45) No EAN-13 / UPC. Sin validación de dígito verificador. 7441003500150
Nombre VARCHAR(255) Check MAYUSC opcional convierte a mayúsculas al guardar/cargar. Coca-Cola 600ml
Detalle Interno VARCHAR(500) No Notas internas, buscables. No se muestran al cliente. Lote julio 2026
Categoría CHAR(2) FK a Tipo_Articulo. Modal selector. 99
SubCategoría CHAR(2) FK a SubTipo_Articulo dentro de la categoría. 01
Naturaleza TINYINT 1=Producto, 2=Servicio, 3=Receta. 1
Tarifa IVA CHAR(2) Código Hacienda: 01=exento, 08=13%, 02=1%, 03=2%, 04=4%. 08
Actividad VARCHAR(6) Cond. Obligatorio si ParametrosEmpresa[125]=1. 471100
CABYS CHAR(13) Cond. 13 dígitos. Validación contra catálogo Hacienda. Obligatorio si ParametrosEmpresa[125]=1. 1122202100000
Cumplimiento Hacienda Costa Rica Desde 2023 la DGT exige CABYS de 13 dígitos y Actividad económica en toda factura electrónica. Active el parámetro 125 para que ambos campos sean obligatorios en el catálogo. El CABYS determina la tarifa de IVA por defecto; verifique que el cabys_tarifa coincida con el campo Tarifa IVA del artículo.

Código automático

Si deja el campo Código vacío al crear un artículo nuevo, el sistema genera uno automático con el formato:

Formato: CCSS#### CC = últimos 2 dígitos de la categoría, SS = últimos 2 dígitos de la subcategoría, #### = consecutivo de 4 dígitos. Ejemplo: si la categoría es "99" y la subcategoría "01", el código será 99010001, 99010002, etc.

Buscador CABYS

Al hacer clic en el botón de lupa () junto al campo CABYS, se abre un modal donde puede buscar por código o por descripción. Al seleccionar un resultado, se rellena automáticamente el código y el nombre CABYS.

Para desarrolladores — estructura mínima para INSERT
-- Crear artículo nuevo (los 7 campos obligatorios)
INSERT INTO Articulos (
    Cod_Articulo, Descripcion,
    Cod_Tipo_Articulo, Cod_SubTipo,
    Cod_Naturaleza, CodTarifaImpuesto,
    CodigoCabys, CodigoActividad
) VALUES (
    '99010003', 'COCA-COLA 600ML',
    '99', '01',
    1, '08',                   -- Producto, IVA 13%
    '1122202100000', '471100'
);

Costos y precios

Esta sección administra el costo del artículo y la lista de precios multi-nivel (cantidad de niveles definida por la empresa) con cálculo automático de margen, redondeo y soporte multi-moneda.

Origen del costo

El primer renglón permite elegir qué costo se usa como referencia para los cálculos de margen y utilidad:

OpciónDescripción
ManualEl costo se ingresa manualmente. Es el valor predeterminado.
PromedioUsa el costo promedio calculado por el sistema basado en las compras.
ÚltimoUsa el costo de la última compra registrada.
BrutoUsa el costo bruto de compra (antes de impuestos).

Opciones adicionales (checkboxes)

En la misma fila del origen del costo se encuentran opciones adicionales:

  • P.Manual — Permite modificar el precio de venta manualmente durante la facturación. Si está desactivado, el precio está bloqueado.
  • Sobregira — Permite vender el artículo aunque no haya stock disponible en la bodega.
  • Fracción — Permite vender cantidades fraccionarias (ej: 0.5 kg, 1.25 metros).
  • Serie — Requiere que se ingrese un número de serie al facturar este artículo.
  • Web — Marca el artículo para mostrarse en la tienda en línea.

Tabla de costos

Debajo del origen se muestran 4 campos de costo alineados en columnas:

  • Manual — Costo ingresado por el usuario (editable).
  • Promedio — Costo promedio ponderado (se actualiza al registrar compras).
  • Último — Costo de la última compra (se actualiza automáticamente).
  • Bruto — Costo bruto de la última compra.

Cambiar la moneda del artículo (2026-07-18)

El artículo tiene una moneda propia, que se cambia desde la etiqueta de moneda en el encabezado de Datos básicos. Los costos guardados están expresados en esa moneda.

Al cambiarla y guardar, el sistema pregunta si desea convertir también los costos usando el tipo de cambio vigente:

  • Aceptar — Se convierten los cuatro costos (Propio, Promedio, Último y Bruto). El costo resultante se traslada a los precios del artículo y se recalculan los que están en modo automático.
  • Cancelar — Solo cambia la moneda; los costos quedan con el mismo número.

Ejemplo: un artículo en dólares con costo 1.50, al pasarlo a colones con un tipo de cambio de 455.14, queda con costo 682.71.

Importante: la conversión nunca se aplica sola — siempre requiere su confirmación. Si no hay tipo de cambio registrado para la fecha, el sistema no inventa ningún valor: deja los costos como están y lo registra en la bitácora del artículo, junto con el tipo de cambio aplicado cuando sí se convierte.

Tenga presente que cada nivel de precio tiene además su propia moneda, independiente de la del artículo. Cambiar la del artículo no modifica la de los niveles de precio.

Precios P1 a P10

Cada artículo puede tener hasta 10 precios de venta (P1 a P10). Cada precio tiene 4 columnas interrelacionadas:

ColumnaDescripciónEditable
PrecioPrecio base de venta (sin IVA)
Margen %Porcentaje de ganancia sobre el costo
UtilidadGanancia absoluta (Precio - Costo)
Venta+IVAPrecio final con impuesto incluido
Cálculo automático Al modificar cualquiera de los 4 campos, los otros 3 se recalculan automáticamente. Por ejemplo, si cambia el margen, se actualizan precio, utilidad y venta+IVA. Las fórmulas usan el costo del origen seleccionado.
Precio P1 El precio P1 se resalta con un borde especial porque es el precio principal utilizado por defecto en facturación.
Mejor práctica Configure primero los márgenes por subcategoría (un porcentaje por nivel). Al crear un artículo nuevo, el sistema aplica esos porcentajes automáticamente al costo — solo tiene que ajustar si algún precio debe ser diferente.
Validación al guardar El sistema rechaza guardar si hay utilidad negativa en P1 (precio menor al costo). Esto previene ventas con pérdida por error de digitación. Los demás precios (P2–P10) sí admiten utilidad negativa si el usuario lo confirma.
Tabla Kardex eliminada A partir de 2026-04, el módulo ya no escribe en la tabla Kardex. Todos los movimientos pasan por InventarioMovimiento + actualización de Articulos.UltimoMovimiento. Si su integración consultaba Kardex, debe migrar a vista_movimientos.

Otros datos

La sección de Otros Datos contiene campos opcionales para información complementaria del artículo:

Generales

CampoDescripción
Estado1 = Activo, 2 = Inactivo, 3 = Eliminado, 4 = Descontinuado. Solo los activos aparecen en facturación.
MonedaMoneda del artículo (CRC, USD, EUR). Si la empresa opera en colones, seleccione CRC.
Mínimo StockCantidad mínima que debe existir en inventario. Se usa para alertas de reabastecimiento.
Máximo StockCantidad máxima recomendada en inventario.
Desc. Máximo %Porcentaje máximo de descuento que se puede aplicar al facturar este artículo.
Comisión %Porcentaje de comisión para el agente de ventas al vender este artículo.
VentasCantidad total de unidades vendidas (solo lectura, se actualiza automáticamente).
DescuentoMonto fijo de descuento aplicado al artículo.
Precio SugeridoPrecio sugerido por el fabricante o proveedor.

Identificación

CampoDescripción
Cód. UniversalCódigo universal del producto (si aplica).
ProveedorProveedor principal asociado al artículo.
MarcaMarca comercial del producto.
ClaseClasificación adicional libre.
Unidad MedidaUnidad de medida (ej: UND, KG, LT, MT).
Uds. x MedidaCantidad de unidades por medida (ej: 6 latas por paquete). Valor predeterminado: 1.
Orden CompraNúmero de orden de compra asociado.

Farmacéutico

Para artículos farmacéuticos, se incluyen campos adicionales:

CampoDescripción
Forma Farmac.Forma farmacéutica del medicamento (ej: tabletas, cápsulas, jarabe). Se selecciona de un catálogo con más de 200 formas.
Reg. SanitarioNúmero de registro sanitario del producto (ej: 2101-YK-5279).

Auditoría

Al final de la sección se muestran campos de solo lectura con información de auditoría:

  • Creado — Fecha y hora de creación del artículo.
  • Creado por — Usuario que creó el artículo.
  • Modificado — Fecha y hora de la última modificación.
  • Modifica por — Usuario que realizó la última modificación.

Cuenta Contable de Inventario (2026-05-01)

Cada artículo puede tener su propia cuenta contable de inventario. Se usa al registrar compras: cuando se aplica una compra, el monto del artículo aumenta esta cuenta en el asiento contable. Si el artículo no tiene cuenta asignada, el sistema usa la cuenta default global (Parámetro 92 en Configuración → Parámetros).

  • Cta. Inventario — Doble clic en el campo abre un buscador del catálogo contable. Seleccione la cuenta y el código se rellena automáticamente.
  • Si lo deja en blanco, se aplicará la cuenta default del Parámetro 92.
  • Para casos especiales por proveedor (mismo artículo, distinta cuenta según proveedor), se usa la tabla ProveedorArticuloCuenta que tiene prioridad sobre la cuenta del artículo.
Cuenta de depreciación

La depreciación NO se configura por artículo. Si el artículo es un activo fijo, la cuenta de depreciación se asigna en el módulo Activos Fijos al registrar el activo individual (un mismo artículo puede dar origen a varios activos fijos con distintas cuentas de depreciación según uso, ubicación, etc.).

Imágenes

Cada artículo puede tener múltiples imágenes organizadas en un carrusel. La primera imagen se usa como imagen principal en otros módulos.

Agregar imágenes

Existen 3 formas de agregar imágenes:

  1. Botón + — Haga clic en el botón del encabezado "Imágenes" para abrir el selector de archivos. Soporta formatos JPG, PNG, GIF, WebP.
  2. Pegar (Ctrl+V) — Copie una imagen del portapapeles y péquela directamente en el área de la imagen. Ideal para capturas de pantalla.
  3. Arrastrar y soltar — Arrastre un archivo de imagen desde su explorador de archivos al área de la imagen.

Navegar entre imágenes

Use las flechas o las teclas de flecha izquierda/derecha del teclado para navegar entre las imágenes. El contador en el encabezado muestra la posición actual (ej: 2/5).

Eliminar imágenes

Haga clic en el botón del encabezado para eliminar la imagen actual. Se le pedirá confirmación antes de eliminar.

Almacenamiento Las imágenes se guardan en el servidor como archivos PNG. La imagen principal lleva el nombre del código del artículo (ej: 99010001.png). Las adicionales llevan un sufijo numérico.

Asignar imágenes desde mis archivos IN-014

¿Tiene una carpeta con muchas fotos de sus productos en la computadora y no quiere asignarlas una por una? Esta pantalla le permite cargar todas a la vez: el sistema lee la carpeta, reconoce a qué producto corresponde cada foto por el nombre del archivo y se las asigna en lote.

Cómo entrar Desde Artículos, botón "Imágenes masivo" en la barra de título. Si antes marca artículos en el buscador, la comparación se hace solo contra esos (más rápido y preciso).

Paso a paso

  1. Abrir carpeta — Elija la carpeta de su equipo donde están las fotos. El sistema lista todas las imágenes que encuentre, con su miniatura.
  2. Elegir el método de coincidencia:
    • IA (recomendado) — Reconoce el producto aunque el nombre del archivo esté abreviado o con las palabras en otro orden (ej: coca 600.jpgCOCA COLA 600 ML). Requiere saldo de IA.
    • Sin IA — aproximado por nombre — Compara por palabras en común. Funciona siempre, sin costo. Si el nombre del archivo se parece a la descripción, lo encuentra igual.
  3. Analizar — El sistema arma una tabla: cada foto con el producto sugerido y un nivel de confianza (alta / media / baja).
  4. Revisar y corregir — Puede cambiar el producto de cualquier fila con la lista desplegable, o destildar las que no quiera asignar.
  5. Asignar seleccionadas — Sube y asigna las fotos marcadas. Cada una reemplaza la imagen principal del producto.
Para mejores resultados Nombre los archivos parecido a la descripción del producto. Las fotos con nombres genéricos (foto_2026-06-01.jpg, imagen1.png) probablemente queden sin coincidencia: eso es normal, asígnelas manualmente o renómbrelas.
Importante Necesita el permiso Crear y editar artículos (411). La asignación reemplaza la imagen principal del producto: si quiere conservar la anterior, descárguela antes. Nada se sube hasta que usted presiona "Asignar seleccionadas".

Inventario

La sección de inventario muestra y permite gestionar el stock del artículo por bodega.

Stock por Bodega

La tabla muestra el stock actual del artículo en cada bodega donde tiene existencia:

ColumnaDescripción
BodCódigo de la bodega.
NombreNombre de la bodega.
StockCantidad actual en inventario.
UbicaciónUbicación física dentro de la bodega (editable). Haga clic para cambiar la ubicación. Los cambios se guardan automáticamente al salir del campo o al presionar Enter.
Ubicación editable El campo Ubicación es editable directamente en la tabla. Puede usarlo para indicar la posición física del producto (ej: "Pasillo 3, Anaquel B, Nivel 2").

Ajuste de Stock

Permite realizar ajustes rápidos de inventario sin necesidad de crear una nota de entrada/salida:

  1. Toque la fila de la bodega donde desea ajustar el stock — queda marcada (resaltada). Si no toca ninguna, queda seleccionada la primera de la lista por defecto.
  2. Ingrese la cantidad a ajustar (en la barra inferior).
  3. Escriba una justificación para el ajuste (requerida para auditoría).
  4. Haga clic en + (sumar / entrada) o (restar / salida).

Tras el ajuste la lista se actualiza con el nuevo stock y la bodega seleccionada se mantiene marcada (con un destello verde), así puede seguir aplicando + / sobre la misma bodega sin tener que volver a tocarla.

Auditoría Todo ajuste de stock queda registrado en el kardex con tipo de documento AJU (Ajuste), incluyendo la justificación, el usuario y la fecha/hora.

Modal Kardex — movimientos del artículo MIN-003

El Kardex es un modal reutilizable que muestra el historial cronológico de movimientos (entradas, salidas, ajustes) del artículo cargado, con saldo corrido. Se abre desde el botón "Kardex" () en la barra de título del formulario.

Modal MIN-003 — Kardex
HEADER — Kardex — 02010021 Coca 11 · Bodega [▼] · Desde [📅] · Hasta [📅] · Buscar · Excel · ✕
TABLA — Fecha · Tipo Doc · Documento · Bodega · Cantidad (+/−) · Costo · Saldo · Usuario
FOOTER — Totales (entradas, salidas, saldo final)

Filtros del header

FiltroTipoDefaultDescripción
Bodega select Todas Filtrar movimientos por bodega. Si el kardex se abre desde un módulo con bodega preseleccionada (ej: Traslados), viene precargada.
Desde date Hoy − 3 meses Fecha inicial (YYYY-MM-DD). El rango por defecto son los últimos 90 días.
Hasta date Hoy Fecha final. Ambas fechas inclusive.

Tipos de movimiento

  • FAC — Factura de venta (salida, cantidad negativa)
  • COM — Compra (entrada)
  • DEV — Devolución (NC venta = entrada; NC compra = salida)
  • REQ / RIN — Requisición / traslado interno
  • TCI — Traslado entre empresas
  • AJU — Ajuste manual desde la card "Ajuste Stock"
  • TOM — Toma física aplicada
  • NEI / NSI — Nota de entrada / salida manual

Acciones disponibles

  1. Buscar — aplica los filtros actuales y refresca la tabla.
  2. Excel — exporta los movimientos filtrados a XLSX con cabecera, totales y columnas tabulares.
  3. Doble clic en fila — abre el documento de origen (factura, traslado, toma física) en una nueva pestaña.
  4. Cerrar — ícono ✕ arriba a la derecha o tecla Esc.
Saldo corrido Cada fila muestra el saldo de unidades y saldo de costo después del movimiento, calculado con un CTE SQL (RunningStock). Útil para auditar desfases de inventario punto a punto.
Componente reutilizable El modal está en /componentes/modal_kardex/ y se invoca desde JS así:
// Preseleccionar bodega y abrir
kardex.bodega = '2';
kardex.abrir('02010021', 'Coca 11');
Además de IN-002, lo usan Traslados (IN-007), Toma Física (IN-TF-001) y Notas E/S (IN-009).

Crear un artículo nuevo

Para crear un artículo nuevo, siga estos pasos:

  1. Haga clic en el botón "Nuevo" () en la barra de título, o presione Ctrl+N. Esto limpia todos los campos del formulario.
  2. Ingrese el Código del artículo (opcional: déjelo vacío para código automático).
  3. Llene el Nombre del artículo. Opcionalmente active el check MAYUSC junto al rótulo para que el nombre se guarde y se muestre siempre en mayúsculas (la preferencia queda recordada en el navegador).
  4. Seleccione la Categoría haciendo clic en el botón de lápiz ().
  5. Seleccione la Naturaleza (Producto, Servicio o Receta).
  6. Seleccione la Tarifa IVA.
  7. Ingrese el Costo y al menos el Precio 1.
  8. Haga clic en "Guardar" () o presione Ctrl+S.
Nuevo
Llenar datos
Costo y precios
Guardar
Validación automática El sistema valida que los campos obligatorios estén completos antes de guardar. Si falta algún campo, se muestra un mensaje indicando cuáles campos debe completar.

Editar un artículo existente

Para editar un artículo:

  1. Busque el artículo en la sección de Búsqueda usando cualquier criterio (código, nombre, código de barra, etc.).
  2. Haga clic en la fila del artículo. Los datos se cargan automáticamente en el formulario superior.
  3. Modifique los campos que necesite cambiar.
  4. Haga clic en "Guardar" o presione Ctrl+S.
Bitácora de cambios Al guardar, el sistema compara los valores anteriores con los nuevos y registra solo los campos que cambiaron en la bitácora de auditoría. Si no hay cambios, se muestra "Sin cambios detectados".

Clonar un artículo

La función de clonación crea una copia del artículo actual con un código nuevo, conservando los precios y todos los datos para que no tenga que volver a cargarlos.

  1. Cargue el artículo que desea clonar (búsquelo y haga clic en él).
  2. Haga clic en "Clonar" ().
  3. El formulario queda con todos los datos del artículo original y en modo "crear".
  4. Escriba el código nuevo (o déjelo vacío para uno automático) y cambie lo que necesite.
  5. Haga clic en "Guardar". El artículo nuevo se crea con la misma lista de precios (todos los niveles, con su margen, moneda, descuentos y redondeo), el costo y los demás datos del original.
Atajo "Guardar como" (escritorio) Con un artículo ya cargado, también puede simplemente cambiar el código en el campo de código por uno que no exista y pulsar "Guardar": el sistema crea un artículo nuevo con ese código conservando precios y datos del que tenía en pantalla.
Imágenes no se clonan Las imágenes del artículo original no se copian al clonar. Deberá subir nuevas imágenes para el artículo clonado.

Eliminar artículos

Puede eliminar artículos de dos formas:

Eliminación individual

Cargue el artículo en el formulario, luego use la opción de eliminación. El artículo cambia a estado Eliminado (3) pero permanece en la base de datos para auditoría.

Desde el celular: al editar un artículo aparece un botón de papelera en el encabezado. El borrado solo procede si la existencia está en cero; si tiene stock, el sistema lo bloquea.

Eliminación múltiple

  1. En la tabla de búsqueda, active los checkboxes de los artículos que desea eliminar.
  2. Haga clic en el botón "Eliminar" () que aparece en la barra de título.
  3. Confirme la operación. Los artículos seleccionados cambiarán a estado Eliminado.
Artículos con movimientos Si un artículo tiene ventas, compras o movimientos de inventario registrados, no se puede eliminar permanentemente. Solo se cambia a estado Eliminado para preservar la integridad de los datos históricos.

Buscador

El buscador utiliza un sistema de búsqueda en cascada inteligente:

  1. Código exacto — Si el texto buscado coincide exactamente con un código de artículo (sin espacios), muestra solo ese artículo.
  2. Palabras múltiples — Si no hay coincidencia exacta, busca por palabras en los campos: código, código de barra, nombre y detalle interno. Todas las palabras deben coincidir (AND).

Columnas de la tabla

ColumnaDescripción
CódigoCódigo del artículo (enlace al formulario).
NombreNombre del artículo.
CategoríaCategoría y subcategoría.
CostoCosto del artículo (solo con permiso 013).
PrecioPrecio de venta según la lista seleccionada en filtros.
Vta+IVAPrecio final con IVA incluido.
IVAPorcentaje de IVA aplicado.
UtilidadPorcentaje de utilidad del precio seleccionado. Se calcula según cómo esté configurado ese nivel de precio: sobre el costo (marca C) o sobre la venta (marca V). En verde si hay ganancia, en rojo si el precio queda bajo el costo. Al pasar el mouse muestra la ganancia en colones.
Se puede ordenar: haga clic en el encabezado Utilidad para ordenar de menor a mayor y otra vez para invertirlo. El orden se aplica a todo el inventario filtrado, no solo a la página visible, así que la primera página le trae realmente los artículos de mayor (o menor) utilidad. Ordenando de mayor a menor salen de primero los artículos con el costo en cero, cuyo porcentaje se dispara: es la forma más rápida de detectarlos y corregirles el costo.
StockExistencia total o por bodega filtrada.
EstadoEstado actual del artículo.
Interacción Haga clic en cualquier fila para cargar el artículo en el formulario de edición. Use las teclas de flecha ( ) para navegar entre filas y Enter para seleccionar.

Filtros avanzados

El buscador ofrece múltiples filtros combinables para refinar la búsqueda:

FiltroTipoDescripción
BuscarTextoCódigo, código de barra, nombre o detalle interno.
CategoríaSelectFiltra por categoría principal.
SubCatSelectFiltra por subcategoría.
EstadoSelectActivo, Inactivo, Eliminado, Descontinuado. Por defecto: Activo.
BodegaSelectFiltra stock por una bodega específica.
IVASelectFiltra por tarifa de IVA.
NaturalezaSelectProducto, Servicio o Receta.
PrecioSelectLista de precios a mostrar (P1 a P10).
StockOperador + ValorFiltra por cantidad de stock (ej: >= 10, = 0, < 5).
Utilidad %Operador + ValorFiltra por el porcentaje de utilidad del precio seleccionado (ej: < 5 = artículos con menos del 5% de utilidad; >= 30, = 0). Respeta si el margen está configurado sobre costo o sobre venta. Ideal para detectar artículos vendiéndose con poca o nula ganancia. El filtro también aplica a la exportación a Excel.

Filtros de checkbox

Debajo de los filtros principales hay checkboxes adicionales:

  • Sin Actividad — Muestra solo artículos que no tienen actividad económica asignada.
  • Sin CABYS — Muestra solo artículos sin código CABYS.
  • Fraccionados — Muestra solo artículos que permiten venta fraccionaria.
  • Con Descuento — Muestra solo artículos que tienen descuento máximo configurado.
  • Mostrar Ventas — Al marcarse aparecen los inputs Ventas Desde / Hasta y se agrega la columna Vendido en la tabla con la cantidad de unidades vendidas en ese rango (las Notas de Crédito restan automáticamente). Se consideran solo documentos en Estado 1, 2 o 4 (procesados).

Filtros por fecha de creación

Independiente del check "Mostrar Ventas", el buscador tiene dos campos opcionales:

  • Creado Desde — Solo muestra artículos cuyo FechaCreado sea igual o posterior a la fecha indicada.
  • Creado Hasta — Solo muestra artículos cuyo FechaCreado sea igual o anterior a la fecha indicada (límite inclusivo, fin de día).

Si dejás ambos vacíos no se aplica filtro de fecha de creación. Útil para ver qué artículos se crearon en un período específico (auditoría, alta de inventario, etc.).

Combinación de filtros Todos los filtros se combinan con AND, lo que permite búsquedas muy precisas. Por ejemplo: artículos activos de categoría "Medicamentos" con stock igual a 0 en la bodega principal.

Exportar

Los resultados de la búsqueda se pueden exportar en dos formatos:

Excel

Haga clic en el botón "Excel" () para descargar un archivo .xlsx con todos los artículos que coincidan con los filtros actuales.

PDF

Haga clic en el botón "PDF" () para generar un documento PDF con el listado.

Imprimir

El botón "Imprimir" () abre la ventana de impresión del navegador con una versión optimizada para papel. El formulario se oculta y solo se imprime la tabla de resultados.

Cambios globales MIN-004

El modal Cambios Globales de Artículos permite aplicar una modificación masiva sobre varios artículos a la vez: cambiar familia, IVA, CABYS, marca, precios, costos, visibilidad web, sobregiro, fraccionamiento, estado (activar/eliminar), descargar fotos, etc.

Flujo de selección

  1. Aplique los filtros del buscador (por categoría, marca, IVA, stock, etc.).
  2. Marque los artículos a modificar:
    • Checkbox individual en cada fila — selecciona solo ese artículo.
    • Checkbox del encabezado (☑ "Seleccionar todos") — selecciona TODOS los artículos del filtro completo, no solo los de la página actual. Si hay varias páginas, muestra un indicador "Cargando..." mientras recupera la lista completa.
  3. Cuando hay más de una página de resultados, aparece una barra informativa amarilla bajo el encabezado que indica cuántos artículos están seleccionados (ej: "Seleccionados los 11,681 artículos del filtro (todas las páginas)"). Desde esta barra puede reducir el alcance a "Seleccionar solo esta página".
  4. Haga clic en el botón "Globales" () en la barra superior. Se abre el modal MIN-004 con un contador de artículos seleccionados.
  5. Complete los campos de la acción deseada y presione el botón correspondiente. Confirme la operación.
  6. El resultado aparece en el panel "Resultados" al pie del modal, con timestamp y número de artículos actualizados. El API procesa internamente en lotes de 500 registros.
Selección persistente La selección se mantiene entre filtros/páginas mientras no recargue el módulo. El botón "Globales" siempre opera sobre el Set completo de códigos seleccionados (no solo los checkboxes visibles).

Acciones disponibles (organizadas en 5 pestañas — v2.0.0 · 2026-05-05)

El modal MIN-004 ahora se presenta en pestañas de navegación para encontrar rápidamente la operación buscada. Cada pestaña agrupa cards con una operación cada una.

PestañaAcciónEfecto
📋 IdentificaciónMover a CategoríaCambia Categoría + Subcategoría. Ahora 2 inputs de texto libre con autocompletado desde la base de datos. Al elegir una categoría existente, las subcategorías se filtran automáticamente; también se puede crear una categoría nueva escribiéndola directamente.
Cambiar NaturalezaProducto / Servicio / Receta.
Cambiar Tipo IVATarifa fiscal (01–08).
Cambiar CABYSCódigo Hacienda 13 dígitos.
Fijar MarcaAsigna marca textual.
Actividad EconómicaAsocia código de actividad económica.
Agregar / Quitar TextoAppend o remove del DetalleInterno.
📦 StockEstablecer MínimoDefine punto de reorden mínimo.
Establecer MáximoDefine stock máximo.
Permitir / Quitar SobregirarSobregira = 1/0.
Permitir / Quitar FraccionarFraccionamiento = 1/0.
💰 Precios por nivel (ArticuloPrecios)Desc. Fijo por nivelUPDATE ArticuloPrecios.DescuentoFijo en el nivel P1..Pn elegido.
Desc. Máximo por nivelUPDATE ArticuloPrecios.DescuentoMaximo en el nivel elegido. Tope efectivo del descuento que cualquier cajero podrá aplicar.
Util. Mínima por nivelUPDATE ArticuloPrecios.UtilidadMinima en el nivel elegido. Se respeta SIEMPRE en facturación, incluso para usuarios con permiso 023 (descuento ilimitado).
Margen Sobre por nivelCambia ArticuloPrecios.MargenSobre a COSTO o VENTA. Ahora dispara recálculo del precio desde el margen ancla con la nueva fórmula (antes solo cambiaba el flag y dejaba precios viejos).
Modo de venta por nivelCambia ArticuloPrecios.PrecioAuto a 1 (Auto: recalcula con costo) o 0 (Manual: precio fijo). Ahora pasa por la función central: si cambia a Auto recalcula el Precio desde el Margen; si cambia a Manual recalcula el Margen desde el Precio.
Redondeo de precio por nivelFija el paso de redondeo del Precio + IVA del nivel elegido y re-redondea el precio actual. Desplegable con grupos ↑ Hacia arriba (0.1, Entero, ×5, ×10, ×25, ×50, ×100, ×500, ×1000) y ↓ Hacia abajo (los mismos en negativo), más "2 decimales (sin redondeo)". Ej.: Precio+IVA 84.08 con ↓ ×5 queda en 80.00.
🏷️ Costo & Precio masivoAjustar Precio Venta % NUEVOCard unificada con selector Aumentar / Quitar. Aumentar: Precio × (1 + pct/100). Quitar: Precio ÷ (1 + pct/100) — operación inversa. Útil para revertir un aumento masivo (subiste 5% ayer y hoy le das "Quitar 5%" → vuelve al precio original) o para extraer IVA cuando el precio ya lo incluye (quitar 13% = ÷ 1.13). Actualiza dbo.ArticuloPrecios.
Establecer PrecioFija el nivel de precio (P1..Pn) a un monto específico en ArticuloPrecios.
Actualizar MargenFija el margen % del nivel y recalcula el precio desde el costo, según el modo Costo/Venta del artículo. Escribe en ArticuloPrecios.
Aumentar Costo %Incrementa el costo actual por porcentaje y propaga a todos los niveles de ArticuloPrecios.
Establecer CostoFija el costo a un monto específico y propaga a todos los niveles de ArticuloPrecios.
Sincronización automática con empresas externas: todos los cambios masivos sobre precios/costos/márgenes ahora replican automáticamente a las empresas configuradas en EmpresasSincronizadas (parámetro 239 = 1). Para cambios por nivel se hace un MERGE bulk por destino (un solo statement, rapidísimo). Para cambios de costo se sincroniza artículo por artículo porque afecta todos los niveles.
👁️ Estado & VisibilidadActivar / Eliminar ArtículosCod_Estado = 1 o 3.
Mostrar / Ocultar en WebMostrarEnWeb = 1/0.
Descargar FotosGenera ZIP con imágenes existentes.
Buscar y Asignar FotosBusca imágenes usando el endpoint web (DuckDuckGo + SafeSearch estricto) usando el nombre del artículo + Categoría + Marca como hints, y permite asignar la imagen correcta desde una galería de 4 sugerencias.
Niveles de precio dinámicos (P1..Pn) Los selectores de nivel se generan en tiempo real desde SELECT DISTINCT NumeroPrecio FROM dbo.ArticuloPrecios. Si la empresa solo tiene precios P1, P2 y P5, solo verás esos tres niveles. Esto vale para todas las operaciones de precio (pestañas Precios por nivel y Costo & Precio masivo).
Las operaciones de costo y precio usan la lista de precios unificada Las operaciones de Costo & Precio masivo (Aumentar % de Venta, Establecer Precio, Actualizar Margen, Aumentar Costo %, Establecer Costo) ya no escriben en las columnas viejas DBVenta1..10; ahora actualizan directamente la tabla unificada dbo.ArticuloPrecios a través del mismo motor que usa el editor de artículos (con recálculo de margen, redondeo del Neto y soporte multi-moneda). Si algún artículo no tiene definido el nivel elegido, se reporta como aviso y no se interrumpe el resto.
Categoría y Subcategoría como texto libre En la nueva arquitectura, Categoría y Subcategoría se guardan como texto directo en Articulos.Categoria y Articulos.SubCategoria (no más códigos en tablas separadas). El input es un campo de texto libre con autocompletado desde lo ya existente en la BD.

Estilo de botones

Los botones están homologados en estilo Banking Bold (mismo tamaño, tipografía y padding) con dos tonos de azul según la acción:

  • Azul primario #0047AB — Acciones de asignación/activación (Mover, Establecer, Permitir, Activar, Mostrar, Descargar, Agregar).
  • Azul oscuro navy #0a2540 — Acciones de remoción (Quitar Sobregirar, Quitar Fraccionar, Ocultar en Web, Eliminar Artículos, Quita Texto).
Bitácora Cada cambio queda registrado en la bitácora del sistema por artículo individual, con el valor anterior y el nuevo. Se puede consultar desde la ficha del artículo o el módulo de bitácora.
Permiso requerido El API /api/inventarios/cambios_globales_api.php valida el permiso 050 (Artículos, Editar) antes de ejecutar cualquier cambio.

Atajos de teclado

AtajoAcción
Ctrl+SGuardar artículo
Ctrl+NNuevo artículo (limpiar formulario)
Ctrl+VPegar imagen del portapapeles (cuando el foco está en el área de imagen)
Navegar entre filas de la tabla de búsqueda
EnterSeleccionar fila resaltada en la tabla
EscCerrar modales abiertos

Errores comunes

"Debe seleccionar una Categoría" La Categoría es obligatoria. Haga clic en el botón de lápiz () junto al campo Categoría para seleccionar una.
"Debe seleccionar una Naturaleza" La Naturaleza (Producto/Servicio/Receta) es obligatoria. Selecciónela del menú desplegable.
"Debe seleccionar una Tarifa IVA" La Tarifa de IVA es obligatoria. Selecciónela del menú desplegable. Las opciones más comunes son: 08 (13% IVA general) y 01 (Exento).
"Debe seleccionar una Actividad Económica" / "Debe ingresar el Código CABYS" Estos campos son obligatorios cuando el parámetro 125 de la empresa está activado (valor = 1). Hacienda requiere el CABYS para facturación electrónica.
"El código de artículo ya existe" Intentó crear un artículo con un código que ya está en uso. Use un código diferente o deje el campo vacío para código automático.
Los precios no se recalculan al cambiar el costo Verifique que haya seleccionado un Origen del Costo (Manual, Promedio, Último o Bruto). El recálculo usa el costo del origen seleccionado.
La imagen no se guarda La imagen solo se puede agregar a un artículo que ya ha sido guardado al menos una vez. Primero guarde el artículo (para que tenga un código) y luego suba la imagen.

Preguntas frecuentes

1. ¿Cómo cambio el precio de venta con IVA incluido?

Ingrese el precio final en la columna Venta+IVA de la fila de precio deseada (P1 a P10). El sistema calculará automáticamente el precio base, margen y utilidad.

2. ¿Puedo tener precios diferentes por cliente?

Sí. Cada cliente puede tener asignada una lista de precios (P1 a P10). Al facturar, el sistema usa automáticamente la lista asignada al cliente.

3. ¿Qué pasa si dejo el costo en 0?

El artículo se guardará con costo cero, pero los cálculos de margen y utilidad no funcionarán correctamente. Se recomienda siempre ingresar un costo, aunque sea estimado.

4. ¿Puedo vender un artículo sin stock?

Solo si el artículo tiene activado el checkbox Sobregira. Si está desactivado, el sistema impedirá facturar cantidades mayores al stock disponible.

5. ¿Cómo veo los movimientos de un artículo?

Al cargar un artículo en el formulario, aparece el botón "Kardex" () en la barra de título. Al hacer clic, se abre el modal MIN-003 filtrado por ese artículo.

6. ¿Qué diferencia hay entre Producto, Servicio y Receta?

  • Producto (1) — Mercancía física que afecta el inventario al vender.
  • Servicio (2) — No afecta inventario. Ideal para mano de obra, fletes, servicios profesionales.
  • Receta (3) — Artículo compuesto. Al vender, se rebaja el stock de sus ingredientes individuales.

7. ¿Cómo sé si un artículo requiere CABYS?

Si los campos Actividad y CABYS tienen un asterisco (*) en su etiqueta, significa que el parámetro 125 de la empresa está activado y son obligatorios. Sin el asterisco, son opcionales.

8. ¿Puedo editar la ubicación del artículo en la bodega?

Sí. En la tabla de Stock por Bodega, el campo Ubicación es editable. Haga clic en él, escriba la ubicación y presione Enter o haga clic fuera del campo para guardar.

Permisos

Los permisos controlan qué acciones puede realizar cada usuario en el catálogo de artículos. Se asignan al grupo de usuarios desde el módulo de Seguridad (SE-001).

PermisoDescripciónAfecta
053Ver catálogo de artículos (IN-001)Acceso a la lista de artículos; sin este permiso redirige al menú
411Crear y editar artículos (IN-002)Botón Nuevo, formulario de creación y edición completa de artículos
050Actualizar artículos en loteGuardar cambios masivos desde la edición en línea del catálogo
055Ver existencias en inventarioColumna stock y tabla de stock por bodega en el formulario
013Ver costos y utilidadesColumnas de costo, margen y utilidad en el catálogo
Botones visibles pero deshabilitados Si no tiene el permiso de edición (411 u 050), los botones de guardar y nuevo aparecen en gris con tooltip indicando que no tiene acceso. Esto es intencional para que sepa que la función existe.

Parámetros de empresa

Los parámetros configuran el comportamiento del formulario de artículos y los campos obligatorios.

ParámetroDescripciónUso en artículos
125CABYS obligatorio (1=sí, 0=no)Si está activo, los campos Actividad y CABYS se vuelven obligatorios al guardar el artículo
249Moneda nacional de la empresa (ej: CRC, USD)Determina el símbolo de moneda mostrado en los precios y costos
62Nombre de la empresaEncabezado del Excel y PDF al exportar el catálogo
CABYS obligatorio El código CABYS (Clasificador de Actividades, Bienes y Servicios) es requerido por Hacienda para la facturación electrónica. Si el parámetro 125 está activo, no se podrá guardar un artículo sin este código.

Versión móvil

Tanto el Catálogo (IN-001) como el Crear/Editar (IN-002) tienen una versión optimizada para celular. La detección es automática tanto por User-Agent como por ancho de pantalla, y el switch es transparente.

Cómo se decide qué versión cargar

  • User-Agent móvil (iPhone/Android/iPad/etc.) → siempre carga el archivo _movil.php automáticamente.
  • Ancho < 768 px en cualquier UA → JS detecta al primer paint y redirige a la versión móvil.
  • Ancho ≥ 768 px sobre la versión móvil → JS detecta y redirige a la versión desktop.

Flags de override (consumibles)

Si querés forzar una versión específica, agregá a la URL:

  • ?desktop=1 — fuerza desktop esa carga (útil si tenés ventana angosta y querés ver el layout completo).
  • ?mobile=1 — fuerza móvil esa carga (útil para previsualizar desde un desktop).

Importante: el flag se consume al cargar (se elimina del URL automáticamente). Si recargás (F5), la página vuelve a evaluar el ancho real. Esto evita que el flag quede pegado y bloquee la respuesta natural al redimensionar.

Catálogo móvil (IN-001 mobile)

  • Cards con miniatura de imagen (60 px), código (mono azul), badge de estado, nombre 2 líneas, categoría/subcategoría, precio P# y stock con indicador visual (rojo si < 5, gris si 0).
  • 3 filtros siempre visibles: Nombre (busca en nombre/código/barra), Estado (default Activo), Tipo Precio (selector dinámico según niveles configurados en la empresa).
  • Filtros agregables con botón + Agregar filtro: Código, Barra, Categoría, SubCategoría, Naturaleza, Tarifa IVA, Paquetes, Stock (operador + valor).
  • Auto-submit: cambios en selects disparan búsqueda inmediata; inputs de texto con debounce de 600 ms.
  • FAB flotante "+" para crear nuevo artículo (si tenés permiso 411).
  • Tap en card abre el editor móvil (articulos_crear_movil.php?codigo=X).
  • Footer fijo: cantidad de artículos filtrados, stock total sumado, página actual.

Crear/Editar móvil (IN-002 mobile) — v2.0

Versión solo edición (no incluye buscador — para búsqueda usá el catálogo móvil). Desde mayo 2026 maneja la lista de precios multinivel completa (la misma tabla ArticuloPrecios del escritorio), no solo P1. Las cards se pueden colapsar tocando el header.

  • Datos Básicos (abierta por defecto): Código, Cód. Barra, Nombre, Detalle Interno, Categoría / SubCategoría como texto libre con autocompletado (la subcategoría se filtra por la categoría escrita), Naturaleza, Tarifa IVA, CABYS, Actividad, Partida Arancelaria. La moneda del artículo y el estado se cambian con sus badges en el header.
  • Costos y Precios:
    • Los 4 costos (Propio / Promedio / Último / Bruto) con el selector de origen del costo. En edición hay un botón "Guardar costo (recalcula precios)" que actualiza el costo y recalcula automáticamente los precios y redondeos de toda la lista.
    • Lista de precios (solo en edición): una tarjeta por nivel P1, P2, P3… con Costo (solo lectura), Precio sin IVA, Margen % (muestra entre paréntesis el margen real calculado), Sobre (COSTO / VENTA), Precio + IVA y un selector de Redondeo (↑ hacia arriba / ↓ hacia abajo, o "2 dec" sin redondeo). Hay un toggle AUTO / MAN por nivel: en AUTO el precio se recalcula al cambiar el costo; en MAN el precio queda fijo. Al editar Precio / Margen / Precio+IVA los demás se recalculan en vivo y al salir del campo se guarda. Botón "+ Agregar precio" para crear un nivel nuevo y un botón eliminar (🗑) por nivel. Al cambiar la Tarifa IVA se vuelve a buscar el porcentaje.
    • En modo nuevo, primero hay que guardar el artículo: al recargarlo aparece la lista de precios para definir los niveles (mismo flujo que el escritorio).
  • Cuenta Contable (si la empresa tiene la columna habilitada): input de la cuenta de inventario + botón lupa que abre un modal con buscador del catálogo contable.
  • Imagen: tap en el cuadro abre cámara o galería (capture="environment"). En modo edición sube automáticamente; en modo nuevo queda pendiente y se sube tras guardar con el código final.
  • Stock por Bodega (solo en edición + permiso 055): tabla read-only con Bodega, Stock y Ubicación. Para ajustar stock usá la versión desktop.
  • Otros Datos (colapsada): Proveedor, Cód. Universal, Marca, Clase, Unidad, Uds×Med, Mín/Máx, Comisión, P. Sugerido, Orden Compra, Forma Farm., Reg. Sanit., y los 4 checks (Sobregira/Fracción/Serie/Web). Auditoría al final.
  • Estado: badge clickeable en el header abre un modal selector con Activo/Inactivo/Eliminado/Descontinuado.
  • Header: badge de Moneda, badge de Estado, botón Clonar (solo en edición), ir al Catálogo móvil, y Volver (regresa a la pestaña anterior).
  • No incluye (para eso usá el escritorio): wizard de "Nuevo rápido", el modal avanzado de precio (Desc. Fijo / Máx / Util. Mínima), herramientas de IA, detección de duplicados, Kardex y el ajuste de stock.

Auto-generación de código en móvil

Igual que en desktop: si dejás el campo Código vacío al crear, el sistema lo arma con la fórmula Categoría + SubCategoría + consecutivo (4 dígitos) — por eso es obligatorio elegir SubCategoría cuando el código está en blanco. La etiqueta del campo dice "Código (vacío = auto)" para recordártelo.

Clonar artículo (móvil)

El botón del header (solo visible en edición) duplica el artículo actual en un nuevo registro:

  • Mantiene todos los datos: precios, costos, categoría, IVA, naturaleza, proveedor, márgenes, etc.
  • Limpia solo Código, Nombre y Cód. Barra para que ingreses los nuevos.
  • Resetea la imagen (la imagen está atada al código del archivo PNG en disco).
  • Oculta la card de Stock por Bodega (no aplica al artículo nuevo).
  • Aparece un banner amarillo avisando que estás clonando, con botón Cancelar para volver al original.

Forzar desktop con ancho angosto

Si abrís el desktop con ?desktop=1 y la ventana mide menos de 768 px, el body recibe la clase force-desktop que anula los @media queries de mobile: la tabla sigue siendo tabla, los acordeones quedan abiertos, los botones muestran sus labels y el grid de 3 columnas se mantiene. Esto es solo para esa carga; al recargar se re-evalúa el ancho real.

Historial de cambios

Últimas actualizaciones al módulo Crear / Editar Artículo:

2026-05-13
Editor de artículos rediseñado — pantalla dividida ajustable + letra grande + lista de precios en una línea
Rediseño visual completo del editor para que sea más cómodo y predecible en cualquier monitor:
  • Pantalla dividida ajustable: la zona de Datos del artículo (arriba) y la zona de Búsqueda (abajo) ahora ocupan exactamente la mitad de la pantalla cada una. Entre las dos hay una barra fina arrastrable con el mouse — la podés mover hacia arriba o abajo para darle más espacio a la que más uses (por ejemplo 60% Datos / 40% Búsqueda). El sistema recuerda tu preferencia en este navegador. Si querés volver al 50/50, hacé doble-clic sobre la barra divisoria.
  • Letra más grande (16 px) en toda la columna derecha — Stock por Bodega, cantidades, Ubicación, barra "Ajuste de Inventario" (cantidad, justificación, botones + y ). Se ve cómodo sin esforzar la vista.
  • Tabla de precios reescrita en una sola línea por nivel: cada precio se ve como (margen virtual) (ganancia) [margen real] en la columna Margen, y Precio Sin Impuesto / Precio Neto en columnas separadas a la derecha. Toggle AUTO/MAN al inicio (slider con etiqueta). Letra 16 px pareja. Para editar campos avanzados (Desc. Fijo, Desc. Máximo, Utilidad Mínima, Redondeo, Sobre Costo/Venta), hacé doble-clic sobre la fila → se abre el modal "Modificar Precio".
  • Click en una fila de la lista de búsqueda → carga el artículo arriba. Antes a veces había un pequeño "brinco" al recargar la página o al cambiar de artículo — eso se eliminó (era un ajuste automático de zoom que ahora se aplica antes de pintar la pantalla).
  • La lista de búsqueda se ordena al hacer click en el encabezado de cualquier columna (Código, Nombre, Stock, Cantidad, Costo, Precio, Neto, etc.). Aparece una flechita amarilla / en el header. Click otra vez en la misma columna invierte el orden.
  • Nombre del artículo con ancho completo — ya no se trunca con "…", se ve entero. Si toda la fila no entra en la tabla, aparece scroll horizontal dentro de la lista (no afecta al resto de la pantalla).
  • Stock por Bodega con scroll interno — si tu empresa tiene 10+ bodegas, la lista hace scroll adentro del panel; ya no empuja el card de Búsqueda hacia abajo.
  • Cards con borde sutil y separación visible — los dos bloques principales (Datos del artículo y Búsqueda) tienen un marco fino para que se distinga la división.
No cambia ninguna funcionalidad de fondo (mismas validaciones, mismas APIs, mismos permisos). Solo es un rediseño visual para que el uso diario sea más fluido. Si extrañás alguna columna que ya no aparece en la lista de precios principal (Costo, Sobre, Desc.Fijo, Desc.Max, Util.Mín, Redondeo, Precio+IVA), hacé doble-clic sobre la fila del precio para abrir el modal con todos los campos.
2026-05-11
Editor de artículos móvil v2.0 — ahora maneja la lista de precios completa
La versión para celular de Crear / Editar Artículo (IN-002 mobile) se reescribió para ponerse al día con el escritorio:
  • Lista de precios multinivel: una tarjeta por nivel P1, P2, P3… con Precio sin IVA, Margen % (más el margen real entre paréntesis), Sobre (COSTO/VENTA), Precio + IVA, selector de Redondeo (↑/↓) y toggle AUTO/MAN. Editar / agregar / eliminar niveles, igual que el escritorio. Recálculo en vivo al escribir.
  • "Guardar costo (recalcula precios)": botón que actualiza el costo y recalcula los precios y redondeos de toda la lista en un toque.
  • Categoría / SubCategoría como texto libre con autocompletado (la subcategoría se filtra por la categoría escrita).
  • Cuenta contable de inventario con buscador del catálogo contable.
  • Selector de moneda del artículo en el header.
La detección de móvil/escritorio sigue siendo automática (por dispositivo y por ancho de pantalla). No incluye, en móvil: wizard "Nuevo rápido", el modal avanzado de precio (Desc. Fijo / Máx / Util. Mínima), herramientas de IA, duplicados, Kardex ni el ajuste de stock — para eso usá el escritorio.
2026-05-11
Ajuste de stock: la bodega seleccionada ya no se pierde al sumar/restar
En la card Stock por Bodega del editor de artículos: al tocar una bodega y darle + o , la selección "saltaba" a la primera bodega de la lista porque la tabla se vuelve a dibujar con el nuevo stock. Ahora la bodega ajustada queda marcada (con su destello verde), así se pueden encadenar varios ajustes sobre la misma bodega sin tener que volver a tocarla. Si no había ninguna marcada, queda seleccionada la primera (como antes).
2026-05-11
Cambios Globales (MIN-004): el redondeo / cambios de precio en miles de artículos ya no da "Error de red"
Al aplicar operaciones que recorren artículo por artículo (Redondeo por nivel, Establecer / Aumentar Precio, Actualizar Margen, Establecer / Aumentar Costo) sobre selecciones grandes (decenas de miles de artículos), el proceso se cortaba a los ~60 segundos con un "Error de red — Unexpected token" (era el servidor proxy cerrando la conexión por tiempo). Ahora el modal procesa la selección en lotes de 500, mostrando el avance en el registro (Lote 12/103: 500/500 actualizado(s)…) y un resumen al final. No hay que cerrar la pestaña hasta que termine. Si un lote falla, se reporta y el resto continúa.
2026-05-11
Cambios Globales (MIN-004): operaciones de costo/precio sobre la lista unificada + redondeo masivo (↑/↓)
  • Corrección: las operaciones de la pestaña Costo & Precio masivo (Aumentar % de Venta, Establecer Precio, Actualizar Margen, Aumentar Costo %, Establecer Costo) daban error Invalid column name 'DBVenta1' / 'DBVenta3' en las empresas ya migradas a la lista de precios unificada (dbo.ArticuloPrecios), porque seguían escribiendo en las columnas viejas DBVenta1..10. Ahora pasan por el mismo motor central que el editor de artículos: recalculan margen, aplican el redondeo del Neto y soportan multi-moneda. Si un artículo no tiene definido el nivel elegido se reporta como aviso y el resto sigue. En empresas todavía sin migrar se mantiene el comportamiento anterior.
  • Nueva operación "Redondeo de precio por nivel" (pestaña Precios por nivel): fija el paso al cual se redondea el Precio + IVA de un nivel para los artículos seleccionados y re-redondea el precio. Desplegable con grupos ↑ Hacia arriba y ↓ Hacia abajo (0.1, Entero, ×5, ×10, ×25, ×50, ×100, ×500, ×1000), más "2 decimales (sin redondeo)".
  • Redondeo hacia abajo en todo el sistema: el paso de redondeo (RedondeoPrecio) ahora puede ser negativo para redondear el Neto hacia abajo al múltiplo (positivo = hacia arriba, como siempre; 0.01 = sin redondeo). Disponible también en el modal Editar Precio (MAP-001), Agregar Precio (MAP-002) y el selector de redondeo por fila de la tabla de precios del artículo, todos con opciones agrupadas ↑/↓. Ej.: Precio+IVA 84.08 con ↓ ×5 queda en 80.00; con ↓ Entero queda en 84.00.
2026-05-05
MIN-004 v2.0.0: Reorganización por tabs + 5 operaciones nuevas para ArticuloPrecios por nivel
El modal Cambios Globales de Artículos (MIN-004) fue reorganizado en 5 pestañas: Identificación, Stock, Precios por nivel, Costo & Precio masivo y Estado & Visibilidad. Cada pestaña contiene cards independientes en grid de 2 columnas (1 col en móvil) con animación fade-in al cambiar.
  • Categoría / Subcategoría: ahora son 2 inputs de texto libre con autocompletado desde la base de datos. Al elegir una categoría existente, las subcategorías se filtran automáticamente. También permite escribir una categoría/subcategoría nueva.
  • 5 operaciones nuevas para ArticuloPrecios por nivel (tab Precios por nivel): Desc. Fijo, Desc. Máximo, Util. Mínima, Margen Sobre (COSTO/VENTA) y Modo de venta (Auto/Manual). Cada una con selector de nivel P1..Pn dinámico desde SELECT DISTINCT NumeroPrecio FROM ArticuloPrecios.
  • Selectores P1..Pn dinámicos en TODAS las operaciones de precio del modal (también en las legacy: Aumentar % Venta, Establecer Precio, Actualizar Margen). Solo aparecen los niveles que la empresa realmente tiene definidos.
  • Cards Banking Bold con borde gris y header gris claro. Las cards del tab "Precios por nivel" tienen header con gradiente violeta para distinguirlas como ArticuloPrecios.
  • Eliminadas del UI las operaciones legacy duplicadas (Articulos.DescuentoFijo / Descuento_Admitido / DbArticuloOrigenCosto / PrecioVentaManual). Las cases en la API quedan vivas por compatibilidad.
  • Bitácora resumen por lote para cada operación AP: "ArticuloPrecios MargenSobre P3=COSTO en 437 artículo(s)". Procesa en lotes de 500.
2026-04-28
Card Datos Básicos: layout horizontal compacto y auto-ajuste
Rediseño del card Datos Básicos (desktop) buscando densidad y legibilidad:
  • Etiquetas a la izquierda, inputs a la derecha — toda la ficha pasa de label-arriba a label-en-fila. min-width:90px para alineación vertical entre filas.
  • Capitalización solo de la primera letra en las etiquetas del card (CSS text-transform:lowercase + ::first-letter:uppercase). Antes todo era MAYÚSCULA.
  • Nombre y Det. Interno cada uno en su propia fila (full width), con grow para ocupar el ancho disponible. Etiqueta DETALLE INTERNO renombrada a Det. interno.
  • Inputs auto-ajustables al contenido: Código size=15, Cód. Barra size=15, CABYS size=13, Partida Arancel. size=12. Selects de Actividad, Naturaleza y Tarifa IVA con atributo data-autowidth:auto (se miden por el option más largo).
  • Stock y Descuentos (Mín. Stock, Máx. Stock, Desc. Máx %, Descuento, Comisión %) reducidos a 7ch con texto alineado a la derecha — más en línea con su rango típico de valores.
  • Flex-wrap activo en .datos-fila: si los campos no caben, bajan a la siguiente fila sin quebrar la maquetación. Categoría, Nombre y Detalle interno usan campo-grow (flex: 1 1 260px).
  • Check MAYUSC reposicionado al final del input Nombre (antes estaba al lado de la etiqueta).
2026-04-27
Filtros "Mostrar Ventas" y "Fecha de Creación" en buscador
  • Mostrar Ventas: nuevo checkbox que al activarse despliega rangos de fecha (default: mes actual) y agrega la columna Vendido a la tabla con la cantidad de unidades vendidas en ese período. NC se restan automáticamente; solo cuenta documentos procesados (Estado 1/2/4).
  • Fecha de Creación: dos inputs Creado Desde / Creado Hasta independientes para filtrar artículos por su FechaCreado. Útil para auditar altas en períodos específicos. Funcionan también al exportar a Excel.
  • Toggle dinámico: al marcar/desmarcar el check de Ventas, los inputs de fecha aparecen/desaparecen sin recargar.
  • Subquery con WITH (NOLOCK) sobre vista_venta_hija+vista_venta_madre; placeholders SQL ordenados correctamente para no romper otros filtros existentes.
2026-04-27
Búsqueda inline mejorada en módulos de inventario
En los 4 módulos de edición que buscan artículos (Toma Física, Requisiciones, Notas E/S, Traslados Empresas):
  • El PASO 3 de la cascada (búsqueda multi-palabra) ahora incluye DetalleInterno además de código + barra + nombre. Esto permite encontrar artículos por sus notas internas.
  • Si la búsqueda devuelve una sola coincidencia (en cualquier paso de la cascada — código exacto, barra exacta o multi-palabra), el cursor se posiciona automáticamente en el campo Cantidad sin abrir el modal MBA-002. Antes solo el match exacto disparaba esto; ahora cualquier resultado único lo hace.
  • Solo se abre el modal de búsqueda reutilizable cuando hay 0 o más de 1 coincidencia.
2026-04-27
Versión móvil del Catálogo (IN-001) y del Editor (IN-002)
Nuevos archivos articulos_lista_movil.php y articulos_crear_movil.php en estilo Banking Bold optimizado para celular.
  • Catálogo móvil: cards con miniatura, 3 filtros base (Nombre/Estado/Precio) + filtros agregables, auto-submit con debounce, FAB para crear.
  • Editor móvil: formulario en 5 cards colapsables (Datos Básicos / Costos y Precios / Imagen / Stock por Bodega / Otros Datos), recálculo reactivo de precios, cámara directa, modal selector de estado, sin buscador.
  • Botón Clonar móvil: duplica el artículo, limpia código/nombre/barra y muestra banner amarillo con opción cancelar.
  • Auto-generación de código: dejar el campo vacío ejecuta la lógica del API (Categoría + SubCategoría + consecutivo), ahora también disponible en móvil.
  • Detección automática: redirige por User-Agent (móvil) o por ancho < 768 px (JS). Flags ?desktop=1 y ?mobile=1 consumibles para forzar una vista solo esa carga (se eliminan del URL automáticamente, así el reload re-evalúa).
  • Force desktop: body class force-desktop anula los @media de mobile cuando se fuerza desktop con ancho angosto.
  • Subcategoría dependiente: en móvil se construye el mapa desde la tabla canónica SubTipo_Articulo (no la vista) y se trimean los códigos para evitar mismatches al editar.
2026-04-20
Encabezados y alineación en "Stock por Bodega"
Se agregaron los títulos de columna Bodega / Stock / Ubicación sobre la lista, con estilo Banking (barra azul inferior, 10px uppercase). Las columnas ahora se alinean exactamente con los datos usando CSS Grid con anchos fijos (1fr 70px 120px), corrigiendo el desfase que provocaba el input de ubicación.
2026-04-20
Ubicación editable inline en "Stock por Bodega"
El campo Ubicación de cada bodega ahora es un input editable directamente en la lista. Guarda al salir del campo (blur) o al presionar Enter, con feedback visual (flash verde) y rollback automático si falla. Requiere permiso 411.
2026-04-20
Homologación botones modal Cambios Globales (MIN-004)
Botones del modal unificados en estilo Banking Bold: mismo alto (24px), ancho mínimo (180px), tipografía Inter 10px uppercase. Se quitaron las variantes verde/rojo/blanca. Los botones de acción de remoción (Quitar, Eliminar, Ocultar, Quita Texto) pasan a #0a2540 (azul oscuro navy) en lugar de rojo; los demás usan el azul primario #0047AB.
2026-04-20
"Seleccionar todos" aplica a TODO el filtro
El checkbox del encabezado de la tabla ahora selecciona todos los artículos que coinciden con los filtros activos, incluso en páginas no visibles (vía endpoint ?get_codes=1). Banner amarillo indica el total seleccionado con opción "Seleccionar solo esta página" para reducir el alcance. El botón Globales ahora lee del Set completo window.codigosSeleccionados — antes solo leía los checkboxes visibles de la página actual (máx 500).
2026-04-18
Check "MAYUSC" para nombre
Nuevo check sutil junto al campo Nombre que convierte a mayúsculas al guardar y al consultar. La preferencia se persiste en localStorage por computadora.
2026-04-17
Migración a Flat Moderno
Todo el módulo refactorizado al estilo Flat Modern: inputs con radius 0 y texto azul corporativo, fichas internas aplanadas, header de cards gris oscuro con texto blanco, botones del carousel de imágenes con borde visible, modal de imagen grande con colores semánticos.
2026-04-14
Columna "Stock Destino" (traslados)
En módulos relacionados (traslados entre empresas) se consulta el stock de la bodega destino en la empresa remota, con fallback por dbcontrol.dbnegocio para encontrar el servidor correcto.
2026-04-10
Subcategorías con márgenes NOT NULL
El INSERT a SubTipo_Articulo ahora exige Porcentaje1..10 y Redondeo (valor inicial 30%). Evita subcategorías sin margen configurado.
2026-04-01
Modal Nueva Categoría (MIN-002)
Modal unificado para crear Categoría + Subcategoría juntas o solo una Subcategoría nueva. Auto-código de 3 dígitos con padding.
2026-03-25
Búsqueda de fotos web por categoría
Botón "Fotos" que busca imágenes en Bing para múltiples artículos de una categoría. Grid 2×2, selección con un clic, descarga automática al servidor.
2026-03-24
Rediseño a layout 3 columnas
Editor reorganizado en grid de 3 columnas: Datos+Precios / Otros / Imágenes+Stock. Cada card con acordeón colapsable en móvil. Kardex como modal reutilizable.