Sistema di Stampa: Regole e Blocchi
Il sistema di stampa della piattaforma POS si basa su un'architettura a 3 livelli che separa i dispositivi fisici, i template grafici e le regole di instradamento. Questa separazione consente di configurare scenari complessi (es. comande in cucina, scontrini fiscali, preconto) senza modificare codice.
PrinterDevice: Il Dispositivo Fisico
PrinterDevice rappresenta una stampante fisica registrata nel sistema. Ogni dispositivo ha le seguenti proprieta:
- name: identificativo univoco (es. "Stampante Bar", "Fiscale Cassa 1")
- ipAddress e port: indirizzo di rete (default porta 9100)
- protocol: protocollo di comunicazione (
escpos,star,epson_fp,custom_fp) - deviceType:
standardper stampanti termiche,fiscalper registratori fiscali - paperWidth: larghezza carta in mm (58 o 80)
- connectionType:
networkousb
Le stampanti fiscali (deviceType: 'fiscal') possono avere una configurazione aggiuntiva in fiscalConfigJson per la mappatura reparti IVA e codici pagamento.
PrintLayout: Il Template Grafico
PrintLayout definisce il template visivo di uno scontrino o comanda tramite una lista di PrintBlock salvata in formato JSON nel campo structureJson. I tipi di layout disponibili sono: receipt, kitchen_order, invoice.
Tipi di PrintBlock
| Tipo | Descrizione | Parametri principali |
|---|---|---|
text | Riga di testo | text, align, bold, underline, size |
columns | Colonne affiancate | columns (lista con text, width, align) |
divider | Linea separatrice | char (default -) |
image | Immagine base64 | base64Data |
barcode | Codice a barre | data, format, height, textPosition |
qrcode | QR Code | data, size (1-8), errorCorrection |
feed | Avanzamento carta | lines (default 3) |
cut | Taglio carta | nessuno |
Il campo size del blocco text accetta small, medium, large. Le colonne usano un sistema a 12 slot di larghezza totale.
PrintRoutingRule: L'Instradamento Condizionale
PrintRoutingRule collega un dispositivo (printerDeviceId) a un layout (layoutId) con condizioni di attivazione. Le condizioni usano un sistema ad albero (PrintCondition) con operatori AND/OR e condizioni atomiche su campi come category, product_name, sku.
Parametri chiave della regola
- triggerType: quando attivare la regola (
all,receipt,comanda,preconto) - cutPerCategory: taglia la carta tra categorie diverse
- comandaSendMode:
all_courses(tutte le uscite) oactive_only(solo quella attiva) - comandaVaiMode: come formattare l'uscita VAI (
active_only,full_highlight,full_big_small) - nsItemsHandling: gestione articoli non soggetti IVA per stampanti fiscali (
include,exclude,append_notes,separate_document)
Flusso di stampa
- L'operatore conferma un ordine o richiede una stampa
- Il
PrintRouterServicecarica tutte le regole attive dal database Isar - Per ogni regola, valuta le condizioni (
rootConditionJson) contro i prodotti del carrello - Se le condizioni sono soddisfatte, genera i byte ESC/POS dal layout associato
- Crea un
PrintJobe lo invia alla coda di stampa
FAQ
Posso assegnare piu regole alla stessa stampante? Si. Piu regole possono puntare allo stesso dispositivo con layout diversi. Ad esempio, una regola per le bevande e una per i dolci possono usare la stessa stampante bar con template differenti.
Le stampanti fiscali hanno bisogno di un layout?
No. Le stampanti fiscali (deviceType: 'fiscal') usano il protocollo nativo del registratore (Epson FP, Custom). Il campo layoutId puo essere null per queste regole.
Come gestisco le uscite in cucina?
Configura una regola con triggerType: 'comanda' e imposta comandaSendMode e comandaVaiMode secondo le esigenze della cucina.