Pre-launch · ERPlora is in active development. You're viewing a product preview.
Back to apps Organization and communication

Printing

Your receipt, kitchen and label printers, and the print queue that shows whether paper is coming out.

Free
Start free
Turn it on from your Hub

Apps are turned on from the Apps page of your Hub. Create your free account to get one.

This documentation is only available in Spanish.

Para qué sirve y para quién

Impresión es donde el negocio da de alta sus impresoras, dice qué sale por cada una y ve si el papel está saliendo. Cada impresora tiene un nombre («Caja», «Cocina»), su conexión (red, USB, Bluetooth o la impresora del sistema), su ancho de papel (58 u 80 mm) y su función: tiques, cocina, barra o etiquetas. Las demás apps (Ventas al cobrar, Caja al cerrar el turno, Inventario para las etiquetas) piden sus impresiones a Impresión, que las pone en la cola de impresión del negocio; el dispositivo con la app de ERPlora instalada junto a la impresora las saca en papel y confirma. Si algo no sale, la cola lo dice y deja reintentarlo o cancelarlo.

Quién la usa:

  • El propietario y el administrador: todo; además reintentan y cancelan trabajos atascados.
  • El responsable: da de alta y cambia impresoras y ajustes, y pide impresiones.
  • El empleado: ve impresoras, ajustes y cola, y pide impresiones (una prueba, un tique).

Sirve igual a la peluquería y al restaurante: los dos imprimen el tique y las etiquetas; la comanda de cocina y barra es solo del restaurante.

Impresión no compone lo que se imprime (el tique es de Ventas, la factura de Facturación, el informe del turno de Caja, la etiqueta de Inventario) y no habla con la impresora: lo hace la app del dispositivo. Un navegador no llega a las impresoras.

Referencia adoptada

ERPlora no inventa flujos: adopta los que el mercado ya probó.

  • Square — impresoras de recibos, pedidos y etiquetas: cada impresora se da de alta en el punto de venta con su nombre, su conexión y lo que imprime (recibos, tiques de cocina, etiquetas); una prueba de impresión por impresora.
  • Toast — impresión y estaciones de cocina: cada documento sale por la impresora de su estación; la comanda no se desvía a la de tiques.
  • Toast — modo sin conexión y Square — modo sin conexión: un trabajo que no puede salir espera y se avisa; recuperarlo no lo duplica.
  • Epson TM y Star (manuales de las térmicas de 58 y 80 mm): el ancho del papel es de cada impresora, no del negocio.
  • Lightspeed y Odoo TPV: la cola de impresión con reintento y el «abrir cajón al cobrar» por la impresora de tiques.
  • AEAT — SIF y VERI*FACTU: el tique lleva el QR de cotejo y la reimpresión es copia («DUPLICADO»); la cuenta de la mesa no lleva número, QR ni pago, y avisa de que no es factura. Lo pone quien compone el documento.

Antes de empezar

  • Encender Impresión en el negocio. No necesita ninguna otra app.
  • La app de ERPlora instalada en el dispositivo que está junto a la impresora (en su red, con su cable USB o emparejado por Bluetooth). Ese dispositivo saca el papel de la cola; desde un navegador no se llega a las impresoras.
  • Una impresora térmica (ESC/POS) para tiques, comandas y etiquetas, encendida; para A4 (una factura completa), la impresora del sistema del ordenador.

Configuración inicial, paso a paso:

  1. Abre Impresión → Impresoras y pulsa «Añadir impresora». Escribe su nombre, elige la conexión, escribe su dirección (la IP de su hoja de configuración, la MAC de Bluetooth o el nombre de la cola USB), el ancho de papel y su función (PRINTING-F03, PRINTING-F04).
  2. Pulsa «Probar» en su fila y comprueba que sale la hoja de prueba (PRINTING-F05).
  3. En Impresión → Ajustes decide si el tique sale solo al cobrar, si se abre el cajón con él, cuántas copias y, si tienes varias impresoras con la misma función, cuál es la de cada una (PRINTING-F06).
  4. La cabecera y el pie del tique se escriben en los ajustes de Ventas, no aquí.
  5. Cobra una venta de prueba y comprueba en Impresión → Cola que el trabajo sale y queda «Impreso» (PRINTING-F07, PRINTING-F01).

Pantallas

Tres pestañas abajo, las mismas que el menú: Impresoras, Cola y Ajustes.

Impresoras

Menú Impresión → Impresoras. Título «Impresión» y la frase «Da de alta las impresoras del negocio, di qué sale por cada una y comprueba que el papel sale.». Dos zonas, en este orden:

  • Estado de la impresión: una tarjeta por cada función que tenga alguna impresora o trabajos esperando (un negocio nuevo no ve ninguna), con su nombre («Recibo», «Cocina», «Barra», «Etiqueta»), su estado («Lista», «En cola, sin impresora», «Con errores») y «En cola: N · el más antiguo lleva 3 min» o «Nada en cola». Una función con trabajos esperando y sin ninguna impresora activa saca el aviso naranja «N trabajos de Cocina llevan 3 min esperando. Ninguna impresora activa tiene esta función: añade una o dale esta función a una de abajo.». Con todo vacío: «Todo al día: no hay nada en cola.». Error de lectura: «No se pudo leer la cola de impresión.» con «Reintentar».
  • Impresoras: la tabla (o tarjetas en el móvil) con Nombre, Función, Conexión, Dirección, Papel, Estado y Activa. El estado es «Lista», «Esperando» (tiene trabajos que no salen desde hace más de un minuto), «Con errores» (el último intento falló: debajo, «Último error: …») o «Inactiva». Por fila: «Editar», «Probar» y «Desactivar»/«Activar». Arriba, «Añadir impresora». Vacía: «Todavía no hay impresoras. Añade la de tu caja con su dirección.». Una nota recuerda que el papel lo saca la app de ERPlora del dispositivo que está junto a la impresora.

La ventana Nueva impresora / Editar impresora tiene «Nombre», «Conexión» («Red», «USB», «Bluetooth», «Impresora del sistema (A4)»), «Dirección IP o nombre» y «Puerto» (red; 9100 de fábrica), «MAC de Bluetooth» (Bluetooth), «Nombre de la cola USB» (USB), «Ancho de papel» (80 mm o 58 mm; no en la del sistema; debajo, «Se guarda con la impresora: la app de ERPlora imprime por ahora 32 caracteres por línea, sea cual sea el papel.»), «Función» y «Activa», con «Guardar» y «Cancelar».

Quien no puede cambiar impresoras no ve «Añadir impresora», «Editar» ni «Desactivar»; quien no puede imprimir no ve «Probar».

Cola

Menú Impresión → Cola. Título «Cola de impresión». La tabla de trabajos, del más reciente al más antiguo, 50 por página: Documento («Tique T-000123», o «Tique · 14/10/26 23:05» si no trae número), Función, Impresora, Estado («Pendiente», «Enviado», «Impreso», «Fallido», «Cancelado»), Intentos, Pedido el y Detalle («Último error: …», «Cancelado por Ana · motivo», «Reenviado por Ana»). Filtros por estado, función e impresora, y buscador por número de documento. Quien puede gestionar la cola ve en cada fila «Reintentar» (un trabajo fallido, o enviado y sin respuesta pasado su plazo) y «Cancelar» (en cola, fallido o sin respuesta); «Cancelar» abre una ventana con «Motivo (opcional)», «Sí, cancelar» y «Volver». Vacía: «No hay trabajos de impresión.». Error al cargar: el mensaje con «Reintentar».

Ajustes

Menú Impresión → Ajustes. Una tarjeta «Ajustes del ticket» con «Imprimir ticket al cobrar», «Abrir cajón al cobrar» y «Copias del ticket» (1, 2 o 3); otra «Impresora de cada función» con un desplegable por función («Recibo», «Cocina», «Barra», «Etiqueta»): «La primera activa con esa función» o una de sus impresoras activas. La nota «El encabezado y el pie del tique forman parte de los ajustes de Ventas, que es de donde sale el tique.» con el enlace «Abrir los ajustes del tique» (si Ventas está encendida). «Guardar ajustes» guarda lo que cambió y dice «Ajustes guardados.». Quien no puede cambiarlos los ve bloqueados con «No tienes permiso para cambiar estos ajustes.». Cargando: «Cargando ajustes…». Error: «No se pudieron cargar los ajustes.» con «Reintentar»; al guardar, «No se pudieron guardar los ajustes.» con el motivo.

Flujos

ID Flujo Vertical Estado
PRINTING-F01 Ver cómo va la impresión común hecho
PRINTING-F02 Encontrar una impresora de la red sin escribir su dirección común no hecho: lo hará la app del dispositivo (bloque 6)
PRINTING-F03 Añadir una impresora por su dirección común hecho
PRINTING-F04 Asignar qué sale por cada impresora común hecho
PRINTING-F05 Hacer una prueba de impresión común parcial: el papel sale con /ws/print
PRINTING-F06 Elegir cómo imprime el negocio común hecho
PRINTING-F07 Imprimir el tique al cobrar común parcial: falta que Ventas lo pida
PRINTING-F08 Reimprimir un tique o una factura común parcial: falta que Ventas y Facturación lo pidan
PRINTING-F09 Imprimir la cuenta de la mesa restaurante parcial: falta que Ventas lo pida
PRINTING-F10 Imprimir la comanda en cocina y barra restaurante no hecho: Cocina no existe
PRINTING-F11 Reimprimir una comanda restaurante no hecho: Cocina no existe
PRINTING-F12 Imprimir la etiqueta de un código de barras común parcial: falta que Inventario lo pida
PRINTING-F13 Abrir el cajón al cobrar común parcial: falta que Ventas lo pida
PRINTING-F14 Sacar del atasco un trabajo de impresión común hecho
PRINTING-F15 Llevar el texto antiguo del tique a Ventas común retirado
PRINTING-F16 Mandar imprimir desde el asistente común hecho
PRINTING-F17 Imprimir el cierre de caja común parcial: falta que Caja lo pida
PRINTING-F18 Sacar el papel: el dispositivo recoge y confirma los trabajos común parcial: la recogida está hecha; el canal /ws/print es de base
PRINTING-F19 Ver el estado de una impresora común hecho

PRINTING-F01 Ver cómo va la impresión

Estado: hecho Vertical: común Actor: administrador, responsable, empleado Pantalla: Impresoras, Cola Pasos: 1. Abre Impresión → Impresoras: las tarjetas de función dicen si cada una tiene impresora, cuánto espera y desde cuándo. 2. Abre Impresión → Cola para ver cada trabajo con su estado, sus intentos y su último error. 3. Si una función sale «En cola, sin impresora» o hay un aviso naranja, el papel no está saliendo: sigue por PRINTING-F04 (dar la función a una impresora) o PRINTING-F14 (sacar el trabajo del atasco). Entra: la cola y las impresoras del negocio. Sale: nada guardado. Lo que depende del reloj (cuánto lleva esperando, el aviso naranja, «Esperando» y un enviado que no contestó a tiempo) se recalcula solo cada 30 s, sin esperar a otro cambio; «Todo al día» exige que no haya nada en cola, enviado sin confirmar ni fallido. Las pantallas se refrescan solas al encolarse, enviarse, imprimirse, fallar, reintentarse o cancelarse un trabajo. Si falla: «No se pudo leer la cola de impresión.» con «Reintentar»; no se pinta «Todo al día» cuando la lectura falla. Implicados: PRINTING-F14, PRINTING-F18, CASH_REGISTER-F08

PRINTING-F02 Encontrar una impresora de la red sin escribir su dirección

Estado: no hecho — buscar impresoras (mDNS y barrido del puerto 9100, USB del sistema, Bluetooth emparejado) lo hace la app del dispositivo (erplora_discover_printers); su puente JavaScript llega a packages/ui con el bloque 6 (PLAN-HUB §5). Mientras tanto, la impresora se añade por su dirección (PRINTING-F03). Vertical: común Actor: administrador, responsable Pantalla: Impresoras Pasos: 1. (Bloque 6) En la app instalada, «Buscar impresoras» lista lo que encuentra el dispositivo. 2. Elegir una la da de alta con su conexión y su dirección ya rellenas (PRINTING-F03). Entra: lo que encuentra la app del dispositivo. Sale: la impresora dada de alta en el negocio. Si falla: desde un navegador, «Desde el navegador no se puede buscar impresoras: añádela por su dirección.». Implicados: PRINTING-F03

PRINTING-F03 Añadir una impresora por su dirección

Estado: hecho Vertical: común Actor: administrador, responsable Pantalla: Impresoras Pasos: 1. Pulsa «Añadir impresora». 2. Escribe el «Nombre» («Caja», «Cocina»), elige la «Conexión» y escribe su dirección: la IP (o el nombre en la red) y el puerto para una de red (la IP sale en la hoja de configuración que imprime la impresora al encenderla con el botón de avance pulsado); la MAC para una Bluetooth emparejada; el nombre de la cola del sistema para una USB. La «Impresora del sistema (A4)» no lleva dirección: es la del ordenador. 3. Elige el «Ancho de papel» y la «Función», y pulsa «Guardar». 4. Sale «Impresora añadida.» y aparece en la tabla. Entra: el nombre, la conexión, la dirección, el papel y la función. Sale: la impresora del negocio (avisa: printing.printer.created). Si falla: el campo marcado con el motivo: «Ya hay una impresora con ese nombre.», «Escribe una IP o un nombre de red válido (por ejemplo 192.168.1.100).», «El puerto va de 1 a 65535.», «Escribe la MAC como AA:BB:CC:DD:EE:FF.», «Escribe el nombre de la cola tal como lo da el sistema (letras, números, punto, guion y guion bajo).», «La impresora del sistema imprime páginas A4: dale la función Recibo.». Implicados: PRINTING-F04, PRINTING-F05

PRINTING-F04 Asignar qué sale por cada impresora

Estado: hecho Vertical: común Actor: administrador, responsable Pantalla: Impresoras, Ajustes Pasos: 1. Al dar de alta o editar una impresora, elige su «Función»: «Recibo» (tique, factura, cuenta de la mesa, informe de caja, albarán), «Cocina» (comandas), «Barra» (comandas de barra) o «Etiqueta» (etiquetas de código de barras). 2. Si hay varias impresoras con la misma función, en Ajustes → Impresora de cada función elige la que la saca; si no eliges, sale por la primera activa con esa función (por nombre). 3. «Desactivar» deja una impresora fuera sin borrarla: no recibe trabajos nuevos y sus trabajos en cola esperan (reintentarlos los manda a la impresora que toque entonces). Entra: la función de cada impresora y, si hay varias, la elegida. Sale: cada documento sale por la impresora de su función. Una impresora no se borra: la cola la nombra. Si falla: si ninguna impresora activa tiene la función, el trabajo espera en la cola sin impresora («En cola, sin impresora») y sale en cuanto una la tenga. En ajustes, una impresora de otra función o inactiva se rechaza: «Esa impresora no tiene esta función.», «Esa impresora está inactiva.». Implicados: PRINTING-F01, PRINTING-F06, INVENTORY-F25

PRINTING-F05 Hacer una prueba de impresión

Estado: parcial — la prueba se encola y la recoge el dispositivo (PRINTING-F18); el papel sale cuando base sirva /ws/print (bloque 6) Vertical: común Actor: administrador, responsable, empleado Pantalla: Impresoras Pasos: 1. Pulsa «Probar» en la fila de la impresora. 2. Sale «Prueba enviada a la cola de Caja.» y en la cola aparece «Hoja de prueba». 3. El dispositivo junto a la impresora la saca: el nombre del negocio (el que tiene Facturación; sin Facturación o sin permiso para leerlo, «ERPlora»), «Impresora OK», la fecha y la dirección de la impresora. Una impresora del sistema saca la hoja en A4 con lo mismo. Entra: la impresora. Sale: un trabajo «Hoja de prueba» para esa impresora (avisa: printing.job.queued). Si falla: una impresora inactiva no se prueba: «Esa impresora está inactiva: actívala para probarla.». Si el papel no sale, el trabajo queda «Fallido» con el error del dispositivo (PRINTING-F14). Implicados: PRINTING-F18

PRINTING-F06 Elegir cómo imprime el negocio

Estado: hecho Vertical: común Actor: administrador, responsable Pantalla: Ajustes Pasos: 1. Abre Impresión → Ajustes. 2. Enciende o apaga «Imprimir ticket al cobrar» y «Abrir cajón al cobrar», elige las «Copias del tique» y, si quieres, la impresora de cada función. 3. Pulsa «Guardar ajustes». Se guarda lo que cambiaste; lo demás queda como estaba. Entra: las decisiones del negocio. Sale: los ajustes de impresión, una sola fila (avisa: printing.settings.updated). Sin guardar nunca valen los de fábrica: tique al cobrar encendido, cajón apagado, una copia, sin impresora elegida. Si falla: «No se pudieron guardar los ajustes.» con el motivo. Si la lectura falla, la pantalla no enseña valores y ofrece «Reintentar». Sin permiso, bloqueados y sin «Guardar ajustes». Implicados: PRINTING-F07, PRINTING-F13

PRINTING-F07 Imprimir el tique al cobrar

Estado: parcial — Impresión lo hace en cuanto se le pide (printing.job.create con automatic); falta que Ventas lo pida al cobrar (pedido al worker de sale) y el papel, con /ws/print Vertical: común Actor: empleado Pantalla: Vender (de Ventas) Pasos: 1. El empleado cobra en Ventas → Vender. 2. En la misma transacción del cobro, Ventas pide a Impresión el tique (automatic: true). 3. Si «Imprimir ticket al cobrar» está encendido, el tique entra en la cola de la función Recibo con las copias de los ajustes y, si «Abrir cajón al cobrar» está encendido, con la orden de abrir el cajón; el dispositivo lo saca. Entra: el tique compuesto por Ventas (receipt). Sale: un trabajo en la cola, o nada si el negocio no imprime al cobrar. Si falla: una venta nunca se cae por la impresión: si Impresión no está encendida o la petición falla, Ventas cobra igual y lo dice. Un trabajo que no sale queda en la cola (PRINTING-F14). Implicados: SALE-F08, PRINTING-F13, PRINTING-F18

PRINTING-F08 Reimprimir un tique o una factura

Estado: parcial — Impresión acepta el tique (receipt con duplicate) y la factura (invoice, o la página A4 de Facturación para la impresora del sistema); falta que Ventas y Facturación lo pidan Vertical: común Actor: administrador, responsable, empleado Pantalla: Ventas, Facturas (de esas apps) Pasos: 1. En la ficha de la venta o de la factura, pulsa «Imprimir». 2. La app pide a Impresión el documento marcado como copia («DUPLICADO»). Entra: el documento con duplicate: true. Sale: un trabajo en la cola de Recibo; una factura A4 va a la impresora del sistema. Si falla: como F07. Implicados: SALE-F31

PRINTING-F09 Imprimir la cuenta de la mesa

Estado: parcial — Impresión acepta la cuenta (prebill) y rechaza una sin líneas; falta que Ventas la pida Vertical: restaurante Actor: empleado Pantalla: Vender (de Ventas) Pasos: 1. Con la cuenta abierta, pulsa «Imprimir cuenta». 2. Ventas pide la cuenta (sin número, sin QR, sin pago y con el aviso de que no es factura). Entra: la cuenta (prebill) con sus líneas. Sale: un trabajo en la cola de Recibo. Cada pulsación saca una cuenta. Si falla: «Una cuenta lleva líneas que cobrar: esta no tiene ninguna.» (422). Implicados: SALE-F15

PRINTING-F10 Imprimir la comanda en cocina y barra

Estado: no hecho — Cocina no existe todavía en la plataforma; Impresión ya acepta la comanda (kitchen_order, función Cocina o Barra) Vertical: restaurante Actor: empleado Pantalla: Vender (de Ventas) Pasos: 1. El camarero dispara el pedido. 2. Cocina pide una comanda por estación (función Cocina o Barra). Entra: la comanda (kitchen_order) con su mesa, camarero y líneas. Sale: un trabajo por estación. Si falla: la comanda no se desvía a la impresora de tiques; espera en su función. Implicados: PRINTING-F04

PRINTING-F11 Reimprimir una comanda

Estado: no hecho — llega con Cocina Vertical: restaurante Actor: empleado Pantalla: Cocina Pasos: 1. En la comanda, «Reimprimir». Entra: la comanda. Sale: un trabajo nuevo con otra clave. Si falla: como F10. Implicados: PRINTING-F10

PRINTING-F12 Imprimir la etiqueta de un código de barras

Estado: parcial — Impresión acepta la etiqueta (barcode_label, función Etiqueta: nombre, código y precio; el código lo dibuja la impresora); falta que Inventario la pida (INVENTORY-F25) Vertical: común Actor: administrador, responsable, empleado Pantalla: Ficha del producto (de Inventario) Pasos: 1. En la ficha del producto, «Imprimir código de barras». 2. Inventario pide la etiqueta a Impresión. Entra: product_name, barcode (el SKU) y price. Sale: un trabajo en la cola de Etiqueta. Cada pulsación saca una etiqueta. Si falla: sin impresora con la función Etiqueta, la etiqueta espera en la cola y la tarjeta de Etiqueta lo dice («En cola, sin impresora»). Implicados: INVENTORY-F25, PRINTING-F04

PRINTING-F13 Abrir el cajón al cobrar

Estado: parcial — el trabajo del tique lleva la orden de abrir el cajón (o, con el tique apagado, un trabajo solo de cajón); falta que Ventas lo pida (F07) Vertical: común Actor: empleado Pantalla: Vender (de Ventas) Pasos: 1. Con «Abrir cajón al cobrar» encendido, el cobro (F07) abre el cajón conectado a la impresora de tiques, con cualquier forma de pago. Entra: el ajuste. Sale: la orden de abrir el cajón, en el mismo trabajo que el tique. Si falla: si el tique no sale, el cajón tampoco; el trabajo queda en la cola (PRINTING-F14). Implicados: PRINTING-F06, PRINTING-F07

PRINTING-F14 Sacar del atasco un trabajo de impresión

Estado: hecho Vertical: común Actor: propietario, administrador Pantalla: Cola Pasos: 1. En Impresión → Cola, busca el trabajo «Fallido» (o «Enviado» que no contestó). 2. «Reintentar» lo devuelve a la cola con los intentos a cero, hacia la impresora que toque ahora: «Devuelto a la cola: el próximo dispositivo que se conecte lo imprimirá.». 3. «Cancelar» pide un motivo (opcional) y lo retira: «Trabajo cancelado. No se imprimirá.». Queda en la cola con quién, cuándo y por qué. Entra: el trabajo y, al cancelar, el motivo. Sale: el trabajo en cola otra vez o cancelado (avisa: printing.job.retried, printing.job.cancelled). Nada se borra. Si falla: «Solo se reintenta un trabajo fallido o que no contestó; este está …», «Un trabajo que está imprimiendo o ya impreso no se cancela; este está …». Sin permiso no se ven los botones. Implicados: PRINTING-F01

PRINTING-F15 Llevar el texto antiguo del tique a Ventas

Estado: retirado — la plataforma nueva no tiene cabecera ni pie de tique en Impresión que llevar: el texto del tique vive en los ajustes de Ventas desde el principio Vertical: común Actor: administrador Pantalla: Ajustes Pasos: 1. La nota de Ajustes lleva a los ajustes de Ventas, donde se escribe el texto del tique. Entra: nada. Sale: nada. Si falla: no aplica. Implicados: SALE-F02

PRINTING-F16 Mandar imprimir desde el asistente

Estado: hecho Vertical: común Actor: administrador, responsable, empleado Pantalla: Asistente Pasos: 1. «Imprime una prueba en la de cocina», «reintenta los trabajos fallidos de etiquetas», «¿cómo está la impresora de la caja?»: el asistente usa las mismas operaciones que las pantallas, nombrando la impresora por su nombre y el trabajo por su número. Entra: la petición. Sale: lo mismo que la pantalla. Si falla: lo mismo que la pantalla, con las palabras del servidor. Implicados: PRINTING-F05, PRINTING-F14, PRINTING-F19

PRINTING-F17 Imprimir el cierre de caja

Estado: parcial — Impresión acepta el informe (cash_session_report); falta que Caja lo pida al imprimir el informe X o Z (hoy sale por el diálogo del navegador) Vertical: común Actor: empleado Pantalla: Detalle de la sesión (de Caja) Pasos: 1. En el detalle de la sesión, «Imprimir». 2. Caja pide el informe a la función Recibo. Entra: el informe (sesión, cajero, fondo, cierre y movimientos). Sale: un trabajo en la cola de Recibo. Si falla: como F07. Implicados: CASH_REGISTER-F16

PRINTING-F18 Sacar el papel: el dispositivo recoge y confirma los trabajos

Estado: parcial — recoger, confirmar y avisar del fallo están hechos como operaciones (printing.job.claim, printing.job.complete, printing.job.fail); el canal /ws/print y la app que las llama son de base y de la app nativa (bloque 6). Contrato en «Contrato con la plataforma». Vertical: común Actor: sistema (la app del dispositivo) Pantalla: ninguna Pasos: 1. El dispositivo junto a la impresora pide el siguiente trabajo de las impresoras a las que llega. 2. Impresión le da el más antiguo en cola (de esa impresora, o sin impresora y de su función), lo marca «Enviado» con un plazo de 90 s y suma un intento. 3. El dispositivo lo imprime —la primera copia como original y las demás de un tique o una factura como «DUPLICADO»— y confirma diciendo quién es y qué entrega contesta: «Impreso». Si no pudo, avisa con el error: vuelve a la cola hasta 5 intentos y después queda «Fallido». 4. Si el dispositivo se cae sin contestar, pasado el plazo el trabajo vuelve a la cola y se avisa a los dispositivos (printing.job.queued). Entra: las impresoras que alcanza el dispositivo y, al confirmar, el resultado. Sale: el trabajo con su estado (avisa: printing.job.claimed, printing.job.printed, printing.job.failed). Si falla: confirmar dos veces es una confirmación. Una confirmación tardía del mismo dispositivo (una impresora lenta con copias pasa de los 90 s y el trabajo ya había vuelto a la cola) se acepta: el papel salió y no se imprime otra vez. Una confirmación o un fallo de otro dispositivo, o de una entrega que no es la suya, se rechaza (409 printing.job_not_yours) y no cambia nada. Implicados: PRINTING-F05, PRINTING-F07, PRINTING-F14

PRINTING-F19 Ver el estado de una impresora

Estado: hecho Vertical: común Actor: administrador, responsable, empleado Pantalla: Impresoras Pasos: 1. La columna «Estado» de cada impresora dice «Lista», «Esperando», «Con errores» o «Inactiva», con su último error. 2. El asistente lo contesta por el nombre de la impresora. Entra: la impresora. Sale: su estado, cuántos trabajos esperan y desde cuándo, cuándo imprimió por última vez y su último error. Si falla: «No hay ninguna impresora con ese nombre.». Implicados: PRINTING-F01

Servicios: lo que entra y lo que sale

Las demás apps y el asistente usan Impresión por estas operaciones, por su nombre; nunca sus tablas.

Lo que ofrece: consultas (leen, no cambian nada)

Qué da Quién puede Flujos Servicio
Los ajustes de impresión (los de fábrica si nunca se guardaron) ver F06 printing.settings.get
Las impresoras, con búsqueda por nombre, filtros (función, conexión, activa) y páginas, cada una con su estado ver F03, F04, F19 printing.printer.list
Una impresora por id o por nombre ver F04 printing.printer.get
El estado de una impresora (por id o nombre) ver F19 printing.printer.status
La cola, del más reciente al más antiguo, con búsqueda por documento, filtros (estado, función, impresora) y páginas ver F01, F14 printing.job.list
El resumen de la cola por función ver F01 printing.job.summary

Lo que ofrece: acciones (cambian datos)

Qué hace Quién puede Flujos Servicio
Guarda los ajustes (solo lo que se manda) ajustes F06 printing.settings.update
Da de alta una impresora ajustes F03 printing.printer.create
Cambia una impresora, o la desactiva y activa ajustes F04 printing.printer.update
Encola la hoja de prueba de una impresora imprimir F05 printing.printer.test
Encola un documento (idempotente por su clave) imprimir F07–F13, F16, F17 printing.job.create
Da al dispositivo el siguiente trabajo de sus impresoras imprimir F18 printing.job.claim
Confirma un trabajo impreso imprimir F18 printing.job.complete
Avisa de que un trabajo no salió imprimir F18 printing.job.fail
Devuelve a la cola un trabajo fallido o sin respuesta cola F14 printing.job.retry
Cancela un trabajo cola F14 printing.job.cancel

Lo que avisa

Aviso Cuándo Qué lleva Servicio
Ajustes guardados Guardar los ajustes Qué campos cambiaron printing.settings.updated
Impresora nueva Dar de alta una impresora Cuál printing.printer.created
Impresora cambiada Editarla, desactivarla o activarla Cuál y qué campos printing.printer.updated
Trabajo en cola Encolar (también reintentar) El trabajo, su función y su impresora printing.job.queued
Trabajo enviado Un dispositivo lo recoge El trabajo y su impresora printing.job.claimed
Trabajo impreso El dispositivo confirma El trabajo printing.job.printed
Trabajo fallido El dispositivo avisa del error El trabajo y si ya no se reintenta printing.job.failed
Trabajo devuelto a la cola Reintentar El trabajo printing.job.retried
Trabajo cancelado Cancelar El trabajo printing.job.cancelled

Los avisos no llevan el documento (puede tener el nombre o el NIF de un cliente): solo ids.

A qué reacciona

A nada. Las apps que imprimen llaman a printing.job.create por su nombre, dentro de su propia transacción (la de la venta, la del cierre), y no esperan a un aviso.

Lo que necesita de otras apps

Nada (requires = []). No lee modelos de nadie: quien imprime manda el documento ya compuesto.

Contrato con la plataforma

Lo que pide cada app (printing.job.create). La entrada es la del cuadro; los importes van en unidades de la moneda (12.50), con decimals si no son 2, y las fechas, ya escritas:

Campo Qué es
job_key Clave de idempotencia de quien pide (≤ 128): dos peticiones con la misma clave son un trabajo; la segunda contesta duplicate: true con el que ya estaba. Sin clave, Impresión pone una.
document_type Uno de los ocho que la impresora sabe pintar: receipt, kitchen_order, invoice, delivery_note, barcode_label, cash_session_report, prebill, generic. Otro es 422.
document El documento estructurado (objeto JSON, ≤ 512 KB): nunca HTML para una térmica. Los campos son los que lee crates/peripherals/src/escpos.rs de la app (abajo).
format receipt (térmica, de fábrica) o a4 (impresora del sistema).
html La página A4 completa (≤ 2 MB, sin scripts) cuando format es a4; obligatoria entonces y prohibida si no.
usage La función: receipt, kitchen, bar o label. Sin ella sale del documento: kitchen_order → cocina, barcode_label → etiquetas, el resto → tiques.
printer Una impresora concreta por id o por nombre («Cocina»); sin ella, la de la función (ajustes), o la primera activa con esa función, o ninguna (espera).
copies De 1 a 5; sin ella, las copias del tique de los ajustes para receipt y 1 para lo demás.
automatic true = la impresión sola al cobrar: respeta «Imprimir ticket al cobrar» (apagado → nada en cola, skipped: "print_on_sale_off") y añade «Abrir cajón al cobrar» (open_drawer; con el tique apagado y el cajón encendido, encola un trabajo solo de cajón).
source_app, source_ref Quién lo pide y qué documento es («sale», «T-000123»): lo que se ve en la cola.

Si el documento no trae locale, Impresión pone el idioma de quien lo pide; si no trae decimals (salvo en generic, que imprime todas sus claves), los de la moneda (currency, ISO 4217; sin ella, EUR). Un valor que no es JSON (un Decimal, una fecha) es 422, nunca un error del servidor.

Campos del documento que lee la impresora (los demás se ignoran):

  • receipt e invoice: business_name, business_address, vat_number, phone, receipt_id, duplicate, rectifying, cashier, customer_name, customer_tax_id, customer_address, items (name, quantity, total, notes, components, modifiers), subtotal, tax_amount, tax_label, tax_breakdown (rate, base, tax), discount, total, payment_method, paid, change, qr_data, qr_heading, qr_legend, receipt_header, receipt_footer, claim_*, promo_*, decimals, locale. Una invoice exige vat_number, receipt_id, customer_name, customer_tax_id y tax_breakdown no vacío (422 si falta).
  • prebill: lo mismo sin número, QR ni pago, con notice; exige items no vacío.
  • kitchen_order: order_number, round_number, table, waiter, label, priority, items (name, quantity, notes, combo_name, combo_ref).
  • barcode_label: product_name, barcode, price.
  • cash_session_report: receipt_id (la sesión), cashier, opening_balance, closing_balance, transactions (label, amount).
  • delivery_note: receipt_id, customer_name, delivery_address, items (name, quantity).
  • generic: title y cualquier par clave–valor.

Lo que hace base con /ws/print (fase 2, bloque 6). El protocolo es el del Hub viejo (print_ws.rs): hello con la sesión en el primer mensaje y el deviceId, ready, claim, job, done/failed, ack, beat, wake, idle, error. Lo de Impresión es el estado de la cola; el canal llama a sus operaciones con el contexto de la sesión del dispositivo:

  1. claim → printing.job.claim con printers (los ids de las impresoras del negocio que ese dispositivo alcanza; el dispositivo los conoce por printing.printer.list) y device (su nombre o deviceId). Contesta {"job": null} (→ idle) o el trabajo: {"id", "kind", "printer_id", "target", "paper_width", "document_type", "document", "copy_document", "format", "html", "copies", "open_drawer", "attempts", "leased_until"}.
  2. El dispositivo lo imprime con los comandos nativos de la app, que no cambian: - kind = "document" y format = "receipt": erplora_print(printerId = target, documentType, data = document, jobId = id) una vez y, si copies > 1, erplora_print(…, data = copy_document, …) las copies − 1 restantes. En un receipt o una invoice, copy_document es el documento con "duplicate": true: la app imprime «DUPLICADO» (escpos.rs) y nunca sale un segundo original (RD 1619/2012, art. 14.4). Una página A4 se imprime una vez; - kind = "document" y format = "a4": print_document(html); - kind = "test_page": erplora_test_print(printerId = target, data = document) (en la impresora del sistema, print_document(html)); - kind = "drawer", o open_drawer: true después de imprimir: erplora_open_drawer(printerId = target). target es el printer_id que entiende la app: network:<ip>:<puerto>, bluetooth:<MAC>, usb:<cola> o system.
  3. done → printing.job.complete con device y attempt ({"confirmed": true} → ack); se acepta también si el trabajo ya volvió a la cola, siempre que sea del mismo dispositivo. failed → printing.job.fail con el error, device y attempt; solo vale para la entrega en curso. Otro dispositivo u otra entrega → 409 printing.job_not_yours.
  4. wake: tras el COMMIT de un trabajo nuevo llega el aviso printing.job.queued por la BD de control (el mismo NOTIFY que /api/live); el canal despierta a los dispositivos de esa impresora o función. Es un empujón: el documento solo viaja en la respuesta a claim.
  5. Quién puede ser dispositivo de impresión (el registro de dispositivos y su latido) es de base; el permiso de las tres operaciones es printing.print.

Lo que se pide a cada app (no se toca desde aquí):

  • Ventas (sale): al cobrar, llamar a printing.job.create con el tique (receipt, automatic: true, job_key = sale-<id>-receipt, source_app: "sale", source_ref = número) en la transacción del cobro, sin caerse si Impresión está apagada; en «Imprimir» de la ficha, lo mismo con duplicate: true y otra clave; en «Imprimir cuenta», prebill. Los importes en unidades (céntimos / 100).
  • Facturación (invoice): «Imprimir» → invoice (térmica) o su página A4 (templates/invoice/invoice.html) con format: "a4".
  • Caja (cash_register): «Imprimir» del detalle → cash_session_report.
  • Inventario (inventory, INVENTORY-F25): «Imprimir código de barras» → barcode_label con product_name, barcode = SKU y price.
  • Cocina (cuando exista): kitchen_order por estación, usage kitchen o bar.

Quién la usa

App Para qué Servicio
Ventas Tique al cobrar, reimpresión, cuenta de la mesa (cuando lo adopte) printing.job.create
Facturación Factura en térmica o A4 (cuando lo adopte) printing.job.create
Caja Informe X y Z (cuando lo adopte) printing.job.create
Inventario Etiqueta de código de barras (cuando lo adopte) printing.job.create
base (/ws/print) Entregar y confirmar trabajos printing.job.claim, printing.job.complete, printing.job.fail

Quién puede qué

Permiso Propietario Administrador Responsable Empleado Servicio
Ver impresoras, ajustes y cola sí sí sí sí printing.view_settings
Impresoras y ajustes sí sí sí no printing.manage_settings
Imprimir (pedir, probar, recoger y confirmar) sí sí sí sí printing.print
Reintentar y cancelar trabajos sí sí no no printing.manage_jobs