Saltar a contenido

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

Django ERP → HTTP → QZ Tray (agente cliente) → USB → Impresora fiscal
              e-CF API DGII (paralelo)

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.