Introducción
El módulo Datáfono permite cobrar facturas con tarjeta usando un datáfono bancario físico, integrando el cobro directamente con la facturación de FactuPOS.
Cuando el cajero elige Tarjeta como medio de pago, FactuPOS le envía el monto al datáfono. El cliente acerca/inserta su tarjeta, el datáfono pide autorización al banco, y la respuesta vuelve a FactuPOS. Si el banco aprueba, la factura se completa automáticamente con el código de autorización como comprobante.
Componentes
| Componente | Dónde corre | Función |
|---|---|---|
| FactuPOS web | Browser de la caja | Llama al puente al procesar pago tarjeta |
| FactuposDatafono.exe (puente) | PC de la caja, escucha en 127.0.0.1:8765 | Traduce HTTP↔TCP/JSON al datáfono |
| Datáfono (Promerica/BAC/BNCR) | Físico, en la WiFi del comercio | Procesa la tarjeta, pide autorización al banco |
Arquitectura del puente
(browser)
(localhost:8765)
(LAN, ej. 192.168.100.197:8080)
El puente es necesario porque el navegador no puede abrir conexiones TCP directas al datáfono — solo habla HTTP/HTTPS. El puente local recibe HTTP, abre el socket TCP al POS, le manda el JSON y devuelve la respuesta.
Instalar FactuposDatafono
El puente se instala en cada PC de caja que cobre con tarjeta. Son 3 pasos: instalar el puente, autorizar el navegador, y configurar en FactuPOS.
1) Instalar el puente (1 clic)
- Descargar el instalador: FactuposDatafono-Setup.zip (descomprimir y ejecutar el .exe) (también en el menú Aplicaciones → Datáfono → Instalador).
- Ejecutarlo. Si Windows SmartScreen avisa: Más información → Ejecutar de todas formas.
- Deja el puente arrancando con Windows (oculto, con ícono en la bandeja) + desinstalador. No hay que copiar nada a mano.
- En la bandeja aparece el ícono de tarjeta: verde = corriendo, rojo = detenido (puede estar en la flechita ▲ de iconos ocultos).
CE · "Error en parametros para la transaccion = SALE" y la respuesta llega como
99 · "Respuesta BAC no interpretable".
Y en una caja instalada de antes, la 0.4.5 tampoco alcanza: quedó localhost escrito en su archivo de
configuración, ese archivo manda sobre el valor nuevo, y el cobro sigue fallando con
connect ECONNREFUSED ::1:808 — Windows entiende localhost como IPv6 y el SDK del banco solo atiende IPv4.
La 0.4.6 corrige ese archivo sola al arrancar.
Se comprueba abriendo http://127.0.0.1:8765/salud en el navegador de la caja (debe decir "version":"0.4.6").
Si dice menos, descargar
la actualización a 0.4.6
y correr ACTUALIZAR-como-administrador.bat con clic derecho → Ejecutar como administrador. No hay que desinstalar nada.
FactuposDatafono.exe con doble clic. El puente es un programa de consola:
abierto directamente, Windows le pone una ventana negra, y esa ventana es su dueña — cuando alguien la cierra se apaga el puente
y la caja deja de cobrar con tarjeta. Normalmente no hace falta abrirlo a mano (arranca solo con Windows); si hace falta, use el acceso directo
«FactuposDatafono» del menú Inicio, o el «Iniciar FactuposDatafono» de la carpeta del programa.
Ambos pasan por FactuposDatafono-silencioso.vbs, que lo abre oculto y deja solo el icono en la bandeja.
Si a una caja ya le está pasando, corra el paquete «1b · ACTUALIZAR»: lo arranca oculto, corrige el arranque automático y crea el acceso directo.
FactuposDatafono.exe) — Windows no sobrescribe un .exe en uso. Desde v0.4.3, si se lanza dos veces, la segunda copia se cierra sola (sin el error EADDRINUSE).
2) Autorizar Chrome/Edge — OBLIGATORIO desde Chrome 142
Chrome/Edge 142+ bloquean que la web de FactuPOS hable con el puente local 127.0.0.1 (error Failed to fetch / Permission was denied … loopback), aunque el puente esté corriendo. Hay que autorizarlo:
- Descargar Permitir-Datafono-Chrome.reg (clic derecho → Guardar enlace como, que termine en
.reg). - Doble clic → Sí (edita el registro; puede pedir admin).
- Cerrar Chrome del todo y reabrir.
- Verificar en
chrome://policy: debe aparecerLocalNetworkAccessAllowedForUrlscon tus dominios.
.reg es mejor: es permanente y se aplica a todas las cajas (o por GPO en dominio).
3) Configurar en FactuPOS (DTF-001)
Menú Configuración → General → Datáfono: Estado Habilitado, banco, URL del puente http://127.0.0.1:8765, e IP / puerto / Merchant ID del datáfono. Detalle en Configurar (DTF-001).
Si el datáfono es BAC Credomatic: son 13 pasos, no 3
BAC no se instala como los demás. Su pinpad es USB (no va en la red) y necesita, además del puente nuestro, el SDK del banco corriendo en la misma PC. El orden es obligatorio:
| # | Qué se hace | ¿Admin? |
|---|---|---|
| 1 | Conectar el pinpad por USB | — |
| 2 | Instalar el driver Ingenico (IngenicoUSBDrivers_3.36_setup_SIGNED.exe) | Sí |
| 3 | Comprobar el driver y anotar el número de COM | — |
| 4 | Descomprimir el SDK de BAC en C:\ → queda en C:\CSP-SDK-BAC-3.12.3\CSP SDK Integracion EMV 3.12.3 v1\ | — |
| 5 | Archivo hosts (solo si BAC lo indica) | Sí |
| 6 | Configurar el SDK — CSP.EMV.DeviceSetting.exe | — |
| 7 | Bajar las llaves del banco — CSP.EMV.DownloadManager.exe | — |
| 8 | Arrancar el motor — BacCredomatic.httpRunSDK.exe | Sí |
| 9 | Instalar el puente FactuposDatafono (mínimo 0.4.6) | Sí |
| 10 | Autorizar Chrome (Permitir-Datafono-Chrome.reg) | — |
| 11 | Configurar en FactuPOS (DTF-001) | — |
| 12 | Cobro de prueba y anulación | — |
| 13 | 🏁 Reiniciar la PC y comprobar que cobra sin abrir nada | — |
CSP.EMV.DeviceSetting (configurar) → CSP.EMV.DownloadManager (baja las llaves; la ventana se cierra sola) →
BacCredomatic.httpRunSDK (como administrador). Este último no abre ninguna ventana: parece que no hizo nada,
pero es el motor del cobro y tiene que quedar corriendo. ⚠ Abrirlo con doble clic NO sirve (comprobado en campo): sin
permisos de administrador arranca igual de mudo y la caja no cobra. Se comprueba con
netstat -ano | findstr LISTENING | findstr :808 — no con tasklist, que solo dice que el programa
está abierto y no que haya tomado el puerto.
BacCredomatic.httpRunSDK.exe no se instala como servicio, así que al apagar o reiniciar la PC se muere y la caja
amanece sin cobrar. Y no sirve la carpeta de Inicio (shell:startup): como el programa necesita permisos de
administrador, Windows omite al arrancar los accesos directos de esa carpeta que piden elevación.
Se deja con el Programador de tareas, marcando «Ejecutar con los privilegios más altos» y disparador
«Al iniciar sesión».
⭐ La forma fácil: menú Aplicaciones → Datáfono → «1c · BAC · Que el motor arranque con Windows» — descomprimir y correr
ARRANQUE-AUTOMATICO-como-administrador.bat con clic derecho →
Ejecutar como administrador. Busca el motor solo, crea la tarea, lo arranca y comprueba que quedó escuchando.
🥤 Si la hace a mano, el detalle que la rompe: el motor carga sus DLLs,
LocalConfiguration\apiParam.dat y
Logs\ de su propia carpeta, y una tarea programada arranca parada en C:\Windows\System32. Hay que llenar
el campo «Iniciar en (opcional)» con la carpeta del SDK, o la tarea queda creada y el motor igual no arranca.
En una línea, desde un cmd como administrador:
schtasks /create /tn "BAC httpRunSDK" /tr "\"C:\CSP-SDK-BAC-3.12.3\CSP SDK Integracion EMV 3.12.3 v1\BacCredomatic.httpRunSDK.exe\"" /sc onlogon /rl highest /fSe comprueba reiniciando y corriendo
netstat -ano | findstr LISTENING | findstr :808. Paso 8 del manual.
🚩 La prueba que cierra la instalación es el Paso 13: reiniciar y que la caja cobre sin que nadie abra nada.
Después del reinicio, netstat -ano | findstr LISTENING | findstr ":808 :8765" tiene que devolver dos líneas
— el motor del banco y el puente. Un cobro que funciona con los programas abiertos a mano no prueba que la caja quedó instalada.
🧤 Ojo: la tarea es «Al iniciar sesión», no «al prender la PC»: si la caja queda en la pantalla de inicio de sesión,
el motor del banco todavía no arrancó.
Los otros tres (Background, InteropEXE, PCLDriver) no se ejecutan a mano nunca.
A2) — anexo 4 del manual.
DeviceSetting: los entrega BAC con el kit. No es el de Windows, no es el de FactuPOS y no se inventa.
Y son distintos del «usuario de conexión» que se digita adentro, en la pestaña End Points. Sin ellos no se pasa de esa pantalla: pedirlos a Soporte Real (2229-0303) antes de empezar.
El paso a paso completo, con qué hacer en cada pantalla y qué hacer si algo falla, está en el
Manual de Instalación BAC Credomatic (INSTALACION-BAC.md), que viene junto con el SDK en el paquete privado del banco.
Ubicaciones
| Ejecutable | C:\Program Files\FactuposDatafono\ |
| Configuración | %APPDATA%\FactuposDatafono\config.json |
| Logs por día | %APPDATA%\FactuposDatafono\logs\YYYY-MM-DD.log |
| Log en vivo | http://127.0.0.1:8765/monitor (o tray → Diagnosticar) |
Tray icon
Al lado del reloj de Windows aparece un icono. Click derecho abre el menú:
| Opción | Acción |
|---|---|
| ● Servicio corriendo / detenido | Estado del puente. El ícono es verde si responde, rojo si se cae. |
| Diagnosticar | Prueba el puente + el datáfono y abre el log en vivo (/monitor) |
| Reiniciar servicio | Cierra y vuelve a levantar el HTTP server interno |
| Abrir configuración… | Abre DTF-001 en el navegador |
| Ver log en vivo… | Abre http://127.0.0.1:8765/monitor (consola en tiempo real) |
| Abrir carpeta de logs | Abre %APPDATA%\FactuposDatafono\logs |
| Abrir carpeta config | Abre %APPDATA%\FactuposDatafono |
| Cerrar | Detiene el puente y cierra la app |
Configurar (DTF-001)
Acceso: Configuración → Datáfono o Herramientas → Datáfono → Configurar Datáfono.
Sección "Configuración"
| Campo | Valor | Notas |
|---|---|---|
| Habilitado | ☑/☐ | Cuando se desactiva, FactuPOS factura tarjeta como antes (sin datáfono) |
| Banco / Datáfono | Banco Promerica | BAC y BNCR pendientes |
| URL del puente local | http://127.0.0.1:8765 | El default casi nunca cambia |
| IP del datáfono | ej. 192.168.100.197 | IP estática asignada al POS en la WiFi del comercio |
| Puerto | 8080 | Puerto TCP en el que el POS escucha (configurado en Polaris) |
| Merchant ID | ej. 011016026 | Lo asigna Polaris/Promerica al activar el comercio |
| Timeout de transacciones (ms) | 130000 | 2 min + margen sobre el timeout del POS |
config.json del puente.
Probar puente
Verifica que el ejecutable está corriendo y responde HTTP.
- Asegurarse de que
FactuposDatafono.exeestá abierto - En DTF-001, click Probar puente
Resultados posibles
| Mensaje | Significado |
|---|---|
| OK Puente vX.X.X alcanzable · Se usará para transacciones: POS … · merchant … | Todo listo para probar el POS |
| ERROR Failed to fetch / Puente no responde | Falta el permiso de Chrome 142+ (aplicar el .reg, ver Instalar paso 2), o el puente no está corriendo, o abrís DTF-001 desde otra PC |
Probar conexión POS
Hace un TCP probe al datáfono — abre el socket sin enviar ninguna transacción. Sirve para confirmar que el POS está prendido, en MODO CAJA y escuchando en el puerto configurado.
- Llenar IP, Puerto y Merchant ID
- Click Guardar
- Click Probar puerto POS
| Mensaje | Significado | Acción |
|---|---|---|
| OK 192.168.100.197:8080 responde en 35ms — puerto abierto | POS listo para transacciones | Continuar con cobro de prueba |
| ERROR ECONNREFUSED | POS está en la red pero NO está en MODO CAJA o no escucha en ese puerto | Pedir al banco activar MODO CAJA en Polaris |
| ERROR ETIMEDOUT / no alcanzable | POS apagado, en otra red, o IP equivocada | Verificar WiFi y ping al POS |
telnet 192.168.100.197 8080 o ping 192.168.100.197. Probar puerto POS hace lo mismo pero desde la misma página.
Cobrar prueba
Una vez puente OK + POS responde, hacer un cobro real sin afectar facturación:
- En DTF-001, sección Pruebas de transacciones, ingresar un monto pequeño (ej.
100) - Click Cobrar prueba
- El POS muestra "Acerque/inserte/pase su tarjeta"
- El cajero pasa una tarjeta real (puede ser la propia, se anula después)
- Resultado en pantalla:
- APROBADA con
auth_code,ticket_number,reference_number, etc. - RECHAZADA con
rsp_codey mensaje del banco
- APROBADA con
ticket_number que devolvió el POS.
Anular / Devolver / Reimprimir
Las tres operaciones requieren el ticket_number (número de boleta) que devolvió el POS al cobrar.
Anular
Solo funciona el mismo día y antes del cierre de lote. Cancela completamente la transacción.
Devolver
Funciona incluso después del cierre. Procesa un reembolso al cliente. Acepta monto parcial (no necesariamente el total).
Reimprimir
Imprime una copia del voucher. Solo si la prioridad de impresión es del POS o de la caja según configuración Polaris.
| Operación | Cuándo | Requiere |
|---|---|---|
| Anular | Mismo día, pre-cierre | Ticket # |
| Devolver | Cualquier momento | Ticket # + monto |
| Reimprimir | Mismo día (post-cierre suele fallar) | Ticket # |
Cierre y reportes
El Cierre de lote (Z bancario) consolida todas las transacciones del día y las envía al banco para liquidación.
| Botón | Acción |
|---|---|
| Cierre de lote | Cierra el día — solo si Polaris tiene desactivado el cierre automático |
| Reporte cierre | Resumen actual sin cerrar (preview) |
| Último cierre | Detalle del último cierre ejecutado |
Bancos soportados
| Banco | Estado | Datáfono | Protocolo |
|---|---|---|---|
| Banco Promerica | Activo | NEW9220 / NEW9310 (WPOSS) | TCP + JSON |
| BAC Credomatic | En certificación | Ingenico Lane/3600 (USB) | SDK CSP Authorizer (HTTP + JSON) |
| Banco Nacional | Pendiente | — | — |
Para activar un banco nuevo se requiere: documentación del protocolo del banco, plugin nuevo en el puente y carpeta dedicada en /datafono/codigo/<banco>/.
EMVFAC01 de los ejemplos es solo de pruebas: con ese el datáfono no cobra de verdad. Se solicita a BAC Credomatic; dentro del sistema queda explicado en Configuración → Ayuda Configurar Datáfono (CF-016) → pestaña BAC Credomatic.
Facturación con datáfono
Una vez activado el datáfono en DTF-001, los 4 módulos de facturación llaman al datáfono automáticamente cuando el cajero elige Tarjeta como medio de pago:
- Factura Desktop
- FastPOS
- FastPOS 2
- Factura Móvil
Flujo del cobro
- Cajero arma la factura
- Click en Tarjeta (medio de pago 02) o teclas equivalentes
- FactuPOS muestra "Cobrando con datáfono..."
- El datáfono pide la tarjeta al cliente
- Si el banco aprueba:
- FactuPOS guarda el pago con
auth_code|ticket_number|reference_number|****1234como comprobante - Se cierra normal la factura
- FactuPOS guarda el pago con
- Si el banco rechaza:
- FactuPOS muestra mensaje de error y NO guarda el pago
- El cajero puede reintentar o cobrar con otro medio
Listado de movimientos (DTF-002)
Toda transacción que pasa por el datáfono se registra automáticamente en la tabla BancoMovimientos con todos los campos del POS (ticket, autorización, referencia, EMV, tarjeta enmascarada, etc.). El módulo DTF-002 permite consultarlas, reimprimir voucher, anular y verificar contra el POS.
Filtros disponibles
| Filtro | Uso |
|---|---|
| Desde / Hasta | Rango de fechas (default hoy → hoy, editable) |
| Banco | Promerica, BAC, BNCR… |
| Merchant | Se llena solo con los datáfonos (merchants) que aparecen en el resultado. Filtra la lista en pantalla al instante y, además, decide el alcance de la impresión (ver "Imprimir detalle / Cierre de lote"). |
| Aprobada | Sí / No / Todas |
| Documento | Consecutivo de la factura |
| Ticket # | Número que devuelve el POS (ej. 000183) |
| Diagnósticos | Por defecto Ocultar esconde consultas internas con monto 0 (PRUEBA COMUNICACION, ULTIMA TRANSACCION, CIERRE, REPORTE AUDITORIA…). Cambiar a Incluir para auditar todo lo que envió la caja al POS. |
Acciones por movimiento
Sobre cada cobro aprobado de tipo COMPRA:
| Botón | Acción |
|---|---|
| Detalle | Muestra el JSON crudo del movimiento (datos del POS, EMV, holder, raw request/response). |
| Imprimir | Reimprime el voucher en la impresora de comprobantes vía cola WebSocket. Cantidad de copias según Copias Voucher de la config. |
| Consultar | Pregunta al POS si el ticket sigue activo. Lanza REIMPRESION + REPORTE AUDITORIA en paralelo (con timeouts 15s/10s para no quedar colgado). Útil para verificar antes de anular. |
| Anular | Llama a ANULACION del POS para el ticket. Si aprueba, marca el movimiento original como anulado. Si el POS responde "Transacción ya anulada" también se actualiza el estado en BD (no se puede tener dos cobros activos del mismo ticket). Solo se habilita el mismo día del cobro: en días anteriores el botón sale gris (deshabilitado), porque el lote del POS ya cerró y la anulación debe hacerse como devolución. |
AnuladoPorId no haya quedado seteado. Esto cubre casos donde la anulación se ejecutó desde el POS directamente.
Consultar — qué interpreta cada respuesta
- REIMPRESION aprobada → el ticket existe en el POS (puede estar activo o anulado, REIMPRESION no diferencia).
- REPORTE AUDITORIA aprobado con el ticket apareciendo 1 vez → activo. Apareciendo 2+ veces → fue anulado (cobro + anulación).
- REPORTE AUDITORIA con
rsp_code 99→ la transacción no está habilitada en Polaris. Tip: usar el botón Anular; si el POS dice "TRANSACCION YA ANULADA" entonces ya estaba anulada.
Imprimir detalle / Cierre de lote
Si la estación tiene un datáfono asignado, en la parte superior aparecen dos botones de color (sólo cuando hay datáfono; en cajas de solo contado no se muestran):
| Botón | Acción |
|---|---|
| Imprimir detalle | Solo imprime el detalle del lote (compras, anuladas y totales) desde lo registrado en FactuPOS. No toca el datáfono ni cierra nada — es seguro usarlo cuantas veces se quiera. |
| Cierre de lote | Ejecuta el cierre real en el datáfono (liquida el día con el banco) y luego imprime el detalle. Es irreversible y normalmente se hace una vez al día. |
Solución de problemas
"Failed to fetch" / "Permission was denied … loopback"
Causa #1 (Chrome/Edge 142+): el navegador bloquea que la web toque 127.0.0.1 aunque el puente esté corriendo. Se ve en la consola (F12) como blocked by CORS policy: Permission was denied … loopback address space.
- Aplicar Permitir-Datafono-Chrome.reg (ver Instalar, paso 2) y reiniciar el navegador.
- Verificar en
chrome://policyque aparezcaLocalNetworkAccessAllowedForUrls.
Causa #2: el puente no está corriendo (o abrís DTF-001 desde otra PC).
- Verificar el ícono verde en la bandeja (puede estar en la flechita ▲). Si no está, reinstalá o arrancá el puente.
- Probar en el browser (nueva pestaña):
http://127.0.0.1:8765/saluddebe responder JSON con"version". - Si
EADDRINUSEen el log: había otra instancia. Desde v0.4.3 se resuelve solo; en versiones viejas,taskkill /F /IM FactuposDatafono.exey arrancar de nuevo.
"ECONNREFUSED" al probar el POS
Causa: el datáfono está prendido y en la red, pero NO está escuchando en el puerto.
- Verificar con
ping <IP del POS>que la red funciona - Pedir a Promerica que active MODO CAJA en Polaris para tu terminal
- Confirmar el puerto correcto (default 8080)
"rsp_code: 02" Transacción no permitida
Causa: el Merchant ID es incorrecto, o la transacción no está habilitada en Polaris.
- Confirmar el Merchant ID con el banco
- Pedir habilitar todas las transacciones en plantilla TRANSACCIONES de Polaris (COMPRA NORMAL, ANULACION, DEVOLUCIONES, REIMPRESION, CIERRE, ULTIMA TRANSACCION, PRUEBA COMUNICACION, ESTADO DE CONEXION)
El POS está en la misma red pero ping no responde
Causa: el POS quedó en una red diferente (típicamente 4G del POS, no la WiFi del comercio).
- Verificar con
ipconfigen la PC y el dato de IP del POS (boleta de inicialización del POS) - Si las redes son distintas, conectar el POS a la WiFi del comercio
- Asignar IP estática del POS dentro del rango de la WiFi (ej.
192.168.100.x)
Timeout 130000ms en cobro
Causa: el POS recibió pero no respondió (tarjeta sin firmar, cliente abandonó, problema de comunicación con el banco).
- Antes de reintentar, click Última transacción — si aparece la transacción, el banco SÍ aprobó (no reintentar para evitar doble cobro)
- Si no aparece nada en última transacción, sí se puede reintentar
Logs detallados
Cada acción del puente se registra en %APPDATA%\FactuposDatafono\logs\YYYY-MM-DD.log. Acceso rápido desde el tray icon: Ver logs…