Apéndice O — Impresoras fiscales¶
Diferencia vs caja registradora: la impresora fiscal tiene módulo certificado DGII que imprime ticket físico con timbre, independiente del e-CF electrónico.
Marcas autorizadas RD (verificar lista DGII): Bixolon SRP-275III, EPSON TM-T88VI-FC, BMC FP-100M.
O.1. Arquitectura QZ Tray¶
O.2. Firma de comandos QZ desde Django¶
def firmar_comando_qz(payload: str) -> str:
key = load_pem_private_key(open(settings.QZ_PRIVATE_KEY).read().encode(), None)
signature = key.sign(payload.encode(), padding.PKCS1v15(), hashes.SHA256())
return base64.b64encode(signature).decode()
O.3. Reporte Z desde Django¶
# Bixolon: comando hex específico
COMANDO_REPORTE_Z = b"\x1B\x69\x5A"
def emitir_z_caja(caja_id):
caja = CajaFiscal.objects.get(pk=caja_id)
cmd = base64.b64encode(COMANDO_REPORTE_Z).decode()
enviar_a_caja(caja, {"tipo": "comando_raw", "data": cmd})
Importante: Z físico debe coincidir con ZReport persistido. Desfases requieren intervención manual y quedan en AccountingAuditLog.