Skip to main content

Integrazione Stampante Fiscale Epson FP

Panoramica

La piattaforma supporta le stampanti fiscali Epson FP-81II RT tramite connessione socket TCP diretta. Il driver EpsonFpDriver (modulo Flutter pos_mod_fiscal) implementa il protocollo proprietario Epson a comandi PDU per emettere scontrini fiscali, report X/Z e documenti gestionali.

Flusso di Emissione Scontrino

La sequenza di comandi per uno scontrino fiscale completo e:

  1. Status Check (1074) -- Verifica che la stampante sia pronta
  2. Apertura scontrino (1085) -- Begin fiscal receipt
  3. Righe articolo (1080) -- Un comando per ogni articolo
  4. Sconti articolo (1083) -- Sconti applicati al singolo articolo (TYPE=0)
  5. Subtotale (1086) -- Se presente sconto globale
  6. Sconto globale (1083) -- Sconto sul totale carrello (TYPE=2)
  7. Pagamenti (1084) -- Uno o piu pagamenti
  8. Chiusura scontrino (1087) -- End fiscal receipt

Formato Comandi Principali

Articolo (1080)

Struttura dati: OP(2) + DESC(20) + QTY(7) + PRICE(9) + DEP(2) + ALIGN(1)

  • DESC: Descrizione articolo, massimo 20 caratteri. Deve essere padded a destra con spazi. Caratteri non-ASCII vengono rimossi.
  • QTY: Quantita in millesimi (es. 2.50002500), 7 cifre con zero-padding
  • PRICE: Prezzo unitario in centesimi (es. 8.50000000850), 9 cifre
  • DEP: Reparto fiscale (01-99), mappato da vat_map o department_map

Sconto/Maggiorazione (1083)

Struttura dati: OP(2) + DESC(20) + AMN(9) + TYPE(1) + DEP(2) + ALIGN(1)

  • AMN: Importo in centesimi (es. 2.00000000200), 9 cifre
  • TYPE: 0 = sconto su articolo, 2 = sconto su subtotale, 1 = maggiorazione

Pagamento (1084)

Struttura dati: OP(2) + DESC(20) + AMN(9) + CODE(3) + ALIGN(1)

  • AMN: Importo pagamento in centesimi
  • CODE: 000 = contanti, 001 = elettronico, 002 = buono pasto

Limite Critico: DESC a 20 Caratteri

La Epson FP-81II usa un campo DESC di esattamente 20 caratteri per tutti i comandi (1080, 1083, 1084). Un errore comune e usare una lunghezza maggiore (es. 42 caratteri), che causa l'errore ERR01.16 ("NON PREVISTO").

Il driver gestisce questo troncando e paddando:

String desc = item.description.replaceAll(RegExp(r'[^\x20-\x7E]'), '');
if (desc.length > 20) desc = desc.substring(0, 20);
desc = desc.padRight(20);

Formato PDU e Checksum

Ogni comando viene inviato come PDU con struttura:

STX(1) + CNT(2) + IDEN(1) + CMD(4) + DATA(n) + CKS(2) + ETX(1)
  • CNT: Contatore sequenziale da 01 a 99
  • IDEN: Identificatore fisso E
  • CKS: Somma dei byte del payload modulo 100, convertita in due caratteri ASCII

Rilevamento Errori

Le risposte di errore hanno la struttura STX + CNT(2) + IDEN(1) + "ERR" + TYPE(2) + CODE(2) + CKS(2) + ETX. Il driver rimuove i primi 3 caratteri (CNT+IDEN) e verifica se il body inizia con ERR.

Errori comuni:

CodiceSignificatoCausa Tipica
ERR01.16"NON PREVISTO"Lunghezza dati errata (DESC non 20 char)
ERR01.06"COMANDO NON AMMESSO"Comando inviato fuori sequenza
NAKErrore genericoStampante non pronta o coperchio aperto

Mappatura Reparti Fiscali

Il driver supporta due modalita di mappatura degli articoli ai reparti della stampante:

  1. department_map: Mappa fiscalDepartmentId dell'articolo al numero di reparto (priorita alta)
  2. vat_map: Mappa l'aliquota IVA al numero di reparto ("22": 1, "10": 2, "4": 3, "0": 4)

Se un articolo ha fiscalDepartmentId presente nella department_map, viene usato quello. Altrimenti, il fallback e la vat_map.

Nota Importante per il Print Routing

Nel sistema di routing stampa della piattaforma, il controllo layoutId == null non deve mai essere usato per escludere le stampanti fiscali. Le stampanti fiscali non usano layout ESC/POS (il formato e diverso), quindi layoutId e sempre null per loro.

FAQ

D: Quale porta TCP usa la Epson FP-81II? R: La porta predefinita e 9100. E configurabile nelle impostazioni stampante dell'app.

D: Posso emettere uno scontrino di cortesia (non fiscale)? R: Si, usando i comandi gestionale (1063/1064/1065) invece dei comandi fiscali. Il driver espone il metodo printManagementDocument() per questo scopo.

D: Come gestisco i timeout di comunicazione? R: Il driver attende fino a 10 secondi per ogni risposta. Se la stampante non risponde, la transazione viene chiusa e il socket disconnesso. L'utente puo ritentare.

Vedi Anche

Questa pagina ti è stata utile?