Flujos y casos de uso (Facturación)

Estados de Hacienda

  • aceptado → documento válido; el detalleMensaje (si hay) son observaciones.
  • rechazadoerrores que lo bloquearon. Hacienda manda los mensajes concatenados (<DetalleMensaje>); el sistema los separa por línea (extractDetalle conserva los &#13;) y los muestra como bullets, etiquetados por estado (rojo = errores, ámbar = observaciones) y resaltando el código (ej. -491).

POS — wizard de 3 pasos

  • Paso 1 · Configuración: tipo (Tiquete/Factura), cliente (si factura), moneda + tipo de cambio, condición de venta (+ plazo/vencimiento si es crédito), actividad económica. Botón Venta rápida (Tiquete · Contado · ₡) que salta a productos. No avanza si falta el cliente (factura) o la actividad.
  • Paso 2 · Productos: grid de productos + carrito persistente. La pistola de código de barras solo funciona en este paso. Cantidad como input editable (sin +/−) con la unidad al lado. Exoneración/MAG por línea pre-marcada según el cliente (editable). Cards de tamaño fijo con IVA visible.
  • Paso 3 · Pago: medio de pago, efectivo con denominaciones inteligentes + botón Exacto + vuelto, vista previa del tiquet y cobro.

Adaptativo: mobile full-screen por paso (touch-first, inputs ≥ 16px para que iOS no haga zoom); desktop usa split (grid + carrito).

Condición de venta a crédito

  • 02 Crédito y 10 Venta a crédito IVA ≤90 díasPlazo en días + Fecha de vencimiento.
  • Otra condición ≠ contado → solo Fecha de vencimiento.
  • PlazoCredito (días) va al XML solo para 02/10 (entero ≥ 1, server-authoritative). La fecha de vencimiento es interna (Hacienda no tiene ese campo en v4.4); se usa para cuentas por cobrar y se muestra en el tiquet/PDF.

Comprobantes — menú “Opciones”

Sobre una factura aceptada, el botón Opciones abre:

OpciónQué haceBloqueado por candado
Nota de CréditoAcredita/reduce (parcial o total). Tope = saldoCant/montoSaldo.
Nota de DébitoAumenta. Arranca con la cantidad original; tope = original.
Anular facturaNC total bloqueada: líneas read-only (acredita 100 % del saldo), código de referencia 01, solo se edita la razón.
Usar como templateAbre una factura nueva pre-rellena (editable) para emitir rápido; clave/consecutivo nuevos.No (es factura nueva)

Internamente: anular fuerza NC + bloquea líneas (montoLineaBloqueado) + código 01; template hace esReferencia = aceptado && !template → reusa el camino de “corrección” (factura nueva, sin referencia, sin saldo).

Código de referencia (Nota 9) y razón

NC/ND/FEC llevan InformacionReferencia: TipoDocIR, Número, FechaEmisionIR, Código (Nota 9: 01 Anula, 02 Corrige monto, 04 Referencia a otro doc…) y Razón (máx. 180, la ve Hacienda).

FEC — Factura Electrónica de Compra (08)

Roles invertidos: el Emisor del XML es el proveedor y el Receptor somos nosotros; clave/consecutivo/firma siguen siendo nuestras. Las líneas usan el CABYS manual (no el buscador de productos). Requiere el documento de referencia del proveedor (TipoDocIR, Código, Número, fecha); el extranjero no domiciliado (05) usa OtrasSenasExtranjero.

Corrección de una rechazada

Una factura rechazada se reabre como comprobante nuevo corregido (misma data, editable, nueva clave/consecutivo) — banner con el motivo del rechazo anterior.