“Cupones” Visanet
Visanet Uruguay pone a disposición de comercios e integradores (de aquí en mas llamados terceros) una nueva modalidad para compartir información adicional a la que es enviada en los documentos de liquidación y facturación. A diferencia de soluciones anteriores basadas en archivos, la información se disponibiliza por medio de API REST y herramientas de análisis de datos que permiten integración con los sistemas del tercero.
En vez de definir una API propietaria, Visanet decidió adoptar la API de Elasticsearch, una solución de código abierto con gran adopción en el mercado.
Permisos
Para poder acceder a la información el tercero deberá autenticarse en https://acceso.vnet.uy usando una cuenta existente o creando una nueva según en la documentación de acceso.uy. Luego de autenticado, el tercero se debe contactar con Visanet indicando las credenciales y solicitando permisos para el o los números de comercio de los cuales quiere obtener información; Visanet validará la solicitud y si corresponde asignará los permisos sobre indices cupones*
.
El rol asignado en Elasticsearch tiene implementado Document Level Security de forma cada tercero tendrá acceso a los documentos en los cuales el campo comercio.codigo_comercio
esté dentro de los comercios autorizados.
Consola para desarrolladores
Dentro de acceso.vnet.uy hay un link hacia un entorno Kibana que permite visualizar y hacer análisis con la información disponible.
En Kibana de Visanet también se tiene acceso a la consola para desarrolladores; herramienta importante durante la etapa de integración y la forma de obtener credenciales para acceder al endpoint publico (https://acceso-api.vnet.uy).
Por ejemplo, ejecutando GET _security/_authenticate
(ver documentación) se obtiene información de las credenciales del usuario.
En particular el contenido del array saml_groups
indica a que comercios se tiene acceso.
"saml_groups" : [
"02000043"
],
API REST
Para poder usar la API desde un sistema externo se debe solicitar una api_key
a Visanet y recibirá al e-mail registrado en https://acceso.vnet.uy la siguiente información:
{
"id" : "iiiiiiiiiiiiiiiiiiii",
"name" : "email@dominio_YYYMMDD-HHMMSS",
"api_key" : "kkkkkkkkkkkkkkkkkkkkkk"
}
Nota: la
api_key
es valida únicamente para los comercios a los que ya tiene permiso, si se agregan/quitan comercios es necesario generar otra clave.
De acuerdo a la documentación el valor de api_key
retornado puede usarse luego enviando un request con un Authorization header con un valor que tiene el prefijo ApiKey
seguido de credentials
, donde credentials
es la codificación base64 de id
y api_key
unidas por dos puntos (:
).
credentials=$(echo -n 'idididididididididid:kkkkkkkkkkkkkkkkkkkkkk' | openssl base64)
Luego se puede invocar la API por ejempo con curl; en este caso invocando al metodo count de la API de Elasticsearch
curl -s -H "Authorization: ApiKey $credentials" https://acceso-api.vnet.uy/cupones\*/_count | jq
Con el siguiente resultado:
{
"count": 7550,
"_shards": {
"total": 25,
"successful": 25,
"skipped": 0,
"failed": 0
}
}
Formato cupones
La información transaccional de cupones se almacena en documentos en indices mensuales llamados cupones-YYYY-MM
y los terceros pueden consultarlos de la forma que mejor entiendan usando la API de Elasticsearch.
La siguiente consulta devuelve únicamente un cupon:
curl -s -H "Authorization: ApiKey $credentials" https://acceso-api.vnet.uy/cupones\*/_search\?size\=1| jq
{
"took": 33,
"timed_out": false,
"_shards": {
"total": 25,
"successful": 25,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 7550,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "cupones-2019-01",
"_type": "doc",
"_id": "_________",
"_score": 1,
"_source": {
"@timestamp": "2019-01-09T03:00:00.000Z",
"indice": "cupones",
"transaccion": {
"importe_devolucion_impuesto": 5.48,
"autorizacion": "6____2",
"ticket": 545,
"lote": 72,
"propina": 0,
"producto": "VISA DEBITO",
"terminal": "________",
"origen": "Local",
"importe": 167,
"tipo_transaccion": "Compra",
"numero_factura": 5____1,
"devolucion_impuesto": 6,
"fecha_proceso": "2019-01-09T03:00:00.000Z",
"fecha_cupon": "2019-01-09T03:00:00.000Z",
"moneda": 858,
"sello": "visa",
"canal": "POS ONLINE",
"cuotas": 1,
"modo": "modo_51"
},
"comercio": {
"tipo_documento": "RUT Uruguay",
"numero_de_documento": 21__________,
"razon_social": "RAZON SOCIAL",
"codigo_comercio": "________",
"nombre_fantasia": "NOMBRE COMERCIO"
},
"@version": "1",
"datos_especiales": {
"iva_intereses_financiacion": 0,
"cupon": __________,
"intereses_financiacion": 0,
"nro_pedido": "",
"cashback": 0
},
"liquidacion": {
"retencion_leyes_equivalente_$": 0,
"arancel": 2.51,
"porcentaje_beneficio_leyes": 0,
"banco_acreditacion": "",
"retencion_leyes": 0,
"forma_pago": "D/E Std. Loc, 1 d háb, 1,50 %",
"propina_excedente": 0,
"fecha_pago": "2019-01-10T03:00:00.000Z",
"iva_arancel": 0.55,
"fecha_liquidacion": "2019-01-09T03:00:00.000Z",
"adquirente": "visanet",
"id": "E0109-P-1-00-00004606004-00",
"plan_venta": "DEBITO / ELECTRON"
}
}
}
]
}
}
Campos
campo | tipo | descripcion |
---|---|---|
transaccion.sello | Alfanumérico | Identificador del sello (Amex, Anda, Cabal, Creditel, MasterCard, Oca, Visa, etc). |
transaccion.terminal | Alfanumérico | Indentificador único de la terminal en la cual se realizó la transacción. |
transaccion.fecha_cupon | Fecha Unix TimeStamp | Fecha en la cual se realizó la transacción. |
transaccion.fecha_proceso | Fecha Unix TimeStamp | Fecha en la cual se procesó la transacción por el adquirente para su posterior liquidación |
transaccion.autorizacion | Alfanumérico | Código de aprobación de la transaccion recibido por el comercio. |
transaccion.numero_factura | Numérico Entero | Numero de comprobante fiscal enviado por el comercio asociado a la transacción. |
transaccion.moneda | Numérico Entero | Código numérico ISO de la moneda de la transacción (ejemplo $- 858 - U$S 840) |
transaccion.importe | Numérico punto flotante | importe total de la transacción (incluye monto por ej propina, cashback) |
transaccion.propina | Numérico punto flotante | Monto propina total ingresada por el comercio. |
transaccion.lote | Numérico Entero | Número de lote de la terminal al momento de hacer la transacción en caso que corresponda. |
transaccion.origen | Alfanumérico | Identificador del origen del medio de pago utilizado en la transacción (Ej Local/ Extranjera) |
transaccion.devolucion_impuesto | Numérico Entero | Identificador del beneficio fiscal otorgado a la transacción (xx: INDI / 00: NO Aplica Devolución / 99: No aplica campo) |
transaccion.importe_devolución_impuesto | Numérico punto flotante | Monto del befefico fiscal otorgado. |
transaccion.cuotas | Numérico Entero | Cantidad de cuotas ingresada por el comercio. |
transaccion.producto | Alfanumérico | Identificador del tipo del medio de pago (ej: Visa Debito, Cabal BPS Prestaciones, Lider, OCA BPS Prestaciones, Creditel Prepaga, Anda Alimentación |
transaccion.tipo_transaccion | Alfanumérico | Identificador del tipo de transacción (ej: Compra, Devolución, etc). |
transaccion.BIN | Numérico Entero | Primeros 6 dígitos del medio de pago utilizado en la transacción. |
transaccion.ultimos_4_Digitos | Numérico Entero | Ultimos 4 dígitos del medio de pago utilizado en la transacción. |
transaccion.canal | Alfanumérico | Medio por el cual se inició la transacción (ej: POS, Manual, e-commerce, Débito automático, etc). |
transaccion.ticket | Numérico Entero | Número de ticket dentro del lote(si corresponde). |
transaccion.modo | Alfanumérico | Modo de ingreso del medio de pago en la transacción (ej: manual, banda, chip, contactless,etc) |
transaccion.plan | Alfanumérico | Identificador del plan comercial ingresado por el comercio al momento de la transacción (ej: Común, Nafta, Agro, Especial,etc) |
comercio.nombre_fantasia | Alfanumérico | Nombre fantasía que identifica el comercio |
comercio.razon_social | Alfanumérico | Razón social que identifica el comercio. |
comercio.tipo_documento | Alfanumérico | Identificador del tipo de documento del contribuyente (ej: RUT, Cedula, Pasaporte). |
comercio.numero_de_documento | Numérico Entero | Número del documento del contribuyente. |
comercio.codigo_comercio | Numérico Entero | Identificador del comercio ante el adquierente. |
liquidacion.adquirente | Alfanumérico | Identificador del adquirente de la transacción. |
liquidacion.id | Alfanumérico | Identificador del proceso donde se liquida la transacción. |
liquidacion.fecha_liquidacion | Fecha Unix TimeStamp | Fecha en la cual se liquidó la transacción para su posterior pago. |
liquidacion.plan_venta | Alfanumérico | Identificador del grupo de condiciones comerciales para la liquidación. |
liquidacion.propina_excedente | Numérico punto flotante | Monto de la parte de la propina sobre la cual se calcula arancel (si corresponde). |
liquidacion.fecha_pago | Fecha Unix TimeStamp | Fecha en la cual se efectiviza el pago de la transacción al comercio. |
liquidacion.banco_acreditacion | Alfanumérico | Identificador de la institución financiera en la cual se acreditó el pago. |
liquidacion.retencion_leyes | Numérico punto flotante | Monto del beneficio fiscal en la moneda de la transacción (si corresponde). |
liquidacion.retencion_leyes_equivalente_$ | Numérico punto flotante | Monto del beneficio fiscal expresado en pesos uruguayos. |
liquidacion.porcentaje_beneficio_leyes | Numérico punto flotante | Puntos porcentuales del beneficio fiscal. |
liquidacion.arancel | Numérico punto flotante | Monto del arancel aplicado a la transacción por el adquirente (cobrado/devuelto). |
liquidacion.iva_arancel | Numérico punto flotante | Monto del iva del arancel aplicado a la transacción por el adquirente. |
liquidacion.forma_de_pago | Alfanumérico | Medio por el cual se efectiviza el pago al comercio (ej: Efectivo, Transferencia, Cheque, Retenido, Correo,etc) |
datos_especiales.IDWT | Alfanumérico | Código Aerolineas |
datos_especiales.cashback | Numérico punto flotante | importe del dinero entregado al th por parte del comercio |
datos_especiales.codigo_minorista | Aplica para terminales que manejan Mayoristas | |
datos_especiales.código_mayorista | Aplica para terminales que manejan Mayoristas | |
datos_especiales.intereses_financiacion | Numérico punto flotante | |
datos_especiales.Iva_intereses_financiacion | Numérico punto flotante | |
datos_especiales.fecha_entrega_cheque | Fecha Unix TimeStamp | |
datos_especiales.nro_pedido |