Introducción
Facturación Desktop es el módulo principal de facturación de FactuPOS, diseñado para uso en computadoras de escritorio. Permite crear cotizaciones, facturar de contado o crédito, imprimir en POS y enviar documentos electrónicos a Hacienda.
Flujo general de trabajo
Pantalla principal
La pantalla se divide en las siguientes áreas:
Panel Cliente (izquierda)
- Datos del cliente seleccionado
- Crédito disponible y deuda
- Descuento, precio y actividad
- Agente y referido
Panel Documento (derecha)
- Número de documento
- Fecha, tipo y moneda
- Modo código de barras
- Configuración de estación
Panel Líneas (centro)
- Barra de búsqueda de artículos
- Cantidad y botón Agregar
- Tabla de líneas del documento
Panel Totales (inferior)
- Gravado, exento, exonerado
- Descuento total, IVA
- Total general en moneda
Barra de herramientas superior
| Botón | Función |
|---|---|
| Abrir | Abrir una cotización guardada o de histórico |
| Guardar | Guardar el documento actual como cotización |
| Clientes | Abrir búsqueda rápida de clientes (F3) |
| Opciones | MAG, cambio de bodega, adelantos |
| Utils | Herramientas adicionales |
Atajos de teclado
Los atajos permiten trabajar sin usar el ratón, ideal para facturación rápida:
| Tecla | Acción | Cuándo usar |
|---|---|---|
| F1 | Mostrar ayuda rápida | En cualquier momento |
| F2 | Buscar artículo (modal MBA-001) | Para agregar artículos al documento |
| F3 | Buscar cliente | Para cambiar el cliente |
| F4 | Procesar documento | Cuando el documento esté listo para facturar |
| F6 | Consulta rápida de artículo | Solo para consultar precios y stock, sin agregar |
| F7 | Factura de contado directo | Atajo directo sin pasar por modal de procesar |
| F8 | Factura de crédito directo | Atajo directo sin pasar por modal de procesar |
| * | Factura de contado rápida | Desde la barra de búsqueda |
| Enter | Buscar / Agregar artículo | En la barra de búsqueda o campo de cantidad |
| Esc | Cerrar modal activo | En cualquier modal abierto |
| ↑ ↓ | Navegar filas | En listas de artículos y modales |
Panel Cliente
Ubicado en la parte izquierda, muestra la información completa del cliente seleccionado.
Campos visibles
| Campo | Descripción |
|---|---|
| Código | Identificador del cliente en el sistema |
| Cédula | Número de identificación. Muestra badge MAG si aplica |
| Nombre Factura | Nombre que aparecerá en la factura. Editable para ajustes puntuales |
| Jurídico | Razón social (solo lectura) |
| Comercial | Nombre comercial (solo lectura) |
| Teléfono / Email | Datos de contacto del cliente |
| Dirección | Dirección registrada |
Fila de configuración
| Campo | Descripción |
|---|---|
| Precio | Nivel de precio asignado al cliente (1-10). Determina qué lista de precios se usa |
| Desc | Porcentaje de descuento automático del cliente |
| Exento | Si el cliente está exento de IVA |
| Actividad | Código de actividad económica. Clic para cambiar |
Botones de cliente
- Nuevo — Crear un cliente nuevo sin salir de facturación
- Editar — Modificar datos del cliente actual
- Historial — Ver las últimas compras del cliente con filtros y exportación
Panel Crédito
Muestra la situación crediticia del cliente seleccionado:
| Campo | Descripción |
|---|---|
| Límite | Monto máximo de crédito autorizado |
| Plazo | Días de crédito del cliente |
| Dispone | Crédito disponible (Límite - Debe). Clic para ver menú de opciones |
| Debe | Saldo total de cuentas por cobrar |
| Tiene | Saldo a favor / adelantos. Clic para aplicar o revertir |
Panel Vendedor
Controla quién se registra como agente de ventas en la factura:
- Usuario — Código del usuario que está facturando (no editable)
- Agente — Vendedor asignado. Clic en el nombre (morado) para cambiar
- Referido — Persona que refirió al cliente
Los usuarios 09029 y 59999 son cuentas internas del sistema y nunca pueden quedar como agente de ventas. El sistema lo protege en tres momentos:
- Al cambiar el agente: si intenta elegir uno de esos usuarios, no se asigna y aparece un aviso.
- Al abrir una cotización: si la cotización tenía a uno de ellos como agente, se reemplaza automáticamente por el usuario del documento y se guarda corregido.
- Al tramitar o enviar a cajas: si el agente es uno de esos usuarios, el sistema no deja facturar ni enviar a cajas y le pide cambiar el agente.
Antes, al cambiar el cliente de la cotización, el sistema reemplazaba el agente del documento por el agente configurado en la ficha del cliente (o lo dejaba sin vendedor si el cliente no tenía uno). Ahora el comportamiento se controla con el parámetro 922:
- Parámetro 922 = 0 (default) — Al cambiar el cliente, el agente del documento NO se toca. El agente por defecto es el usuario que creó la cotización, y solo cambia si usted lo cambia manualmente.
- Parámetro 922 = 1 — Al cambiar el cliente, el documento hereda el agente configurado en la ficha del cliente. Si el cliente no tiene agente asignado, se conserva el agente actual (nunca queda sin vendedor).
Aplica igual en facturación desktop, SmartPOS, FactuMóvil y FactuDesk.
Usuario Ventas Última actualización: 2026-04-20
En la barra de búsqueda de artículos aparece el campo Usr. Ventas junto con un botón Cambiar. Este campo indica quién se registrará como el usuario del documento de venta.
¿Cómo funciona?
- Al iniciar sesión (login), el sistema asigna automáticamente su código y nombre como Usuario Ventas.
- Si otra persona necesita facturar desde su sesión, presione el botón Cambiar.
- Se abrirá un modal donde debe ingresar la clave del vendedor.
- El sistema busca al empleado por su clave y actualiza el Usuario Ventas con su código y nombre.
- El cambio se mantiene hasta que se vuelva a cambiar o se inicie sesión de nuevo.
¿Cuándo se usa en la factura?
Controla quién queda como UsuarioCodigo en VentaMadre:
- Parámetro 390 = 0 — El usuario de la factura es el mismo que creó la cotización (comportamiento tradicional).
- Parámetro 390 = 1 — El usuario de la factura es el Usuario Ventas activo en ese momento, es decir, quien realmente está vendiendo.
Controla quién queda como AgenteCodigo en VentaMadre. Requiere que el parámetro 390 también esté en 1.
- Parámetro 392 = 0 (default) — Se preserva el agente original asignado en la proforma.
- Parámetro 392 = 1 — El agente de la factura también será el Usuario Ventas activo (mismo valor que el UsuarioCodigo).
Matriz combinada de parámetros 390 + 392
| 390 | 392 | UsuarioCodigo | AgenteCodigo |
|---|---|---|---|
| 0 | — | Quien creó la proforma | Agente original de la proforma |
| 1 | 0 | Usuario Ventas activo | Agente original de la proforma (preservado) |
| 1 | 1 | Usuario Ventas activo | Usuario Ventas activo (mismo código) |
Si su empresa usa comisiones por agente (reporte VE-023), NO active el parámetro 392. De lo contrario, todas las comisiones se pagarán al cajero/usuario de ventas que factura, no al vendedor original que creó la cotización. Deje 392 = 0 y use la función "Cambiar Agente" en la proforma para asignar el vendedor correcto.
Ejemplo práctico
María (00003) inicia sesión en la computadora. Juan (00005) necesita hacer una venta desde esa misma computadora. Juan presiona Cambiar, ingresa su clave, y ahora el campo muestra 00005 Juan.
- Con 390=1, 392=0: La factura queda con UsuarioCodigo=00005 (Juan) pero el AgenteCodigo se mantiene como el agente original de la proforma (por ejemplo, SARA).
- Con 390=1, 392=1: La factura queda con UsuarioCodigo=00005 Y AgenteCodigo=00005 (ambos Juan). Recomendado solo para empresas donde el cajero es el mismo vendedor.
Panel Documento
Ubicado en la esquina superior derecha, controla las propiedades del documento:
| Campo | Descripción |
|---|---|
| Número | Número único del documento de trabajo |
| Fecha | Fecha del documento (se actualiza automáticamente) |
| Tipo | 01 = Factura Electrónica, 04 = Tiquete Electrónico |
| Moneda | CRC (colones), USD (dólares), EUR (euros), etc. |
| (piñón) | Abre configuración de estación: oficina, caja, bodega, tipo de precio |
Toggles y modos
- Código de barras — Activa modo escáner. Si el artículo ya existe en la lista, suma la cantidad en vez de crear nueva línea
- Solo stock — Solo busca artículos con existencias en bodega
Panel Líneas
El área central donde se agregan los artículos del documento.
Barra de búsqueda
Escriba el código o nombre del artículo y presione Enter. Si encuentra coincidencia exacta por código, agrega directamente. Si hay varias coincidencias, abre el modal de búsqueda.
Campo de cantidad
A la derecha de la barra de búsqueda. Escriba la cantidad deseada antes de agregar. Presione Enter en el campo de cantidad para agregar el artículo.
Botón Agregar (verde)
Equivale a presionar Enter sobre la cantidad. Agrega el artículo con la cantidad especificada.
Columnas de la tabla
| Columna | Descripción |
|---|---|
| # | Número de línea |
| Código | Código del artículo |
| Descripción | Nombre del artículo |
| Cant | Cantidad (clic para editar) |
| Precio | Precio unitario (clic para editar si tiene permiso 024) |
| %Dc | Porcentaje de descuento (requiere permiso 004) |
| IVA | Porcentaje de IVA aplicado |
| Total | Total de la línea con IVA |
| Bod | Bodega asignada |
| Util | Margen de utilidad (solo con permiso 064) |
Panel Totales
Muestra el desglose completo del documento en la parte inferior:
- Total Venta — Suma de todas las líneas sin descuento ni IVA
- Descuento — Total de descuentos aplicados
- Gravado / Exento / Exonerado — Desglose según tipo impositivo
- IVA — Total del impuesto al valor agregado
- TOTAL — Monto final a cobrar
Buscar artículo — Modal MBA-001
Presione F2 o haga clic en el botón Buscar para abrir el modal de búsqueda avanzada.
Barra de búsqueda del modal
- Campo de texto — Busca por código, nombre o código de barras
- Categoría — Filtro por categoría de artículos
- Solo Stock — Muestra solo artículos con existencias
- Buscar — Ejecuta la búsqueda
- Agregar — Agrega todos los artículos que tengan cantidad ingresada
Lista de resultados (panel superior)
Muestra los artículos encontrados con: código, nombre, stock, precio, IVA y precio neto. Cada fila tiene un campo de cantidad para ingresar directamente.
El precio de cada fila es el del nivel que realmente aplica según las reglas (parámetro 57 / cliente / estación), no siempre el P1. Junto al precio aparece un badge con el nivel (ej. P2) para confirmar de un vistazo cuál se está mostrando — coincide con el precio que se factura.
Panel de detalle (4 fichas inferiores)
Al seleccionar un artículo, se cargan 4 fichas con información detallada:
Imagen NUEVO
- Foto del artículo seleccionado (`/img/{db}/articulos/{codigo}.png`)
- Si no hay imagen subida → placeholder gris
Stock Externo MEJORADO
- Stock en TODAS las BDs configuradas en `EmpresasExternas` (incluyendo la BD actual marcada con badge azul "ACTUAL")
- Toolbar con checkbox "Solo con stock > 0" (persiste en localStorage)
- Estados visuales: stock>0 normal · stock=0 italic gris · "(No existe)" gris claro · "(Error)" rojo
- Footer con TOTAL stock sumando todas las empresas donde existe el artículo
- Click en fila con stock → muestra bodegas de esa empresa
Precios
- 10 niveles de precio (P1 a P10)
- Precio base e IVA incluido
- Clic para seleccionar, doble clic para agregar
Bodegas
- Stock por bodega
- Clic para seleccionar bodega
Información
- Datos adicionales del artículo
- Unidad de medida, CABYS
Navegación con teclado en el modal
| Tecla | Acción |
|---|---|
| ↑ ↓ | Navegar entre filas de resultados |
| Enter | Si hay cantidad: agregar. Si no: buscar o navegar a cantidad |
| 0-9 | Ir directamente al campo de cantidad de la fila |
| Esc | Cerrar el modal |
Flujo Enter → Bodega → Cantidad (Parámetro 383)
Cuando el Parámetro 383 está activo (= 1) y el Parámetro 102 permite seleccionar bodega (= 0), la tecla Enter sigue un flujo guiado de 3 pasos para confirmar artículo + bodega + cantidad antes de agregar la línea:
- Paso 1 — En la lista de artículos: seleccione la fila con ↑/↓ y presione Enter. El modal mueve automáticamente el foco a la ficha Bodegas y resalta la primera bodega con stock disponible.
- Paso 2 — En la ficha Bodegas: use ↑/↓ para elegir otra bodega si es necesario y presione Enter. El modal se cierra, el código del artículo se coloca en el campo de búsqueda principal de la factura y el foco salta al campo cantidad principal (no agrega aún). Aparece un toast: "Bodega: X. Ingrese cantidad y Enter."
- Paso 3 — En el campo cantidad principal: digite la cantidad y presione Enter. Recién acá se agrega la línea, usando la bodega que eligió en el paso 2.
| Param 102 | Param 383 | Comportamiento del Enter |
|---|---|---|
| 0 | 1 | Flujo de 3 pasos — Artículo → Bodega → Cantidad (recomendado para multibodega) |
| 0 | 0 | Enter agrega la línea directo con la bodega default |
| 1 | cualquiera | Enter agrega directo. El Param 383 se ignora porque 102 bloquea la selección de bodega |
Sugerencia de cambio de bodega (línea sin existencia)
Cuando el Parámetro 102 permite seleccionar bodega (= 0) y usted agrega un artículo que no tiene existencia en la bodega usada, el sistema verifica automáticamente si hay stock en otra bodega. Si lo hay, abre el modal "Sin existencia en esta bodega" con la lista de bodegas que sí tienen el artículo y su existencia.
- Cada bodega muestra su existencia; las que cubren la cantidad solicitada se resaltan en verde.
- Al hacer clic en una bodega, la línea recién agregada se mueve a esa bodega (cambia solo esa línea) y la tabla se actualiza.
- Si prefiere dejarla como está, use "Conservar bodega actual".
- Los servicios (no manejan inventario) nunca disparan esta sugerencia.
Agregar líneas
Existen varias formas de agregar artículos al documento:
1. Búsqueda directa (barra principal)
- Escriba el código o nombre en la barra de búsqueda
- Ajuste la cantidad en el campo a la derecha
- Presione Enter o el botón Agregar
2. Modal de búsqueda (F2)
- Presione F2 para abrir el modal
- Busque el artículo por código o nombre
- Opcionalmente seleccione un precio o bodega específica
- Ingrese la cantidad y presione Enter
3. Desde historial del cliente
- Clic en Historial en el panel de cliente
- Busque la compra anterior por fecha o artículo
- Doble clic en el artículo para agregarlo al documento actual con el precio sugerido
4. Escáner de códigos de barras
Active el modo "Código de barras" y escanee directamente. El artículo se agrega automáticamente.
Editar líneas
Una vez agregada una línea, puede modificar:
- Cantidad — Clic en la celda de cantidad para editar
- Precio — Clic en la celda de precio (requiere permiso 024)
- Descuento — Clic en la celda de descuento (requiere permiso 004)
- Bodega — Clic en la celda de bodega para cambiar
- Eliminar — Botón rojo en la línea (requiere permiso 059)
Modal de utilidad negativa
Cualquier cambio de precio o descuento que genere pérdida (precio sin IVA, con el descuento, < costo) dispara un modal centralizado, con dos modos según el permiso del usuario:
| Permiso | Modal | Acción |
|---|---|---|
| Con permiso 021 (Facturar a costo) | Modal rojo de confirmación | El usuario debe escribir SI para autorizar el cambio. |
| Sin permiso 021 | Modal amarillo informativo "No autorizado" | Muestra el descuento máximo permitido para el artículo. No permite continuar; solo cerrar. |
Si el usuario no tiene permiso 064 (ver utilidad), el modal oculta el costo y los valores de utilidad calculada — sólo informa el descuento máximo permitido.
Artículos con precio 0
Si un artículo tiene precio 0 en el nivel asignado al cliente, la línea se agrega al documento respetando ese precio (entra en 0). El cajero puede editar el precio inline para establecer el valor de venta. El sistema sólo dispara el modal de "bajo costo" cuando el nuevo precio queda por debajo del costo — establecer un precio inicial mayor al costo es válido sin restricciones.
Niveles de precio
El sistema soporta hasta 10 niveles de precio (P1 a P10) por artículo. La selección del precio sigue estas reglas:
Reglas de asignación de precio
| Prioridad | Condición | Precio usado |
|---|---|---|
| 1 | Parámetro 57 activo (precio fijo estación) | Precio de la estación (siempre, sin excepción) |
| 2 | Cliente es SN (genérico) | Precio de la estación |
| 3 | Precio seleccionado manualmente en modal | El precio seleccionado (P1, P2, P3, etc.) |
| 4 | Cliente tiene TipoPrecioVenta asignado | El precio del nivel del cliente |
| 5 | Ninguna de las anteriores | Precio de la estación |
Cómo seleccionar un precio diferente
- Asegúrese de tener un cliente real (no SN) y que el parámetro 57 esté inactivo
- Abra el modal de búsqueda (F2) y busque el artículo
- En la ficha Precios (panel inferior), haga clic en el nivel deseado (P1, P2, P3...)
- La fila se resaltará en azul indicando la selección
- Agregue el artículo: doble clic en la fila de precio, Enter, o ingrese cantidad y presione Agregar
Cambio de nivel sobre una línea existente
Cuando se cambia el nivel de precio de una línea ya agregada (por ejemplo P1 → P2) usando la barra de precio masiva:
- Se actualiza el precio al del nuevo nivel.
- El descuento previo se resetea a 0 (siempre, sin excepción de permisos). Esto evita que un descuento aplicado al nivel anterior arrastre al nuevo bajo reglas distintas.
- Si el nuevo nivel tiene un Descuento Fijo configurado, se aplica automáticamente — siempre que cumpla con el Descuento Máximo y la Utilidad Mínima de ese nivel. Si no cumple, queda en 0% y la razón se registra en bitácora.
Descuentos
El sistema maneja múltiples tipos de descuento con prioridades definidas:
Tipos de descuento
| Tipo | Origen | Permiso |
|---|---|---|
| Descuento del cliente | Configurado en ficha del cliente | Ninguno (se aplica automáticamente) |
| Descuento recordado | Último descuento aplicado al mismo cliente+artículo | Parámetro 277 activo |
| Descuento fijo del artículo | Configurado en el artículo | Ninguno |
| Descuento manual | Editado por el usuario en la línea | Permiso 004 |
| Descuento sobre el máximo | Supera el descuento máximo configurado en el artículo | Permiso 023 |
Prioridad de descuentos
- Descuento recordado (param 277) — Tiene prioridad máxima si está activo
- Descuento del cliente — Se aplica automáticamente
- Descuento fijo del artículo — Se usa si el cliente no tiene descuento
Validación en 3 etapas (descuento → utilidad mínima → costo)
Cuando se aplica un descuento o se edita el precio de una línea, el sistema valida en orden, etapa por etapa. Cada etapa tiene su propio permiso: si el usuario no lo tiene, esa etapa lo detiene (se capa el descuento o se ajusta el precio).
| # | Qué revisa (precios sin IVA) | Permiso |
|---|---|---|
| 1 | El descuento supera el descuento máximo del artículo | 023 — Hacer descuento mayor al permitido del artículo |
| 2 | El precio (con el descuento) queda bajo la utilidad mínima (parámetro 16 o por nivel de precio), pero todavía ≥ al costo | 006 — Facturar bajo la utilidad mínima |
| 3 | El precio (con el descuento) queda por debajo del costo | 021 — Facturar bajo el costo |
- Etapa 1 — 12% > 10% (máximo del artículo): necesita el permiso 023. Sin él, el descuento se capa al 10%.
- Etapa 2 — ₡114.40 < ₡120 (utilidad mínima): necesita el permiso 006. Sin él, se le quita el descuento o se sube el precio al mínimo permitido.
- Etapa 3 — ₡114.40 ≥ ₡100 (costo): no aplica; la línea pasa sin pedir el permiso 021.
- Funciona en los tres puntos donde se aplica descuento: la barra de descuentos de líneas seleccionadas, el campo %Dc de cada fila y el modal de Opciones (MV-OPC).
- La autorización cubre solo la Etapa 1 (descuento sobre el máximo). Si el descuento además queda bajo la utilidad mínima (Etapa 2) o bajo costo (Etapa 3), siguen pidiéndose los permisos 006 / 021 respectivamente; un aviso lo indica.
Cálculo de precios y totales
Esta sección explica exactamente cómo el sistema calcula cada línea y los totales del documento, con las fórmulas que se ejecutan tanto en el backend (_funciones_calculo.php) como en el frontend (calcularTotales()).
agregar línea, cambiar precio, aplicar descuento, exonerar) ejecutan la misma función de cálculo para garantizar resultados consistentes. Cualquier cambio en una línea dispara el recálculo completo.
Paso 1 — De dónde sale el precio unitario
El precio de una línea se resuelve en el momento de agregar el artículo siguiendo esta prioridad (se detiene en la primera que aplique):
| # | Condición | Precio usado |
|---|---|---|
| 1 | Parámetro 57 = 1 (precio fijo de estación) | Estaciones.PrecioVenta — siempre, sin excepción |
| 2 | Cliente SN (genérico, sin código) | Precio de la estación |
| 3 | Usuario seleccionó un nivel en el modal de búsqueda | vista_articulo.Precio{N} (N = 1-10) |
| 4 | Cliente tiene TipoPrecioVenta asignado | vista_articulo.Precio{TipoCliente} |
| 5 | Ninguna anterior | Precio de la estación |
0, el sistema usa Precio1 como fallback. Al cambiar de nivel desde el modal de utilidades con un precio 0, el cambio se omite silenciosamente y se registra en bitácora (ver cotizacion_cambia_tipo_precio.php).
Paso 2 — Cadena de cálculo de la línea
Con el precio resuelto, la línea pasa por 10 cálculos en cadena. El nombre entre paréntesis es el campo físico en ProformaHija:
| # | Cálculo | Fórmula |
|---|---|---|
| 1 | SubTotal bruto (ArticuloVentaSubTotal1) | Cantidad × Precio |
| 2 | Monto de descuento (ArticuloDescuentoMonto) | SubTotal1 × (Descuento% ÷ 100) |
| 3 | SubTotal con descuento (ArticuloVentaSubTotal2) | SubTotal1 − DescuentoMonto |
| 4 | SubTotal con otros cargos (ArticuloVentaSubTotal3) | SubTotal2 + OtrosCargos |
| 5 | Monto exonerado (ArticuloVentaExonerado) | SubTotal3 × (ExoneradoPct ÷ IvaPct) si IvaPct > 0 |
| 6 | Monto gravado (ArticuloVentaGravado) | SubTotal3 − Exonerado si IvaPct > 0 |
| 7 | Monto exento (ArticuloVentaExento) | SubTotal3 − Gravado − Exonerado (cuando IvaPct = 0 → todo es Exento) |
| 8 | IVA calculado (ArticuloIvaMonto) | SubTotal3 × ((IvaPct − ExoneradoPct) ÷ 100) |
| 9 | IVA devuelto (ArticuloIvaDevuelto) | IvaMonto si MedioPago = '02' (tarjeta) y IvaPct = 4; si no, 0 |
| 10 | Total de línea (ArticuloVentaTotal) | Gravado + Exonerado + Exento + IvaMonto − IvaDevuelto |
SubTotal3 (después de descuento + otros cargos).
Paso 3 — Redondeo (Parámetros 190 y 195)
Parámetro 195 — Decimales del IVA
Controla con cuántos decimales se redondea el campo ArticuloIvaMonto. Rango permitido: 0 a 6. Default: 2. El resto de campos (SubTotales, Gravado, Exonerado, Total) siempre se redondean a 2 decimales.
Parámetro 190 — Redondear total factura
Controla si el IVA se calcula sobre el subtotal redondeado o sobre el subtotal sin redondear. Es clave cuando el precio unitario sin IVA tiene 4 decimales y el total con IVA debe cuadrar con un precio "redondo" al cliente (ej: ₡1,700.00).
| Valor | Base del IVA | Ejemplo PU 1,504.4248 × 1 × 13% |
|---|---|---|
| 0 (default) | ROUND(SubTotal3, 2) | Subtotal 1,504.42 · IVA 195.57 · Total 1,699.99 |
| 1 | SubTotal3 sin redondear | Subtotal 1,504.42 · IVA 195.58 · Total 1,700.00 ✓ |
Ver detalles y cuándo activarlo en Parámetros → 190.
Paso 4 — Casos especiales
IVA devuelto (tarjeta con tarifa 4%)
Cuando el documento tiene MedioPagoCodigo = '02' (tarjeta) y una línea tiene IVA del 4%, ese IVA se marca como "devuelto" y se resta del total de la línea. Esto aplica principalmente a canasta básica cuando se paga con tarjeta.
Exoneración parcial o total
Si el cliente tiene exoneración sobre el artículo, el campo ArticuloIvaExonerado guarda el porcentaje exonerado (no el monto). La fórmula distribuye:
- Gravado = parte del SubTotal3 que sigue afecta al IVA
- Exonerado = parte del SubTotal3 liberada del IVA
- IVA neto =
SubTotal3 × ((IvaPct − ExoPct) ÷ 100)
Si la exoneración es total (ExoPct = IvaPct), el IVA queda en 0 y todo el SubTotal3 se reporta como Exonerado.
Artículo Exento (IvaPct = 0)
Si el artículo no grava IVA, todo el SubTotal3 se clasifica como Exento (ni gravado ni exonerado). El IVA y el IVA devuelto quedan en 0.
Otros cargos
Campo ArticuloOtrosCargos — se suma al SubTotal2 antes de calcular el IVA, por lo que sí paga IVA (si la línea es gravada).
Paso 5 — Totales del documento
Cuando una línea cambia, el sistema recalcula ProformaMadre sumando todas las líneas y agrupando por naturaleza CABYS (hacienda.dbo.VistaNaturalezaArticulo):
| Campo en ProformaMadre | Fuente |
|---|---|
TotalCosto | Σ ArticuloCosto × ArticuloCantidad |
TotalVenta | Σ ArticuloVentaSubTotal1 (sin descuento, sin IVA) |
TotalDescuento | Σ ArticuloDescuentoMonto |
TotalMercGravado / Exonerado / Exento | Σ líneas con Naturaleza CABYS = 1 (mercancía) |
TotalServGravado / Exonerado / Exento | Σ líneas con Naturaleza CABYS = 2 (servicio) |
TotalIva | Σ ArticuloIvaMonto |
TotalIvaDevuelto | Σ ArticuloIvaDevuelto |
Total | Σ ArticuloVentaTotal + TotalImpuestoServicio |
TotalImpuestoServicio es un cargo adicional (típico en restaurantes: 10% de servicio) que se suma al total final pero NO se incluye en cada línea individual. Se calcula a nivel documento.
Paso 6 — Cálculo en tiempo real (frontend)
Mientras el usuario edita líneas, el panel "Totales" se actualiza instantáneamente en JavaScript sin esperar al backend. Luego de 300ms sin cambios, se envía al servidor la actualización definitiva (debounce).
Los totales visibles en pantalla suman cada línea así:
- Gravado / Exonerado / Exento mercancía — Σ campos de línea (todos van a mercancía en frontend; el servidor los reclasifica por CABYS)
- IVA — Σ
l.ivaTotal(ojo: el campo JS se llamaivaTotal, noimpuesto) - IVA devuelto — Σ
l.ivaDevuelto - Total — Σ
l.total
Paso 7 — Margen de utilidad
El porcentaje de margen se calcula solo para productos (excluye servicios, naturaleza = 2). Se muestra en el panel de totales si el usuario tiene permiso 064.
| Cálculo | Fórmula |
|---|---|
| Venta neta de línea | Gravado + Exonerado + Exento (después de descuento, sin IVA) |
| Costo total productos | Σ Costo × Cantidad (solo naturaleza ≠ 2) |
| Venta total productos | Σ venta neta (solo naturaleza ≠ 2) |
| Margen % | ((VentaTotal − CostoTotal) ÷ CostoTotal) × 100 |
Paso 8 — Moneda extranjera
En facturas con moneda distinta a la nacional (ver parámetro 249), el cálculo de la línea se hace en la moneda del documento. La conversión a moneda nacional ocurre al momento de contabilizar:
- Pagos — siempre en la moneda del documento. Si el cliente paga con otra moneda, se convierte usando el tipo de cambio y se guarda en la moneda del documento.
- Asiento contable — cada línea de
DocumentoDetallePagose multiplica por suTipoCambiopara llevarla a la moneda nacional. - Ajuste de redondeo — si DEBE/HABER difieren por menos de
1.00(por redondeos), se agrega automáticamente una línea de ajuste en la cuenta del parámetro 83 (Caja Efectivo).
Paso 9 — Validación de límites (constraints BD)
Antes del UPDATE, la función calcularTotalesLinea() proyecta los valores y valida que no excedan los check constraints de la base:
| Campo | Límite |
|---|---|
ArticuloVentaSubTotal1 | 500,000,000 |
ArticuloVentaGravado | 100,000,000 |
ArticuloVentaTotal | 100,000,000 |
Si alguna proyección excede, el sistema auto-corrige la línea: cantidad pasa a 1 y si el precio excede 500,000 se pone a 0, evitando así un error SQL que bloquearía el documento.
Resumen visual del flujo
Ejemplo completo
Artículo con Precio = 1,000, Cantidad = 2, Descuento = 10%, IVA = 13%, sin exoneración, sin otros cargos, MedioPago = efectivo:
| Paso | Cálculo | Valor |
|---|---|---|
| SubTotal1 | 2 × 1,000 | 2,000.00 |
| DescuentoMonto | 2,000 × 0.10 | 200.00 |
| SubTotal2 | 2,000 − 200 | 1,800.00 |
| SubTotal3 | 1,800 + 0 | 1,800.00 |
| Exonerado | 1,800 × (0 ÷ 13) | 0.00 |
| Gravado | 1,800 − 0 | 1,800.00 |
| Exento | 1,800 − 1,800 − 0 | 0.00 |
| IvaMonto | 1,800 × ((13 − 0) ÷ 100) | 234.00 |
| IvaDevuelto | (efectivo, no aplica) | 0.00 |
| Total línea | 1,800 + 0 + 0 + 234 − 0 | 2,034.00 |
- Backend —
/api/proformas/_funciones_calculo.php— funcióncalcularTotalesLinea()yactualizarTotalesProforma() - Frontend —
/modulos/facturacion/factura_desktop/facturacion_factura_desktop.js— funcióncalcularTotales() - Selección de precio —
/api/proformas/cotizacion_cambia_tipo_precio.php - Agregar línea —
/api/proformas/cotizacion_agrega_linea.php
Factura de contado
Genera una factura con pago inmediato. Acceso: F4 > Fact. Contado o F7 directo.
Flujo de factura contado
- Se valida el documento (precio > 0, artículos válidos, agente si es obligatorio)
- Se abre el modal de pago con el total a cobrar
- Seleccione el medio de pago: efectivo, tarjeta, transferencia, etc.
- Para efectivo: ingrese el monto recibido. El sistema calcula el vuelto
- Para tarjeta/transferencia: ingrese la referencia
- Confirme el pago. La factura se genera y se envía a Hacienda
- Se imprime automáticamente (según configuración)
Denominaciones de efectivo
El modal de pago muestra botones con las denominaciones de la moneda activa. Haga clic para sumar al monto recibido. Por ejemplo, para CRC: 1.000, 2.000, 5.000, 10.000, 20.000.
Factura de crédito MV-005
Genera una factura con pago a plazo. Acceso: F4 > Fact. Crédito o F8 directo.
Requisitos
- Cliente con código diferente a SN (debe estar registrado)
- El cliente debe tener crédito disponible suficiente
- Se calcula automáticamente la fecha de vencimiento según los días de crédito del cliente
Flujo
- Se valida el documento y el crédito disponible
- Se confirma la fecha de vencimiento
- La factura se genera con condición "Crédito"
- Se crea automáticamente la cuenta por cobrar (CxC)
- Se envía a Hacienda y se imprime
- Si se ingresó un adelanto, se aplica automáticamente un recibo CxC sobre la factura recién creada (ver sección abajo)
Adelanto al convertir (2026-05-11)
Cuando el cliente entrega un pago parcial al momento de generar la factura a crédito, se puede registrar el adelanto dentro del mismo modal. Tras crear la factura, el sistema aplica automáticamente un recibo CxC contra ese documento.
| Campo | Descripción |
|---|---|
| Monto adelanto | Importe del pago inmediato. Se capea al total de la factura. Dejar en 0 si no hay adelanto. |
| Medio de pago | Cuenta contable activa (caja, banco, etc) que recibe el adelanto. Lista cargada desde vista_catalogo_contable filtrando cuentas que inician con 1 (activos). |
| Comprobante | N° de transferencia, voucher, depósito, etc. Obligatorio si el monto es mayor a 0. |
| Detalle | Descripción del pago. Obligatorio si el monto es mayor a 0. |
Impresión automática del recibo (2026-05-15)
Cuando el adelanto se aplica con éxito, el recibo CxC se imprime automáticamente en la misma impresora que la factura, justo después de la factura, para que ambos comprobantes salgan uno seguido del otro y se puedan entregar juntos al cliente.
- La impresión usa la misma impresora configurada en la estación para facturas crédito.
- Si la opción de imprimir está desmarcada en el modal, tampoco se imprime el recibo.
- Si la impresión del recibo falla, queda registrado en el log del modal pero la factura y el recibo ya están guardados en BD — se puede re-imprimir el recibo desde el módulo CxC.
Validaciones previas
Si el monto del adelanto es mayor a 0 y falta cualquiera de los tres campos obligatorios (medio de pago, comprobante o detalle), el sistema muestra un aviso y enfoca el campo faltante antes de iniciar la transacción — no se crea la factura hasta que estén completos.
Archivar cotización
Guarda la cotización en el histórico sin generar factura. Útil para cotizaciones que se concretan sin pasar por Hacienda.
Flujo
- Presione F4 y seleccione Archivar Cot.
- Se valida que los artículos tengan stock (si aplica la restricción)
- Se agrega automáticamente un pago en efectivo
- El documento se copia a CotizaMadre/CotizaHija
- Se elimina de ProformaMadre (documento de trabajo)
- Opcionalmente se imprime en POS
Enviar a Cajas
Transfiere la cotización al módulo de Cajas para que sea facturada desde ahí. Útil cuando un vendedor prepara la cotización y otro usuario la cobra.
- Requiere permiso 123
- El documento queda disponible en el módulo de Cajas
- Se limpia el documento de trabajo actual
Imprimir
Múltiples formatos disponibles desde F4 > Imprimir:
Formatos de impresión
| Formato | Descripción |
|---|---|
| POS Completo | Tiquete para impresora térmica con precios, descuentos e IVA por línea |
| POS Simple | Tiquete simplificado: solo cantidad, código y nombre (sin precios por línea) |
| Documento en formato PDF para descargar o enviar | |
| Pantalla Completa | Vista del documento en pantalla, estilo factura, con opción de imprimir desde el navegador |
Modal "Imprimir cotización" — Texto vs Con Imágenes NUEVO
El botón Imprimir en la ficha Documento del panel principal abre un modal (código MV-PRT) con dos opciones para visualizar la cotización en pantalla:
| Opción | Descripción | Archivo |
|---|---|---|
| TEXTO | Vista clásica sin imágenes — más compacta, ideal para impresión rápida o envío por email | ver_cotizacion_desktop.php |
| CON IMÁGENES | Incluye una columna "Foto" al inicio de cada artículo. Útil cuando el cliente necesita identificar visualmente los productos cotizados | ver_cotizacion_desktop_imagenes.php |
/img/{empresa}/articulos/{codigo}.png. Subirlas desde Inventarios → Editar artículo. Si un artículo no tiene imagen subida, aparece un placeholder gris en su lugar.
Cálculo de totales en reportes FIX 2026-04-28
Los reportes ahora calculan VENTA BRUTA y SUB TOTAL desde las líneas individuales (no desde campos cabecera) para mayor precisión:
| Total | Fórmula |
|---|---|
| VENTA BRUTA | Σ (ArticuloVenta × ArticuloCantidad) — precio unitario × cantidad, ANTES de descuento |
| DESCUENTO | Σ ArticuloDescuentoMonto |
| SUB TOTAL | Σ (Gravado + Exonerado + Exento) — DESPUÉS de descuento, sin IVA |
| TOTAL IVA | Suma de IVA por línea |
| TOTAL | SUB TOTAL + TOTAL IVA − IVA DEVUELTO |
Aplicado en: ver_cotizacion_desktop.php, ver_cotizacion_desktop_imagenes.php, ver_factura_desktop.php, correos de cotización (HTML + PDF) y correos de factura (HTML + PDF).
Enviar correo
Envía la cotización por correo electrónico al cliente. Desde F4 > Enviar Correo.
- Se adjunta el PDF de la cotización
- Se envía al email registrado del cliente
- Opcionalmente copia al emisor (parámetro 74)
- Opcionalmente copia al agente de ventas (parámetro 318)
Envío automático de la factura al cliente
Cuando convertís una cotización en factura, el envío del PDF al cliente depende de si la empresa usa factura electrónica o no:
- Empresas con factura electrónica: el correo con la factura (PDF + XML firmado + XML de respuesta) se envía automáticamente después, cuando Hacienda acepta o rechaza el documento. No hay que hacer nada manual.
- Empresas sin factura electrónica (régimen tradicional/simplificado, sin envío a Hacienda): el PDF de la factura se envía al cliente de una vez, en el momento de facturar. Antes esto solo pasaba con envío manual; ahora es automático.
En ambos casos el correo va al EmailFactura del cliente; si está marcado, se agrega copia al agente de ventas (parámetro 318) y al email de respaldo (parámetro 149). A los clientes genéricos (SN) no se les envía. Si el cliente no tiene email registrado, no se envía nada.
Compartir y exportar
Opciones disponibles desde F4:
| Opción | Descripción |
|---|---|
| Compartir | Usa Web Share API del navegador o descarga PDF |
| WhatsApp Cliente | Abre WhatsApp Web con el detalle de la cotización |
| WhatsApp Agente | Envía al agente de ventas por WhatsApp |
| Exportar Excel | Descarga archivo Excel con el detalle |
| Exportar XML | Descarga archivo XML con la estructura del documento |
Guardar cotización
El documento se guarda automáticamente conforme agrega líneas. Sin embargo, puede usar el botón Guardar de la barra de herramientas para:
- Asegurar que todos los cambios estén persistidos
- Generar un número de cotización definitivo
- Permitir que otros usuarios puedan abrir el documento
Abrir cotización
Presione el botón Abrir de la barra de herramientas para recuperar una cotización guardada.
Filtros disponibles
- Fecha desde / hasta — Rango de búsqueda
- Número — Búsqueda por número exacto
- Cliente — Filtrar por código o nombre de cliente
- Origen — Activas, Históricas o Archivadas
Columnas ACTUALIZADO
El listado muestra dos columnas para identificar al cliente:
- N. Comercial (italic gris) — nombre comercial registrado en el catálogo de clientes (
Clientes.ClienteNombreComercial) - Nombre Cot. (bold) — nombre manual escrito en la cotización (
ProformaMadre.ClienteNombre) — es el dato editable e identificativo
Para clientes genéricos (SN, 0) que no tienen registro en el catálogo, la columna N. Comercial muestra el mismo nombre manual de la cotización para evitar quedar vacía.
Ordenamiento
Haga clic en las columnas (Número, Fecha, N. Comercial, Nombre Cot., Total, Usuario) para ordenar. La fecha ordena por defecto de más reciente a más antigua.
Exportar e imprimir listado
Al lado del botón Buscar aparecen dos botones adicionales:
- Excel — Descarga un archivo
.xlsxcon los resultados filtrados. Columnas: Número, Fecha, Cliente ID, Cliente Nombre, Total, Moneda, Usuario, Agente, Estado, Líneas. - Imprimir — Abre una vista imprimible con los filtros aplicados, totales y tabla de cotizaciones.
Pedidos en línea y comprobante de pago NUEVO
Los pedidos que sus clientes hacen desde la tienda en línea (ecommerce) llegan al sistema como pedidos y se ven en el módulo Facturación → Pedidos en línea (requiere el permiso 115). Desde ahí, con doble clic en un pedido se abre en Facturación Desktop para revisarlo y convertirlo en factura.
Comprobante de pago (SINPE / transferencia)
Si el cliente pagó por SINPE Móvil o transferencia, al hacer el pedido puede adjuntar el número de comprobante y una imagen del pago. Ese comprobante se ve en dos momentos:
- En la lista de “Pedidos en línea” — una columna Comprobante muestra el número de SINPE y un enlace para abrir la imagen del pago.
- Al abrir el pedido en Facturación — aparece un banner verde en la parte superior con el texto “Comprobante de pago (SINPE/transferencia): N° …” y un botón Ver comprobante que abre la imagen en una pestaña nueva.
ProformaComprobantePago y la imagen en /img/{empresa}/comprobantes/. Si su empresa aún no tiene activada esta función, el sistema sigue funcionando igual: el pedido se ve normal, solo sin la columna de comprobante.
Historial del cliente
Desde el panel de cliente > botón Historial, puede consultar las últimas compras del cliente seleccionado.
- Muestra las últimas 1,000 líneas de compra
- Filtros por fecha, categoría y monto
- Agrupamiento por categoría (toggle)
- Doble clic para agregar un artículo al documento actual con el precio sugerido
- Exportación a Excel y PDF
Modo código de barras
El checkbox "Código de barras" en el panel de documento controla el comportamiento al agregar artículos repetidos:
| Modo | Artículo repetido |
|---|---|
| Activado | Suma la cantidad a la línea existente del mismo artículo |
| Desactivado | Crea una nueva línea independiente (permite mismo código varias veces) |
Compuestos manuales
Permite agregar artículos compuestos (kits o paquetes) que contienen múltiples componentes. Requiere permiso 119.
Cómo usar
- Agregue el artículo principal al documento
- Abra la pestaña "Compuestos" en el panel lateral
- Busque y agregue los artículos componentes
- Ajuste las cantidades de cada componente
Exoneración MAG
El MAG (Ministerio de Agricultura) permite a productores agropecuarios comprar con IVA reducido del 1% en lugar del 13%.
Cómo aplicar
- Seleccione un cliente que tenga registro MAG vigente
- Vaya a Opciones > pestaña MAG
- El sistema consulta automáticamente la vigencia del MAG
- Si está vigente, haga clic en Aplicar MAG
- Todos los artículos con IVA 13% cambian automáticamente a 1%
Exonerar con validación CABYS
Además de MAG, los clientes con exoneración autorizada (orden de exoneración, ZF, misión diplomática, etc.) pueden tener uno o varios documentos de exoneración, y cada uno con su propia lista de códigos CABYS permitidos. El sistema asigna a cada línea el documento de exoneración cuyo CABYS le corresponde.
Cómo aplicar
- Agregue las líneas al documento normalmente
- Abra Opciones > pestaña Exonerar
- Se abre un modal transaccional con todas las líneas
- Las líneas con un CABYS autorizado aparecen con ✓ verde y muestran en la columna Cód. Exo el documento de exoneración que les corresponde
- Las líneas cuyo CABYS no está en ninguna exoneración aparecen con ✗ rojo y quedan gravadas (omitidas)
- Confirme. El sistema procesa línea por línea, cada una con su documento
Quitar exoneración
Desde Opciones > Quitar Exo.. El modal muestra las líneas que tienen exoneración aplicada y al confirmar las revierte al IVA original.
Moneda extranjera
FactuPOS permite facturar en moneda distinta a la nacional (USD, EUR, etc.) con conversión automática a moneda local para el asiento contable.
Cambiar la moneda del documento
- En el Panel Documento, haga clic en el campo Moneda
- Seleccione la moneda deseada (USD, EUR, etc.)
- El sistema usa el tipo de cambio del día (configurado en Contabilidad > Tipos de cambio)
- Agregue los artículos normalmente — los precios se convierten a la moneda elegida
Pagos en moneda mixta
En el modal de pago de contado puede recibir efectivo en cualquier moneda configurada. El sistema siempre guarda el pago en la moneda del documento, convirtiendo el monto recibido si es necesario:
| Factura en | Usuario paga | Se registra |
|---|---|---|
| CRC (faltante 500) | 500 CRC | 500 CRC |
| CRC (faltante 500) | 50 USD (TC=498) | 500 CRC + vuelto 24.400 CRC |
| USD (faltante $10) | $10 USD | 10 USD |
| USD (faltante $10) | 6.000 CRC (TC=500) | 10 USD + vuelto $2 |
Asiento contable
El asiento contable se registra siempre en moneda nacional. El sistema convierte usando el tipo de cambio del documento. Si aparece una diferencia de centavos por redondeo, agrega automáticamente una línea de ajuste con la cuenta del parámetro 83 (Caja efectivo).
Saldo a favor del cliente
Los adelantos y saldos a favor del cliente se muestran en el Panel Crédito, línea Tiene:. Cuando es mayor a 0, el monto titila suavemente para llamar la atención del cajero.
Menú del saldo a favor
Haga clic sobre el monto de Tiene: para abrir el menú con estas opciones:
| Opción | Qué hace |
|---|---|
| Aplicar a pago | Usa el saldo a favor como medio de pago del documento actual |
| Ver movimientos | Abre el modal de movimientos de la cuenta de adelantos (últimos 5 años) |
| Imprimir saldo | Emite un comprobante del saldo actual por impresora POS |
Generar adelanto
Desde el botón Utils:
- Adelanto Cliente — Registra un adelanto a favor. Requiere cliente con código.
- Retirar Adelanto — Devuelve al cliente parte o todo su saldo a favor.
- Retiro Adelantos SN — Caso especial para clientes sin código, abre el modal Saldos Notas de Crédito MV-040.
Modal Saldos Notas de Crédito MV-040
Ruta: Utils → Retiro Adelantos SN. Lista las facturas que generaron NC con saldo a favor disponible para clientes sin código (cuenta 2104SN, tabla SaldosAFavor).
- Columnas: Factura · Cliente · Movimientos · Caja · Saldo
- Buscador por número de factura o nombre de cliente
- Tipo de devolución: Efectivo (param 83) o Tarjeta (param 84 — requiere número de comprobante de anulación del datáfono)
- Saldo Requerido: monto a retirar. Se calcula automáticamente el Saldo a Retirar (mín. entre requerido y disponible)
Botones de acción
| Botón | Acción |
|---|---|
| Exportar Excel | CSV con todas las filas visibles (Nota Crédito, Caja, Usuario, Saldo, Moneda) |
| Imprimir Saldo | Imprime comprobante POS del saldo de la factura seleccionada, con detalle de movimientos (fecha + monto con signo) y saldo final |
| Aceptar | Procesa el retiro. Genera asiento contable (UDE), registra en SaldosAFavor, imprime comprobante contable y a continuación imprime el comprobante del saldo restante (incluso si queda en 0) |
Cuenta contable del saldo a favor
La cuenta contable donde se registra el saldo a favor se construye concatenando la cuenta base (parámetro 89, por defecto 2104) con el código del cliente:
| Cliente | Cuenta generada | Nombre |
|---|---|---|
108 | 2104108 | Adelanto - {Nombre del cliente} |
312025 | 2104312025 | Adelanto - {Nombre del cliente} |
SN (genérico) | 2104SN | Saldo a Favor - Sin Cliente (SN) |
2104SN como un pasivo real. Esto permite hacer el Retiro Adelantos SN correctamente, cancelando el pasivo contra caja.
Envío Express y Boletillas BO-001
Desde F4 > Envío Express, puede abrir el módulo de boletillas para gestionar envíos a domicilio / guías de transporte del día.
- Pasa automáticamente el código y nombre del cliente actual (auto-abre el modal "Nueva Boletilla")
- Funciona con cualquier cliente, incluyendo SN
- Abre el módulo de boletillas en una nueva pestaña
Filtros del listado
Todos los filtros aplican auto-submit: al cambiar un valor la lista se recarga sola (los inputs de texto usan un debounce de 500ms, Enter también envía).
| Filtro | Descripción |
|---|---|
| Desde / Hasta | Rango de fechas. Formato visible DD/MM/YYYY vía Flatpickr (independiente del idioma del navegador). Por defecto: mes actual. |
| Estado | Pendiente (default) · Calle · Entregado · Todos. Nota: si no ve resultados al aplicar un filtro, revise que Estado no esté restringido a "Pendiente". |
| Usuario | Filtra por el cajero/usuario que creó la boletilla. Coincidencia exacta (aplica RTRIM para tolerar espacios). |
| Agente | Filtra por agente asignado. Incluye opción (sin agente) para ver boletillas sin asignar. |
| Cliente | Busca por código o nombre de cliente (LIKE). |
| Orden | Fecha descendente (default) / ascendente. Se recuerda en localStorage. |
Estados
| Estado | Significado |
|---|---|
| Pendiente (0) | Boletilla creada, aún sin salir a ruta. |
| Calle (1) | El agente tiene la boletilla en ruta (con fecha/hora de Salida). |
| Entregado (2) | Boletilla devuelta / entregada (con fecha/hora de Entrada). |
Acciones masivas
Al marcar boletillas con los checkboxes aparece una barra azul con acciones:
- Asignar Agente (MB-002) — asigna un agente a todas las seleccionadas y las pasa a estado Calle.
- Marcar Entrada — registra hora de entrada y pasa a Entregado. Solo aplica a boletillas en estado "Calle".
- Reset — limpia Agente a 59999, Estado a Pendiente y vacía Salida/Entrada. Útil para corregir errores.
Códigos del módulo
| Código | Elemento |
|---|---|
| BO-001 | Listado principal de boletillas |
| MB-001 | Modal Crear / Editar Boletilla |
| MB-002 | Modal Asignar Agente (masivo) |
| MB-003 | Modal Buscar Cliente |
Validación de monto alto
Cuando una línea supera los 5 millones de colones (cantidad x precio), el sistema muestra un modal de confirmación de seguridad.
Comportamiento
- Al agregar o editar una línea que supera el umbral, aparece un modal rojo
- Debe escribir la palabra "SI" (en mayúsculas) para confirmar
- Si cancela, la línea se elimina automáticamente
- Se envía una alerta por correo al email del parámetro 194
Configuración de estación
La estación define los valores predeterminados para facturar. Acceda con el botón (piñón) en el panel Documento.
| Campo | Descripción |
|---|---|
| Oficina | Sucursal o punto de venta |
| Caja | Número de caja/terminal |
| Bodega | Bodega predeterminada para las líneas |
| Tipo de precio | Nivel de precio predeterminado (1-10) |
Modal Buscar Artículo MBA-001
Modal principal de búsqueda y selección de artículos durante la facturación. Se abre con F2 o el botón de búsqueda. Permite filtrar por categoría, por stock y muestra precios y existencias en tiempo real.
Barra de búsqueda
- Texto — busca por código, código de barras, nombre, descripción o serie.
- Todas las categorías — combo para limitar a una categoría específica.
- Solo stock — checkbox que filtra a artículos con existencia positiva.
- Buscar / Agregar — ejecuta búsqueda o agrega el primer resultado al documento.
Lista de resultados (con imagen lateral)
A la izquierda de la lista aparece la ficha de imagen del artículo seleccionado (130px de ancho, ocupa todo el alto del panel superior). Si el artículo tiene varias imágenes en su carrusel, se muestran apiladas verticalmente con scroll. Click sobre cualquier imagen la abre en grande (lightbox) sobre toda la pantalla; cierra con Esc, click fuera o el botón ✕.
Tabla con las columnas: Código, Nombre, Stock, Precio (sin IVA), IVA %, Neto (con IVA) y Cant (cantidad a agregar). Al pasar el mouse, se muestra además la categoría y subcategoría del artículo.
- Enter sobre una fila → agrega el artículo al documento.
- Clic sobre una fila → marca la fila como seleccionada y carga los paneles laterales de detalle.
Paneles de detalle (parte inferior)
| Panel | Contenido |
|---|---|
| Stock Externo | Existencias en otras empresas del grupo (según configuración). La BD del usuario actual aparece resaltada en azul fuerte (sin badge). Filas en gris itálico indican que el artículo no existe en esa empresa; rojo claro = error de conexión a la BD. |
| Precios | Los niveles de precio (P1..Pn dinámicos) con columna Base y Base+IVA. Cada fila muestra badges de qué nivel corresponde a Estación (E) y Cliente (C). El nivel default aplicado se resalta con fondo azul. |
| Bodegas | Existencia por bodega con ubicación física. Total al encabezado. |
Reglas de selección de precio (versión 2026-05-11)
El cajero puede elegir un nivel de precio diferente clickeando sobre la fila correspondiente en el panel Precios — esto se respeta al agregar la línea. Hay UNA regla que bloquea esa selección manual:
| Escenario | Default aplicado | Permite cambiar |
|---|---|---|
| Parámetro 57 = 1 (precio fijo de estación) | P{ESTACION.tipoPrecio} forzado | ❌ NO. Las filas salen grises con cursor 'no permitido' y aviso amarillo "P{n} fijo". |
| Param 57 = 0 + Cliente SN (genérico) | P{ESTACION.tipoPrecio} | ✅ SÍ. El cajero puede elegir cualquier otro nivel y se respeta. |
| Param 57 = 0 + Cliente real con TipoPrecioVenta | P{TipoPrecioVenta del cliente} | ✅ SÍ. |
| Param 57 = 0 + Cliente real sin TipoPrecio | P{ESTACION.tipoPrecio} | ✅ SÍ. |
Flujo Enter — selección de precio + bodega + cantidad (bidireccional)
El Enter funciona en cualquier orden. Pasos:
- Buscás el artículo y se selecciona (fila marcada azul).
- Tipeás la cantidad en el input de la fila (default 1).
- Click en un nivel de precio (ej: P3) y click en una bodega (ej: Bodega A) — en cualquier orden.
- Enter con el foco en cualquier lado del modal → agrega con cantidad + P3 + Bodega A automáticamente.
Lo mismo aplica con doble clic en cualquier fila de precio o bodega (atajo equivalente al Enter). Tras agregar, el modal se cierra y las selecciones globales se limpian.
Cantidad por monto (Precio→Cant en barra de búsqueda)
Junto al input "Cantidad" hay un campo "Precio→Cant" que solo se activa para artículos fraccionados (azúcar, harina, líquidos a granel...). Tipeás el monto que el cliente quiere gastar (con IVA) y al hacer Enter / Tab el sistema calcula la cantidad fraccionada y la pone en Cantidad.
Fórmula: cantidad = (monto ÷ (1 + IVA/100)) ÷ precio redondeada a 3 decimales. Misma función disponible también dentro del modal Editar Artículo (MV-ART) usando el precio virtual (con descuento aplicado).
Modal Editar Artículo MV-ART
Al hacer doble clic (o usar la opción Editar) sobre una línea del documento se abre este modal para ajustar cantidad, precio, descuento, IVA, compuestos, lotes y vencimientos.
Campos principales
| Campo | Descripción |
|---|---|
| Cantidad | Controlada con − / +. Respeta la configuración de decimales (parámetro 25). |
| Precio Real / Precio Real c/IVA | Precio unitario original del artículo, sin y con IVA. |
| Precio Deseado / Precio c/IVA Deseado | Precio virtual al que querés que quede el artículo. Al escribirlo, el sistema calcula solo el % de descuento necesario — NO cambia el precio base. Por eso requiere permiso 004 (descuentos), no el 024. |
| Desc. % / Desc. Monto | Descuento manual sobre la línea. Requiere permiso 004. |
| Precio deseado (sin / con IVA) | Campo de la ficha “Descuento desde precio virtual”: escribís el precio al que querés que quede el artículo y el sistema calcula solo el % de descuento necesario. Es un precio virtual — NO cambia el precio base. Solo requiere permiso 004 (descuentos), igual que escribir el descuento directamente. |
| Tarifa IVA | Combo con las tarifas Hacienda: 01 Exento, 02 Reducida 1%, 03 Reducida 2%, 04 Reducida 4%, 08 General 13%, 10 Exonerada, etc. |
| IVA % | Porcentaje calculado a partir de la tarifa (solo lectura). |
| Detalle / Serie | Texto libre adicional que se imprime y viaja al XML. Ideal para número de serie, lote o nota. |
Totales del modal
En la parte inferior del modal se muestran Subtotal, IVA y Total calculados en tiempo real al cambiar cualquier campo.
Pestañas especiales
| Pestaña | Función |
|---|---|
| Compuestos Manual | Permite agregar sub-artículos (kit) que se descuentan de bodega al aplicar. Requiere permiso 119. Tabla: Id, Código, Nombre, Uds, Bodega, Costo/Ud, Total. |
| LOTES | Selección de lotes específicos cuando el artículo maneja control de lotes. Se distribuye la cantidad por lote. |
| VENCIMIENTOS | Selección de lote por fecha de vencimiento. Útil para FIFO / FEFO. |
Utilidades VE-UTL
Menú de funciones adicionales accesible durante la facturación. Cada utilidad abre un modal o ejecuta una acción sobre el documento actual o sobre la caja.
Inventario y artículos
| Utilidad | Qué hace |
|---|---|
| Stock de lotes | Consulta existencia por lote para el artículo seleccionado. |
| Kardex Lotes | Historial de movimientos por lote (entradas, salidas, saldo). |
| Facturar a Costo | Aplica el costo promedio como precio de venta. Requiere permiso 021. |
| Sincronizar líneas con BD | Refresca precios, stock y costos desde la base de datos sin perder el detalle capturado. |
Cliente y saldos
| Utilidad | Qué hace |
|---|---|
| Ingreso de adelanto de cliente | Registra un adelanto a favor del cliente (genera documento de abono). |
| Retiro de saldo a favor | Devuelve parte o todo el saldo a favor del cliente. |
| Retiro Adelantos SN | Retiro de adelantos del cliente genérico (Sin Nombre). |
Documentos
| Utilidad | Qué hace |
|---|---|
| Clonar Cotización | Duplica una cotización existente en una nueva (con consecutivo nuevo). |
| Clonar Factura | Crea una cotización basada en una factura existente. |
| Reimprimir Factura | Abre el modal MV-007 para reimprimir una factura con la configuración actual de estación. |
| Nota de Crédito | Crea una nota de crédito parcial o total sobre una factura existente. |
| Boletillas | Envío Express / guías de transporte. |
Caja y efectivo
| Utilidad | Qué hace |
|---|---|
| Contador Monedas | Herramienta para contar billetes y monedas (arqueo de caja). |
| Contabilizar Cierre | Envía el cierre de caja actual a Contabilidad. |
| Mov. Contable | Registra un movimiento contable manual asociado a la caja. |
| Ingreso Fondo Caja | Registra una inyección de efectivo a la caja. |
| Retiro Fondo Caja | Registra un retiro de efectivo de la caja. |
| Abrir Cajón | Envía el comando ESC/POS para abrir la gaveta de dinero. |
Import / Export de cotizaciones
| Utilidad | Formato |
|---|---|
| Exportar Cotización a Excel | .xlsx con líneas y totales. |
| Exportar Cotización a XML | XML estructurado (útil para traspaso a otros sistemas). |
| Exportar Cotización a CSV | Separado por coma. |
| Importar Cotización (CSV/XML) | Carga líneas desde archivo externo al documento actual. |
Configuración
| Utilidad | Qué hace |
|---|---|
| Romana / Balanza | Abre el modal MCF-ROM para configurar la lectura de códigos de balanzas (peso o precio embebido). Ver MCF-ROM. |
Configuración Romana / Balanza MCF-ROM
Permite que el lector de barras interprete los códigos que imprimen las balanzas (romanas) cuando un código no se encuentra ni como Cod_Articulo ni como CodigoBarra. Se accede desde Utilidades VE-UTL → Configuración → Romana / Balanza.
Cómo funciona
Cuando escaneás un código en el campo de búsqueda de artículos, el sistema lo busca en este orden:
- Busca por
Cod_Articuloexacto. - Si no existe, busca en
CodigoBarra. - Si no existe y la romana está activa, intenta interpretarlo como código de balanza extrayendo el código del artículo y el valor (peso o precio).
El código de la balanza siempre arranca en la posición 1 y el valor sigue inmediatamente después. Solo hay que indicar 2 longitudes.
Campos del modal
| Campo | Descripción |
|---|---|
| Activa para toda la empresa | Si está apagado, el sistema ignora la romana y los códigos no encontrados marcan error normalmente. La configuración es por empresa (compartida entre todas las estaciones). |
| Tipo: Cantidad / Precio | Cantidad = el valor representa el peso en gramos, se divide por 1000 para obtener kg. Precio = el valor es el precio final con IVA, se calcula la cantidad como precio ÷ precio_unitario_artículo. |
| Largo del código del artículo | Cantidad de dígitos que ocupa el código del artículo desde la posición 1. |
| Largo del valor (peso o precio) | Cantidad de dígitos del valor, arrancando justo después del código. |
| Probar parseo (no guarda) | Pegá un código de prueba y mostrá qué extrae el sistema con la configuración actual. Útil para validar antes de guardar. |
Ejemplo: EAN-13 estándar de balanza
Para un código como 2600101056111 (13 dígitos):
| Configuración | Valor |
|---|---|
| Tipo | Precio (con IVA) |
| Largo del código del artículo | 7 → extrae 2600101 |
| Largo del valor | 5 → extrae 05611 = ¢5,611 |
| Dígito 13 | Check digit del EAN-13, se ignora. |
El artículo en la base de datos debe llamarse exactamente 2600101. Al escanear, el sistema agrega 1 unidad (en modo precio se usa la cantidad precio_balanza ÷ precio_artículo).
Configuraciones típicas
| Formato | Largo cód. | Largo val. | Total dígitos |
|---|---|---|---|
| EAN-13 (con check digit) | 7 | 5 | 13 (12 + check) |
| EAN-13 alterno | 6 | 6 | 13 (12 + check) |
| Código corto | 6 | 5 | 11 |
Importante: el último dígito de un EAN-13 es el check digit y NO debe entrar al cálculo. Por eso para 13 dígitos totales se configura código + valor = 12.
Almacenamiento
La configuración vive en la tabla dbo.RomanaConfig (singleton, 1 fila por empresa). La migración 20260511104634 la crea con valores default desactivados.
Opciones de línea MV-OPC
Modal que aplica acciones masivas sobre las líneas seleccionadas del documento. Se accede desde el menú Opciones o con el botón correspondiente de la barra de acciones.
Acciones disponibles
| Acción | Efecto sobre las líneas seleccionadas | Permiso |
|---|---|---|
| Descuento | Aplica un % de descuento con tipo de descuento seleccionable. | 004 |
| IVA | Cambia la tarifa de IVA de las líneas. | — |
| Precio | Asigna un precio manual específico. | 024 |
| Tipo Precio | Cambia el nivel de precio (P1..P10) de las líneas. | — |
| Exonerar | Aplica la exoneración del cliente a las líneas. | — |
| Quitar Exo. | Revierte la exoneración aplicada. | — |
| Exon. MAG | Aplica exoneración MAG (sector agropecuario) si el cliente la tiene vigente. | — |
| Pesca | Marca las líneas como actividad pesquera (exoneración especial). | — |
| Bodega | Cambia la bodega de origen de las líneas seleccionadas. | — |
| Saldo a favor | Aplica saldo a favor del cliente como forma de pago. | — |
Aplicar descuento (modal detallado)
Al elegir "Descuento" se abre el panel con:
- Tipo de Descuento — combo con las 10 clases Hacienda (01 Descuento general, 02 Bonificación, 07 Descuento comercial, etc.).
- Porcentaje (%) — campo numérico con botones rápidos: 0, 5, 10, 15, 20, 25, 40, 50.
- Descuento Máximo — checkbox que aplica el descuento máximo permitido por artículo.
- Aplicar Descuento — botón primario que efectúa la acción sobre todas las líneas seleccionadas.
Novedades 2026-04-23 NUEVO
Actualización mayor del módulo con migración visual completa y nuevas funcionalidades.
Migración visual Banking Bold
Todo el módulo fue migrado al estándar visual Banking Bold: fichas, modales, tabla de artículos, barra de búsqueda y totales. Características:
- Headers azul corporativo sólido (
#0047AB) con texto blanco uppercase - Códigos de módulo/modal (MV-001, MV-042, etc.) en amarillo puro destacado
- Tabla de artículos con fuente 16px negro para mejor legibilidad
- Inputs con borde visible
#64748by focus azul - Labels en negras 700 uppercase
- Radius 0 en todos los elementos (esquinas rectas profesionales)
- Soporte completo de modo oscuro con paleta adaptada
Nueva funcionalidad: Otros Datos (MV-042)
Se agregó el módulo Otros Datos (equivalente al Frm_FacturaOtrosDatos del sistema legacy VB6). Permite agregar campos adicionales arbitrarios a cualquier factura o proforma.
- Desde Facturación Desktop: Botón Utils → Opción "Otros Datos"
- Desde Detalle Factura (VE-030): Botón "Otros Datos" en la barra de acciones
Flujo de uso
- Abra el modal "Otros Datos" desde cualquiera de los dos lugares
- Panel izquierdo: CRUD de favoritos (agregar / renombrar / quitar nombres de campos reutilizables)
- Panel derecho: formulario Nombre + Valor → click en un favorito lo pre-llena
- "Aceptar" guarda en
FacturaVentaOtrosDatosy auto-registra el nombre en favoritos - Lista inferior muestra los datos actuales — clic en fila para editar, 🗑️ para eliminar
Integración con Hacienda
Los campos guardados se emiten automáticamente en el nodo <Otros> del XML enviado a Hacienda como <OtroTexto codigo="NombreCampo">valor</OtroTexto>. Paridad completa con el sistema VB6 anterior.
Transfer proforma → factura
Al convertir una proforma a factura, los datos extras se migran automáticamente del número de proforma al nuevo consecutivo de factura (sin intervención del usuario).
Auto-refresh de costos al abrir cotización
Cada vez que se abre o recupera una cotización/proforma, el sistema ahora sincroniza automáticamente los costos de las líneas con el costo actual del catálogo de artículos.
Detalles técnicos:
- Función central:
actualizarCostoCotizacion(PDO, numero) - Respeta la moneda del documento: si está en USD, el costo se divide entre el tipo de cambio
- Solo actualiza líneas cuyo costo difiera (tolerancia 0.0001)
- Tras actualizar, recalcula totales de línea y totales del documento
- Endpoint standalone disponible:
POST /api/proformas/cotizacion_actualizar_costos.php
Preview del último artículo encontrado
En la barra de búsqueda, después del input de código ahora aparece un preview visual del artículo buscado:
| Estado | Apariencia |
|---|---|
| Sin buscar | Gris claro con — |
| Artículo encontrado | Verde con código + nombre completo |
| No existe | Rojo con mensaje "No encontrado" |
Margen de utilidad — validaciones
La columna %Marg de la tabla tiene 4 estados según la calidad del dato:
| Condición | Se muestra |
|---|---|
| Costo ≤ 0.01 (sin costo o residual) | — (em dash gris) |
| Margen calculado entre 0% y 1000% | XX.XX% verde, 2 decimales |
| Margen negativo (precio menor al costo) | −X.XX% parpadeando rojo ↔ amarillo |
| Margen > 1000% (costo mal configurado) | ERROR parpadeando rojo ↔ amarillo |
- El descuento aplicado no sea excesivo
- El precio editado manualmente no esté por debajo del costo
- El costo del artículo sea correcto (si está inflado artificialmente)
Filas sin stock — formato visible
Cuando una línea de artículo tiene cantidad mayor al stock disponible (faltante en bodega), toda la fila se marca en rojo:
- Fondo: rojo claro (
#fef2f2) - Texto: rojo oscuro (
#dc2626) en peso 600 y tamaño completo (no se ve más pequeño) - Todos los campos de la fila (código, nombre, cantidad, precio, totales) mantienen el mismo tamaño que filas normales
Esto permite detectar visualmente artículos que provocarían sobregiro antes de procesar la factura.
Doble clic inteligente en tabla artículos
Se intercambió la acción del doble clic para mejor UX:
- Doble clic en el CÓDIGO del artículo → abre el Kardex (consulta histórica de movimientos)
- Doble clic en el NOMBRE del artículo → abre Editar Línea (MV-ART)
Indicador de conexión en el Total
El header de la ficha Total ahora muestra:
- Moneda activa del documento (CRC, USD, EUR) como chip amarillo
- Botón 💱 Cambiar que abre un popup para cambiar la moneda del documento
- Puntito • de conexión al extremo derecho:
- ● Verde pulsando → servidor en línea
- ● Rojo pulsando → sin conexión
El sistema hace un ping automático al servidor cada 30 segundos, y también escucha los eventos online/offline del navegador.
Número de documento — últimos 10 dígitos
El número del documento mostrado en la ficha Documento se recorta a los últimos 10 dígitos cuando es un consecutivo electrónico (20 caracteres). Para proformas cortas se mantiene completo. El número completo sigue enviándose correctamente a todas las APIs.
Botón "Nueva" reubicado
El botón Nueva (abrir nueva venta en pestaña aparte) se movió del panel de Herramientas a la ficha Documento, junto al botón Imprimir. Solo es visible cuando la proforma tiene consecutivo real (no en documento de trabajo).
Parámetro 380 — control completo del teléfono
El parámetro 380 (Imprimir teléfono del cliente) ahora aplica en todos los formatos de salida:
- ✅ POS térmica (FIPVIVI002)
- ✅ Hoja carta centrado (FIPVIVI003)
- ✅ Hoja carta 2 columnas (FIPVIVI004)
- ✅ PDF DataReport (FIPVIVI005)
- ✅ Matricial GDI (FIPVIVI006)
- ✅ Vista HTML web
- ✅ PDF del correo electrónico
- ✅ Cuerpo HTML del correo
- ✅ Bluetooth
Si 380 = 0, el teléfono del cliente no se imprime y la etiqueta cambia de "Tel/Email:" a "Email:" automáticamente.
Parámetros clave
El comportamiento del módulo se controla mediante parámetros de empresa:
El sistema maneja dos parámetros distintos para moneda:
| Parámetro | Concepto | Editable | Uso |
|---|---|---|---|
| 49 | Moneda predeterminada | ✅ Sí | La que se asigna a documentos nuevos al abrir Facturación. Cambiala desde Configuración para que las cotizaciones por default arranquen en USD, EUR, etc. |
| 249 | Código moneda nacional | ❌ No (fija) | La moneda del país. Es la base de los tipos de cambio (TC = 1). No se cambia. |
Comportamiento al abrir Facturación
- Si el documento de trabajo (
u#####u) no existe → se crea con la moneda predeterminada (param 49) - Si existe pero está vacío → se sincroniza con la predeterminada actual al recargar
- Si tiene líneas → respeta la moneda original (no rompe precios convertidos)
- Si el cliente seleccionado tiene una moneda específica configurada en su ficha → esa gana sobre la predeterminada
Cada artículo del catálogo tiene una moneda asignada (campo Cod_TipoMoneda). Al agregar el artículo a una cotización, el sistema decide:
| Moneda Artículo | Moneda Documento | Acción |
|---|---|---|
| USD | USD | No convierte — inserta el precio tal cual del catálogo |
| CRC | CRC | No convierte |
| CRC (nacional) | USD | Divide entre el TC del USD → precio en USD |
| USD | CRC (nacional) | Multiplica por el TC del USD → precio en CRC |
| USD | EUR | Conversión cruzada vía la moneda nacional (factor TC_USD / TC_EUR) |
El TC siempre se busca actualizado en la tabla TipoCambio al agregar la línea (no se confía en valores guardados que pudieran estar desactualizados).
Cuando una cotización está en moneda extranjera (USD, EUR, etc.), aparece una fila adicional en la columna Impuestos del panel de totales:
💱 T.C. USD 500.00
- Solo se muestra si la moneda del documento difiere de la moneda nacional (param 249).
- El valor es el TC guardado en la cotización al crearla o cambiar la moneda — se "congela" para que cotizaciones viejas mantengan su histórico.
- Si se modifica el TC en el catálogo de Tipos de Cambio, las cotizaciones existentes no se actualizan; solo las nuevas tomarán el TC nuevo.
- Para forzar refresco del TC en el doc de trabajo: borrar todas las líneas y recargar el módulo.
Controla cómo se ordenan los artículos al abrir/recargar una cotización. Aplicado en cotizacion_carga_desktop.php.
| Valor | Orden aplicado | SQL |
|---|---|---|
| 1 | Por nombre del artículo (alfabético) | ORDER BY a.ArticuloNombre, h.NumeroLinea |
| 2 | Por código del artículo | ORDER BY h.ArticuloCodigo, h.NumeroLinea |
| 3 (default) | Por línea (cronológico de inserción) | ORDER BY h.NumeroLinea |
El segundo criterio (NumeroLinea) es desempate por si hay nombres/códigos repetidos. El frontend NO re-ordena después de agregar líneas — para ver el orden correcto hay que recargar.
En el panel Documento, hacer click sobre la fecha (icono ✏️ a la derecha) abre un selector Flatpickr para cambiar la fecha de la cotización.
- Conserva la hora original de la cotización — solo cambia la parte fecha
- Funciona sin importar el estado del documento (borrador, guardada, pedido, en cajas, histórica)
- API:
POST /api/proformas/cotizacion_actualiza_fecha.php— body{ numero, fecha: "YYYY-MM-DD" }
Controla cómo se calcula el IVA de cada línea cuando el precio unitario sin IVA tiene decimales que, al sumarse con el IVA, deben cuadrar con un precio objetivo "redondo" con IVA incluido.
Caso típico: un artículo "vale" ₡1,700.00 con IVA al público. Para que eso cuadre con IVA 13%, el precio unitario sin IVA se guarda como 1,504.4248 (4 decimales). Sin este parámetro, el sistema redondea el subtotal antes de calcular el IVA y el total queda en ₡1,699.99 (pierde 1 céntimo).
| Valor | Cálculo del IVA | Ejemplo PU 1,504.4248 × 1 × 13% |
|---|---|---|
| 0 (default) | IVA = Subtotal redondeado × tarifa | Subtotal 1,504.42 · IVA 195.57 · Total 1,699.99 |
| 1 | IVA = Subtotal sin redondear × tarifa | Subtotal 1,504.42 · IVA 195.58 · Total 1,700.00 ✓ |
¿Cuándo activarlo?
- El catálogo tiene precios "con IVA redondos" (₡500, ₡1,000, ₡1,700, etc.) y el cliente espera ver ese mismo total en la factura.
- El usuario edita el campo Total con IVA en la línea y quiere que el valor digitado se respete tal cual al facturar.
- Facturas POS / tiquetes donde el subtotal + IVA deben sumar exactamente el precio mostrado al cliente.
Nota Hacienda v4.4
Con el parámetro activo (190=1) puede haber una diferencia de ±0.01 entre Gravado × Tarifa e IvaMonto declarado en el XML. Esta diferencia está dentro de la tolerancia oficial de Hacienda (±0.05 por línea) y es el patrón estándar en sistemas de facturación electrónica que respetan el precio "con IVA objetivo".
Cómo activarlo
Desde Configuración → Parámetros de Empresa (CF-004), editar el parámetro 190 y poner valor 1. Toma efecto inmediato en la próxima línea agregada o modificada.
| Param | Descripción | Valores |
|---|---|---|
| 3 | Agente obligatorio diferente al usuario | 0 = No, 1 = Sí |
| 19 | Facturación solo por Cajas | 0 = Normal, 1 = Solo Cajas |
| 25 | Decimales en cantidades | 0-3 decimales |
| 50 | Permitir sobregiro global | 0 = No, 1 = Sí |
| 57 | Precio fijo por estación | 0 = Libre, 1 = Fijo |
| 65 | Relleno de código de artículo a 15 caracteres (pad con ceros a la derecha al buscar) | 0 = No, 1 = Sí |
| 83 | Cuenta contable de Caja Efectivo (usada para ajuste de redondeo en moneda extranjera) | Cuenta contable |
| 102 | Bloquear selección de bodega | 0 = Libre, 1 = Fija |
| 110 | Mostrar equivalente en USD debajo del total | 0 = No, 1 = Sí |
| 125 | Generar factura electrónica | 0 = No, 1 = Sí |
| 153-158 | Bloquear descuento por nivel de precio | 0 = Permitir, 1 = Bloquear |
| 190 | Redondear total factura — cuadra el total de línea con el precio objetivo con IVA (ver detalle) | 0 = Tradicional, 1 = Total cuadra exacto |
| 194 | Email alerta montos altos | Dirección email |
| 249 | Código de moneda nacional (configurable por país) | CRC / USD / PAB / etc. |
| 277 | Recordar último descuento cliente+artículo | 0 = No, 1 = Sí |
| 343 | Mostrar serie como nombre artículo | 0 = Normal, 1 = Solo serie |
| 344 | Mostrar % descuento por línea en factura física, pantalla y PDF. El monto del descuento por línea y el total DESCUENTO al pie siempre se imprimen (no se ocultan). | 1 = Mostrar, 0 = Ocultar |
| 385 | Mostrar artículos con precio 0 en el modal de búsqueda | 0 = Ocultar, 1 = Mostrar |
| 390 | Usuario de la factura: 0 = creador de la cotización, 1 = Usuario Ventas activo | 0 / 1 |
| 392 | Agente de la factura = Usuario Ventas (requiere 390=1). Con 1 sobreescribe el agente original de la proforma. No activar si usa comisiones por agente. | 0 / 1 |
Permisos
Los permisos controlan qué acciones puede realizar cada usuario en el módulo de facturación. Se configuran desde Configuración > Usuarios asignando los códigos correspondientes.
Acceso al módulo
| Código | Permiso | Efecto si NO tiene |
|---|---|---|
| 653 | Acceso a Facturación Desktop | No puede abrir el módulo |
Edición de líneas
| Código | Permiso | Efecto si NO tiene |
|---|---|---|
| 024 | Editar precio de venta | El campo de precio aparece como solo lectura, no puede cambiar el precio unitario ni el total con IVA en las líneas |
| 004 | Aplicar descuentos manuales | El campo de descuento aparece como texto, no puede modificar el % de descuento en líneas |
| 023 | Hacer descuento mayor al permitido del artículo | El descuento queda limitado al máximo configurado por artículo (no puede superarlo) |
| 006 | Facturar bajo la utilidad mínima | Si el precio sin IVA (con el descuento) queda bajo la utilidad mínima (parámetro 16 o por nivel) aunque siga ≥ al costo, no puede aplicarlo: el descuento se quita o el precio se ajusta al mínimo |
| 021 | Facturar bajo el costo | Si el precio sin IVA (con el descuento) queda por debajo del costo, no puede continuar (modal "No autorizado"). También controla la opción "Facturar a Costo" del menú de acciones |
| 059 | Eliminar líneas | No puede borrar artículos individuales ni seleccionados del documento |
Visualización
| Código | Permiso | Efecto si NO tiene |
|---|---|---|
| 064 | Ver margen de utilidad | No ve la columna "Util %" en la tabla de artículos ni el monto total de margen en el pie del documento |
| 656 | Ver stock de inventario | No ve la columna "Stock" con la existencia disponible por bodega en la tabla de artículos |
Acciones del documento
| Código | Permiso | Efecto si NO tiene |
|---|---|---|
| 104 | Guardar cotizaciones | Botón "Guardar" deshabilitado, no puede guardar proformas/cotizaciones |
| 060 | Eliminar cotizaciones | No puede eliminar cotizaciones completas desde el modal de recuperar |
| 069 | Ver cotizaciones de otros usuarios | Solo ve sus propias cotizaciones al recuperar; con el permiso ve las de todos |
| 119 | Compuestos manuales | No ve la pestaña de artículos compuestos (kits) |
| 123 | Enviar a Cajas | Botón "Enviar a Cajas" deshabilitado |