0% encontró este documento útil (0 votos)
21 vistas167 páginas

Guía Del Integrador

El documento detalla las actualizaciones y cambios en las versiones del software Ágora, incluyendo mejoras en la importación y exportación de datos, correcciones de errores y nuevas propiedades. Se describen los servicios de integración con otras aplicaciones, así como el formato y las secciones del fichero de importación de datos. Además, se explican las configuraciones para la importación y exportación automática, junto con ejemplos de estructuras XML y JSON para facilitar su uso.

Cargado por

vitali
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
21 vistas167 páginas

Guía Del Integrador

El documento detalla las actualizaciones y cambios en las versiones del software Ágora, incluyendo mejoras en la importación y exportación de datos, correcciones de errores y nuevas propiedades. Se describen los servicios de integración con otras aplicaciones, así como el formato y las secciones del fichero de importación de datos. Además, se explican las configuraciones para la importación y exportación automática, junto con ejemplos de estructuras XML y JSON para facilitar su uso.

Cargado por

vitali
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Lista de Cambios

Versión 5.0.0
▪ En esta versión se permiten importar y exportar formatos de venta. Es compatible con
versiones anteriores excepto porque ahora al exportar añadidos de un producto en el
nodo Addin se está indicando el Id del añadido en un atributo SaleFormatId en lugar
de ProductId. A la hora de importar se permite usar tanto SaleFormatId como
ProductId para mantener compatibilidad con versiones antiguas.

Versión 5.0.2
▪ Corregido error al exportar datos en formato JSON. Los valores de tipos enumerados se
enviaban en formato numérico en lugar de en formato texto, tal y como se recogía en la
documentación.

Versión 5.0.4
▪ Corregido error al intentar importar documentos con añadidos cuando el id del producto
añadido no coincidía con el id del formato de venta.

Versión 5.0.7
▪ Se permite importar y exportar mútiples grupos de añadidos para los productos. Se
mantiene la compatibilidad con el formato anterior, aunque pasa a considerarse
obsoleto y en un futuro desaparecerá.

Versión 5.0.8
▪ Corregido error al exportar productos. Se estaba exportando mal el valor de
PreparationOrder (se estaba enviando dos veces el valor del PreparationType).

Versión 5.0.9
▪ Desaparece la propiedad ShowInKitchenDisplays de PreparationType porque ya no
existe en Ágora. A partir de esta versión Ágora detecta automáticamente si se debe
enviar a un tipo de preparación o no a los monitores basándose en la existencia de
monitores que estén configurados para mostrar ese tipo de preparación asociados al
punto de venta que generó la preparación.

▪ Al importar en un servidor de centralización un documento (pedido o albarán) y


modificar su estado, se propaga el cambio a los clientes de centralización para que no
puedan actualizar más el documento.

Versión 5.1.0
▪ Aparece la propiedad Notes en las líneas de pedidos a proveedor, albaranes de entrada
y facturas de compra.

Guía del Integrador 2 Versión 5.1.0


▪ Cambiado valor OnSelectTable del importador de Centros de Venta a OnOpenDocument

Guía del Integrador 3 Versión 5.1.0


Servicios de Integración con Otras
Aplicaciones

Los servicios de integración de Ágora le permiten traspasar información entre Ágora y otras
aplicaciones, como por ejemplo un ERP o un programa de contabilidad. Para poder utilizar estos
servicios deberá activar una licencia para el "Módulo de Servicios de Integración" desde la
opción Ayuda -> Activar Licencia de Módulo en el Monitor de Ágora:

Guía del Integrador 4 Versión 5.1.0


Después, deberá activar el módulo de servicios de integración desde la opción Herramientas ->
Activar Módulos Adicionales :

Tras activar el módulo de servicios de integración, podrá usar la herramienta de integración de


Ágora Integration Services para importar y exportar datos en formato XML. Los servicios de
integración de Ágora se controla con la aplicación de línea de comandos ais.exe que encontrará
en la carpeta de instalación de Ágora. Las opciones de esta aplicación son:

▪ --import <file_name>: Realiza la importación de los datos incluidos en el fichero


indicado como parámetro

▪ --export <file_name> [fecha en formato aaaa-mm-dd]: Exporta los datos


generados por Ágora y los almacena en el fichero indicado. Si no se especifica ninguna
fecha, se exportarán todos los datos correspondientes a la fecha de negocio del día
actual. Si se indica una fecha, se exportarán los datos de la fecha indicada.

▪ --export-master <file_name> [tipos de datos a exportar]: Exporta los datos


maestros registrado en Ágora y los almacena en el fichero indicado. Si no se especifica
ningún tipo de datos a exportar, se exportarán todos los datos que pueden ser
importados en Ágora. Si desea limitar el tipo de datos a exportar, puede introducir
uno o más de los siguientes tipos separados por comas:

▪ Series: series

▪ Customers: clientes

▪ Users: usuarios

Guía del Integrador 5 Versión 5.1.0


▪ Vats: tipos de impuestos

▪ PaymentMethods: formas de pago

▪ PriceLists: tarifas

▪ SaleCenters: centros de venta

▪ Families: familias

▪ Products: productos

▪ Menus: menús

▪ Offers: promociones

▪ Warehouses: almacenes

▪ Stocks: stocks actuales


Si, por ejemplo, desea exportar únicamente usuarios y clientes, debería utilizar la línea
de comandos
ais.exe --export-master datos.xml Users,Customers.

▪ --validate <file_name>: Valida que el formato del fichero que se va a importar es


correcto, indicando los posibles errores encontrados.

El formato de los ficheros de importación y exportación se detalla en las siguientes secciones de


este manual.

Al ejecutar la aplicación se mostrará en pantalla el resultado de la operación. Además, el código


de retorno del proceso indicará el resultado de la operación:

▪ 0: Ejecución completada con éxito

▪ -1: Parámetros de línea de comandos incorrectos

▪ -2: Error al realizar exportación de ventas

▪ -3: Error al realizar importación

▪ -4: Error al realizar validación

▪ -5: Error al realizar exportación de datos maestros

Importación y Exportación Automática


Si lo desea, puede configurar el módulo de servicios de integración para que el proceso de
importación y exportación de datos se realice de forma automática. Para ello deberá activar las
opciones correspondientes al configurar el módulo de servicios de integración.

Cuando la exportación automática está habilitada, al emitir un factura, realizar un cargo en


cuenta, cancelar un cargo en cuenta, crear un movimiento de caja, cerrar una caja o efectuar
un cierre de sistema, se generará automáticamente un fichero con la información relativa al
evento en la carpeta indicada. El formato de los documentos generados es el mismo que cuando
se realiza una exportación manual utilizando ais.exe.

Guía del Integrador 6 Versión 5.1.0


Cuando se activa la importación automática, Ágora estará continuamente monitorizando el
contenido de la carpeta indicada y, tan pronto como encuentre ficheros con la extensión .xml,
intentará importarlos. Si la importación se produce con éxito, se cambiará la extensión del
fichero a .ok, y si se produce algún error, la extensión se cambiará a .error.

En caso de que se produzca algún error al importar o exportar, Ágora lo reflejará en el log del
servidor.

Formato de fichero de importación de datos


El fichero de importación de datos de Ágora permite especificar gran parte de la información
necesaria para trabajar con Ágora, incluyendo familias, productos, centros de venta, usuarios,
precios y clientes.

Al procesar el fichero de importación, Ágora procesará cada registro secuencialmente realizando


las siguientes acciones:

▪ Si no existe un registro en Ágora con el mismo Id que el registro procesado, se creará


el registro en Ágora.

▪ Si ya existe un registro en Ágora con el mismo Id que el registro procesado, se


actualizará la información de ese registro.

▪ Si el registro procesado incluye un valor para el campo fecha de borrado,


DeletionDate, el registro se considerará borrado y será marcado como tal en Ágora. Si
no incluye ese campo se considerará que el registro está activo y, en caso de que
estuviera borrado en Ágora, se volverá a activar.

Ágora no realizará ninguna acción sobre la información existente en Ágora que no aparezca en
el fichero de datos importados. Es decir, si por ejemplo se crea un producto en Ágora y luego el
producto no aparece en el fichero, el producto seguirá existiendo en Ágora.

Este sistema permite mucha flexibilidad, porque es posible realizar importaciones totales o
parciales. Cuando se realiza la puesta en marcha de la aplicación se puede enviar un fichero con
la base de datos completa y, a partir de ese momento, enviar sólo en el fichero aquellos
registros que sea necesario crear, modificar o eliminar. Ante cualquier problema, siempre se
puede volver a enviar la base de datos completa.

La información recibida en el fichero siempre sobreescribe la información existente en Ágora.


Si, por ejemplo, se modifica un precio en Ágora y luego se vuelve a importar un fichero con el
precio original, se perderá la modificación realizada en Ágora.

El tratamiento de los campos opcionales, excepto en el caso de la fecha de borrado que se ha


explicado anteriormente, será el siguiente: Si el campo no aparece en el fichero XML, se
mantendrá el valor que exista actualmente en la base de datos de Ágora. Si el campo aparece
en el fichero XML, se sobreescribirá el valor de Ágora con el valor indicado, incluso si éste es
vacío (siempre que sea posible). Por ejemplo, si el campo FamilyId de un producto no aparece
en el fichero, se mantendrá la familia asociada actualmente a ese producto. Si el campo

Guía del Integrador 7 Versión 5.1.0


FamilyId contiene un Id de familia, se asociará ese producto a la familia indicada, y si el campo
FamilyId está vacío, se quitará la familia que tuviera asociada el producto.

Hay ocasiones en que un campo es opcional pero no puede dejarse vacío. O bien aparece en el
XML con un valor válido, en cuyo caso se sobreescribirá el valor actual en Ágora, o bien no
aparece en el XML, en cuyo caso se mantiene el valor actual de Ágora. Esto ocurre, en general,
con campos que no permiten valores "nulos" o vacíos. Por ejemplo, el descuento de un cliente
puede indicarse con un valor numérico válido (incluyendo 0) para actualizarlo en Ágora, o puede
no indicarse para mantener el valor actual, pero no puede indicarse con un valor vacío porque
no es un valor válido para un número.

Recuerde que cuando haya generado el fichero de importación de datos, puede


utilizar la opción de validación de fichero de la herramienta ais.exe para
comprobar su validez.

El fichero de importación de datos consta de varias secciones como puede comprobar en el


fichero de ejemplo incluido junto a este manual. Debe respetarse el orden en que aparecen en
el fichero.

XML:

Guía del Integrador 8 Versión 5.1.0


<?xml version='1.0' encoding='utf-8'?>
<Import>
<Users>
<!-- Usuarios -->
</Users>
<Customers>
<!-- Clientes -->
</Customers>
<Series>
<!-- Series -->
</Series>
<PaymentMethods>
<!-- Formas de Pago -->
</PaymentMethods>
<Vats>
<!-- Tipos Impuestos -->
</Vats>
<PreparationTypes>
<!-- Tipos de Preparación -->
</PreparationTypes>
<PreparationOrders>
<!-- Órdenes de Preparación -->
</PreparationOrders>
<Families>
<!-- Familias -->
</Families>
<PriceLists>
<!-- Tarifas -->
</PriceLists>
<SaleCenters>
<!-- Centros de Venta -->
</SaleCenters>
<Products>
<!-- Productos -->
</Products>
<Menus>
<!-- Menús -->
</Menus>
<SalesOrders>
<!-- Pedidos -->
</SalesOrders>
<DeliveryNotes>
<!-- Albaranes -->
</DeliveryNotes>
<Invoices>
<!-- Facturas -->
</Invoices>
<Suppliers>
<!-- Proveedores -->
</Suppliers>

Guía del Integrador 9 Versión 5.1.0


</Import>

JSON:

{
"Users": [],
"Customers": [],
"Series": [],
"PaymentMethods": [],
"Vats": [],
"PreparationTypes": [],
"PreparationOrders": [],
"Families": [],
"PriceLists": [],
"SaleCenters": [],
"Products": [],
"Menus": [],
"SalesOrders": [],
"DeliveryNotes": [],
"Invoices": [],
"Suppliers": []
}

En cada sección del fichero habrá información que sea obligatoria e información opcional. Los
campos opcionales ni siquiera es necesario que aparezcan en el documento XML.

Utilizando la versión de demostración de Ágora es posible realizar pruebas de


importación y exportación completas. Le recomendable encarecidamente que
utilice dicha versión para poder generar datos de ejemplo con los diferentes casos
que se pueden presentar y así tener una visión más completa del proceso de
exportación y importación.

Los campos numéricos utilizan como separador de decimales el punto '.' y NO


utilizan separador de millares.

Los campos de tipo fecha utilizando como formato aaaa-mm-dd. Si además


incluye la hora, el formato es aaaa-mm-ddThh:mm:ss, por ejemplo
2012-01-29T21:00:54.

Series
Las series de documentos se indican dentro del elemento <Series> en etiquetas específicas
para cada serie:

Guía del Integrador 10 Versión 5.1.0


XML:

<Series>
<BasicInvoice Name="T" LastNumber="0"/>
<StandardInvoice Name="F" LastNumber="99"/>
<BasicRefund Name="TD" LastNumber="0"/>
<StandardRefund Name="FD" LastNumber="0"/>
<DeliveryNote Name="ALB" LastNumber="80"/>
<SalesOrder Name="PED" LastNumber="91"/>
</Series>

JSON:

{
"Series": {
"BasicInvoice": {
"Name": "T",
"LastNumber": 0
},
"StandardInvoice": {
"Name": "F",
"LastNumber": 99
},
"BasicRefund": {
"Name": "TD",
"LastNumber": 0
},
"StandardRefund": {
"Name": "FD",
"LastNumber": 0
},
"DeliveryNote": {
"Name": "ALB",
"LastNumber": 80
},
"SalesOrder": {
"Name": "PED",
"LastNumber": 91
}
}
}

Todas las series son opcionales, si no incluye una serie, no será modificada en Ágora. Las series
que puede indicar son:

▪ BasicInvoice: facturas simplicadas.

▪ StandardInvoice: facturas normales.

▪ BasicRefund: facturas simplificadas de devolución.

Guía del Integrador 11 Versión 5.1.0


▪ StandardRefund: facturas de devolución normales.

▪ DeliveryNote: albaranes/cargos en cuenta.

▪ SalesOrder: pedidos/reservas.

Para cada serie, podrá indicar:

Name [Obligatorio]
Nombre de la serie.

LastNumber
último documento generado en esa serie. El siguiente documento que se genere en esa
serie tendrá como número LastNumber+1.

Si no se indica LastNumber y la serie no existía, el primer documento que se genere tendrá


como número 1. Si la serie ya existía, se respetará el orden que tuviera. En caso de que la serie
ya exista y se indique como LastNumber un valor inferior al actual, se generará un error para
evitar crear documentos con número duplicado.

Nota: la importación de series sólo está disponible para instalaciones de tipo


independiente.

Usuarios
Los usuarios se indican dentro del elemento <Users> en sucesivos elementos <User>:

XML:

Guía del Integrador 12 Versión 5.1.0


<Users>
<User Id="10" Name="Wilson Fernandez"
Password="1111"
SmartphonePassword=""
WebAdminPassword="154!Koaxo1{"
ButtonText="Wilson F." Color="#34112a" CardNumber="#455232"
Profile="Admin"
ShowInClockings="true"
Priority="2"
SocialSecurityNumber="354879894614"
Nif="31183150A"
Telephone="687459813"
Email="[email protected]"
City="Getafe"
Region="Madrid"
ZipCode="28905"
Street="Avd. General Perón"
CompanyName=""
CompanyCif=""
CompanyCCC=""
AutoClockOutMaxHours="01:00"/>
<User Id="11" Name="Luciano" Password="2222" Profile="PowerUser"
IsTrainee="false"/>
<User Id="12" Name="Conchita" Password="3333" Profile="User"
DeletionDate="2012-12-24T15:00:00" Telephone="915784653" Email="conchita@maili
</Users>

JSON:

Guía del Integrador 13 Versión 5.1.0


{
"Users": [
{
"Id": 10,
"Name": "Wilson Fernandez",
"Password": "1111",
"SmartphonePassword": "",
"WebAdminPassword": "154!Koaxo1{",
"ButtonText": "Wilson F.",
"Color": "#34112a",
"CardNumber": "#455232",
"Profile": "Admin",
"ShowInClockings": true,
"Priority": 2
"SocialSecurityNumber": "354879894614",
"Nif": "31183150A",
"Telephone": "687459813",
"Email": "[email protected]",
"City": "Getafe",
"Region": "Madrid",
"ZipCode": "28905",
"Street": "Avd. General Perón"
},
{
"Id": 11,
"Name": "Luciano",
"Password": "2222",
"Profile": "PowerUser",
"IsTrainee": false
},
{
"Id": 12,
"Name": "Conchita",
"Password": "3333",
"Profile": "User",
"DeletionDate": "2012-12-24T15:00:00",
"Telephone": "916845793",
"Email": "[email protected]"
}
]
}

Para cada usuario podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único del usuario.

Name [Obligatorio]
Nombre del usuario.

Guía del Integrador 14 Versión 5.1.0


Password
Contraseña del usuario para acceder al TPV. Puede dejarse vacía para permitir el
acceso de este usuario sin contraseña.

SmartphonePassword
Contraseña del usuario para acceder a la comandera. Puede dejarse vacía para
permitir el acceso de este usuario sin contraseña.

WebAdminPassword
Contraseña del usuario para acceder a la administración. Puede dejarse vacía para
permitir el acceso de este usuario sin contraseña.

ButtonText
Texto mostrado en el botón asociado al usuario en el punto de venta.

Color
Color del botón asociado al usuario en el punto de venta. El formato es #RRGGBB,
como los ejemplos mostrados en el anexo I.

CardNumber
Código de la tarjeta de acceso asociada al usuario.

IsTrainee
Indica si es un usuario en formación. Por defecto no lo es.

Profile
Perfil del usuario. Los posibles valores son:

▪ Admin: perfil de "Administrador" generado por defecto en Ágora.

▪ PowerUser: perfil de "Encargado" generado por defecto en Ágora.

▪ User: perfil de "Camarero" generado por defecto en Ágora.

▪ nombre_de_perfil: perfil con el nombre nombre_de_perfil. Debe existir


previamente en Ágora.

ShowInClockings
Indica si el usuario se muestra en la pantalla de fichajes o no.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

SocialSecurityNumber
Número de la Seguridad Social del usuario.

Nif
NIF del usuario.

Telephone
Número de teléfono del usuario.

Guía del Integrador 15 Versión 5.1.0


Email
Email del usuario.

Street
Dirección del usuario.

City
Población del usuario.

Region
Provincia del usuario.

ZipCode
Código postal del usuario.

CompanyName
Nombre de empresa que se va a usar en los informes de fichajes.

CompanyCif
CIF de empresa que se va a usar en los informes de fichajes.

CompanyCCC
Código de cuenta contable de la empresa que se va a usar en los informes de fichajes.

CompanyCCC
Código de cuenta contable de la empresa que se va a usar en los informes de fichajes.

AutoClockOutMaxHours
Max. horas jornada: Si está presente activa el fichaje salida automático e indica el
máximo número de horas permitidas desde la última entrada.

Clientes
Los clientes se indican dentro del elemento <Customers> en sucesivos elementos <Customer>:

XML:

Guía del Integrador 16 Versión 5.1.0


<Customers>
<Customer Id="100" FiscalName="Pedro García" Cif="50748345-B"
BusinessName="PedroLan"
Street="Avd. Marcos Retuerto, S/N" City="Getafe"
Region="Madrid" ZipCode="28054"
DiscountRate="0.25" ApplySurcharge="true" CardNumber="123"
Telephone="910555615" ContactPerson="Pedro"
Email="[email protected]"
AccountCode="280000331"
Notes="Preguntar por Recargo" ShowNotes="true"
SendMailing="true"/>
<Customer Id="101" FiscalName="Lucas Grijander" Cif="50748346-B"
PriceListId="20">
<Offers>
<Offer Id="102"/>
</Offers>
</Customer>
<Customer Id="102" FiscalName="María Laroca" Cif="50748347-B"
DeletionDate="2012-12-24T15:00:00"/>
</Customers>

JSON:

Guía del Integrador 17 Versión 5.1.0


{
"Customers": [
{
"Id": 100,
"FiscalName": "Pedro García",
"Cif": "50748345-B",
"BusinessName": "PedroLan",
"Street": "Avd. Marcos Retuerto, S/N",
"City": "Getafe",
"Region": "Madrid",
"ZipCode": "28054",
"DiscountRate": 0.25,
"ApplySurcharge": true,
"AccountCode": "",
"CardNumber": "123",
"Telephone": "910555615",
"ContactPerson": "Pedro",
"Email": "[email protected]",
"Notes": "Preguntar por Recargo",
"ShowNotes": true,
"SendMailing": true
},
{
"Offers": [
{
"Id": 102
}
],
"Id": 101,
"FiscalName": "Lucas Grijander",
"Cif": "50748346-B",
"PriceListId": 20
},
{
"Id": 102,
"FiscalName": "María Laroca",
"Cif": "50748347-B",
"DeletionDate": "2012-12-24T15:00:00"
}
]
}

Para cada cliente podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único del cliente.

FiscalName [Obligatorio]
Nombre fiscal del cliente.

Guía del Integrador 18 Versión 5.1.0


BusinessName
Nombre comercial del cliente.

Cif
CIF/NIF del cliente. Puede dejar este campo vacío si desea crear un cliente sin CIF o
quitar el CIF de un cliente, pero recuerde que no podrá emitir facturas a clientes sin
CIF.

Street
Dirección del cliente.

City
Población del cliente.

Region
Provincia del cliente.

ZipCode
Código postal del cliente.

DiscountRate
Tanto por uno de descuento del cliente, por ejemplo, si le desea aplicar un 10% de
descuento, este valor debería ser 0.1.

ApplySurcharge
Indica si al cliente se le aplica recargo de equivalencia o no.

CardNumber
Código de la tarjeta de acceso asociada al cliente.

PriceListId
Identificador de la tarifa asociada al cliente (si la tiene).

Telephone
Teléfono del cliente.

Email
Correo electrónico del cliente.

ContactPerson
Persona de contacto.

Notes
Notas asociadas al cliente.

ShowNotes
Indica si se muestran las notas del cliente cuando se le asigna a un documento de
venta.

SendMailing
Indica si el cliente recibe o no publicidad desde el módulo de e-mailing.

AccountCode
Código de la cuenta contable asignada al cliente.

Guía del Integrador 19 Versión 5.1.0


DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Offers
Promociones que se aplican al ticket de asociado a un cliente. Las promociones deben
tener como "ApplicationMode" el valor "SelectedCustomerOrTickets". Cada promoción
debe indicarse en un elemento Offer con un atributo Id que contenga el Id de la
promoción asignada.

Si se va a permitir el alta de clientes tanto en Ágora como en un sistema externo, es necesario


coordinar ambas aplicaciones para evitar problemas con los códigos de cliente.

Los clientes creados en Ágora tendrán IDs inferiores a 500000 o superiores a 1000000000, por
lo que podrá configurar el otro sistema para que genere clientes en ese rango de IDs para evitar
colisiones.

Formas de Pago
Las formas de pago se indican dentro del elemento <PaymentMethods> en sucesivos elementos
<PaymentMethod>:

XML:

<PaymentMethods>
<PaymentMethod Id="2" Name="Tarjeta"
GiveChange="false" IncludeInBalance="false"
OpenCashDrawer="false"
AllowOverPaid="false" AllowExtraInformation="false"
IsValidForSale="true" IsValidForPurchase="false"
ExtractTipFromCashdrawer="false" />
<PaymentMethod Id="3" Name="Cheque Restaurante"
GiveChange="false" IncludeInBalance="false"
OpenCashDrawer="false" RegisterTip="false"
AllowOverPaid="true" AllowExtraInformation="false"
ButtonText="Cheque Restaurante" Color="#ffffff"
ExtractTipFromCashdrawer="true"
Priority="1"/>
</PaymentMethods>

JSON:

Guía del Integrador 20 Versión 5.1.0


{
"PaymentMethods": [
{
"Id": 2,
"Name": "Tarjeta",
"GiveChange": false,
"IncludeInBalance": false,
"OpenCashDrawer": false,
"RegisterTip": true,
"AllowOverPaid": false,
"AllowExtraInformation": false,
"IsValidForSale": true,
"IsValidForPurchase": false,
"ExtractTipFromCashdrawer": true,
"Priority": 1
},
{
"Id": 3,
"Name": "Cheque Restaurante",
"GiveChange": false,
"IncludeInBalance": false,
"OpenCashDrawer": false,
"RegisterTip": false,
"AllowOverPaid": true,
"AllowExtraInformation": false
"IsValidForSale": false,
"IsValidForPurchase": false,
"ExtractTipFromCashdrawer": false
}
]
}

La forma de pago con Id 1 se corresponde con la forma de pago 'Efectivo' de


Ágora y no puede ser modificada, por lo que no podrá ser incluida dentro del
fichero de importación.

Para cada forma de pago podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único de la forma de pago.

Name [Obligatorio]
Nombre de la forma de pago.

GiveChange
Indica si al pagar con esta forma de pago se devolverá cambio, por ejemplo, en el caso
de pago en efectivo se devuelve cambio, pero si paga con un "vale" o con un "cheque
restaurante", puede decidir no devolver cambio.

Guía del Integrador 21 Versión 5.1.0


IncludeInBalance
Indica si el importe pagado con esta forma de pago debe tenerse en cuenta al hacer el
conteo de monedas durante el arqueo de caja. En general, sólo la forma de pago
Efectivo (recuerde que siempre existe en Ágora y no puede ser importada) debería
incluirse en el arqueo de caja.

OpenCashDrawer
Indica si se debe abrir el cajón portamonedas automáticamente cuando se realiza un
cobro con esta forma de pago.

RegisterTip
Indica si el usuario debe introducir la propina que se ha recibido mediante esta forma
de pago. Si se marca esta opción, cuando se cierra un ticket se permite al usuario
indicar el importe de la propina recibida mediante esta forma de pago.

AllowOverPaid
Indica si se puede pagar más del importe total con esta forma de pago. Por ejemplo,
con un cheque restaurante se puede pagar más del importe total del ticket, pero no
tarjeta de crédito no.

IsValidForSale
Indica si la forma de pago es válida para realizar ventas. Si no lo es no aparecerá
como forma de pago para realizar la venta.

IsValidForPurchase
Indica si la forma de pago es válida para realizar compras. Si no lo es no aparecerá
como forma de pago para realizar la compra.

AllowExtraInformation
Indica si se puede asociar a la forma de pago notas. Útil para asociar códigos de barras
de un cheque restaurante, etc.

ButtonText
Texto mostrado en el botón asociado a la forma de pago en el punto de venta.

Color
Color del botón asociado a la forma de pago en el punto de venta. El formato es
#RRGGBB, como los ejemplos mostrados en el anexo I.

Priority
Indica el orden que tomarán las formas de pago en la pantalla de cobros.

ExtractTipFromCashdrawer
Indica si, al aceptar pagos mediante esta forma de pago, las propinas se descuenten
del saldo del cajón.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Guía del Integrador 22 Versión 5.1.0


Impuestos
Los impuestos se indican dentro del elemento <Vats> en sucesivos elementos <Vat>:

XML:

<Vats>
<Vat Id="1" Name="Exento" VatRate="0.00"
SurchargeRate="0.000"/>
<Vat Id="2" Name="Super reducido" VatRate="0.04"
SurchargeRate="0.005"/>
<Vat Id="3" Name="Reducido" VatRate="0.10"
SurchargeRate="0.014"/>
<Vat Id="4" Name="General" VatRate="0.21"
SurchargeRate="0.052"/>
<Vat Id="5" Name="Especial" VatRate="0.33"
SurchargeRate="0.15" Enabled="false"/>
</Vats>

JSON:

Guía del Integrador 23 Versión 5.1.0


{
"Vats": [
{
"Id": 1,
"Name": "Exento",
"VatRate": 0.00,
"SurchargeRate": 0.000
},
{
"Id": 2,
"Name": "Super reducido",
"VatRate": 0.04,
"SurchargeRate": 0.005
},
{
"Id": 3,
"Name": "Reducido",
"VatRate": 0.10,
"SurchargeRate": 0.014
},
{
"Id": 4,
"Name": "General",
"VatRate": 0.21,
"SurchargeRate": 0.052
},
{
"Id": 5,
"Name": "Especial",
"VatRate": 0.33,
"SurchargeRate": 0.15,
"Enabled": false
}
]
}

Ágora soporta hasta 10 tipos de impuestos que pueden ser indicados a través del fichero de
importación de datos. Cada tipo de impuesto debe tener un Id asociado entre 1 y 10 (inclusive).
Para cada tipo de impuesto podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único del tipo de impuesto. Deberá ser un valor entre 1 y 10.

Name [Obligatorio]
Nombre del tipo de impuesto.

VatRate [Obligatorio]
Tanto por uno de impuesto. Por ejemplo, si el impuesto es del 21%, este valor será
0.21.

Guía del Integrador 24 Versión 5.1.0


SurchargeRate [Obligatorio]
Tanto por uno de recargo de equivalencia. Por ejemplo, si el recargo es del 0.5%, este
valor será 0.005.

Enabled [Obligatorio]
Permite indicar si el impuesto está habilitado (true) o no (false).

Proveedores
Los proveedores se indican dentro del elemento <Suppliers> en sucesivos elementos
<Supplier>:

XML:

<Suppliers>
<Supplier Id="1" FiscalName="Casbega S.A." BusinessName="Casbega"
Cif="A23429423" Street="Avd. Real de Pinto" City="Madrid"
Region="Madrid" ZipCode="28021" AccountCode="" ApplySurcharge="false"
Email="[email protected]" Telephone="912341212" Web="www.casbega.com"
ContactPerson="Isabel Pita" ShowSupplierProductsInPurchaseDocumentOnly="false"
WarnIfPurchaseDocumentAlreadyExists="false" />
</Suppliers>

JSON:

{
"Suppliers": [
{
"Id": 1,
"FiscalName": "Casbega S.A.",
"BusinessName": "Casbega",
"Cif": "A23429423",
"Street": "Avd. Real de Pinto",
"City": "Madrid",
"Region": "Madrid",
"ZipCode": "28021",
"AccountCode": "",
"ApplySurcharge": false,
"Email": "[email protected]",
"Telephone": "912341212",
"Web": "www.casbega.com",
"ContactPerson": "Isabel Pita",
"ShowSupplierProductsInPurchaseDocumentOnly" : false,
"WarnIfPurchaseDocumentAlreadyExists": false
}
]
}

Para cada proveedor podrá indicar los siguientes atributos:

Guía del Integrador 25 Versión 5.1.0


Id [Obligatorio]
Identificador numérico único del proveedor.

FiscalName [Obligatorio]
Nombre fiscal del proveedor.

BusinessName
Nombre comercial del proveedor.

Cif [Obligatorio]
CIF/NIF del proveedor.

Street
Dirección del proveedor.

City
Población del proveedor.

Region
Provincia del proveedor.

ZipCode
Código postal del proveedor.

ApplySurcharge
Indica si al proveedor compramos con recargo de equivalencia o no.

Telephone
Teléfono del cliente.

Email
Correo electrónico del cliente.

Web
Paígina web del proveedor.

ContactPerson
Persona de contacto.

AccountCode
Código de la cuenta contable asignada al proveedor.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

ShowSupplierProductsInPurchaseDocumentOnly
Indica si, al crear documentos de compra para este proveedor, solo se muestra
productos asociados al mismo.

WarnIfPurchaseDocumentAlreadyExists
Indica si, al crear documentos de compra para este proveedor con un número de
documento ya existente, Ágora debe mostrar un aviso de advertencia.

Guía del Integrador 26 Versión 5.1.0


Almacenes
Los almacenes se indican dentro del elemento <Warehouses> en sucesivos elementos
<Warehouse>:

XML:

<Warehouses>
<Warehouse Id="100" Name="General"
Street="Avd. Marcos Retuerto, S/N" City="Getafe"
Region="Madrid" ZipCode="28054"
PurchaseOrderSerie="PC"
IncomingDeliveryNoteSerie="AC"
PurchaseInvoiceSerie="FC">
<FiscalInfo Cif="" FiscalName=""
UseInDocuments="false"/>
UpdateCostPricePolicy="PurchasePrice"
</Warehouse>
<Warehouse Id="101" Name="Entradas"/>
</Warehouses>

JSON:

{
"Warehouses": [
{
"Id": 100,
"Name": "General",
"Street": "Avd. Marcos Retuerto, S/N",
"City": "Getafe",
"Region": "Madrid",
"ZipCode": "28054",
"PurchaseOrderSerie": "PC",
"IncomingDeliveryNoteSerie": "AC",
"PurchaseInvoiceSerie": "FC",
"FiscalInfo": {
"UseInDocuments": false,
"FiscalName": "",
"Cif": ""
},
"UpdateCostPricePolicy": "PurchasePrice"
}
]
}

Para cada almacén podrá indicar los siguientes atributos:

Guía del Integrador 27 Versión 5.1.0


Id [Obligatorio]
Identificador numérico único del almacén.

Name [Obligatorio]
Nombre del almacén.

Street
Dirección del almacén.

City
Población del almacén.

Region
Provincia del almacén.

ZipCode
Código postal del almacén.

PurchaseOrderSerie
Serie para los pedidos a proveedor. Si no se especifica se usara la serie por defecto.

IncomingDeliveryNoteSerie
Serie para los albaranes de entrada. Si no se especifica se usara la serie por defecto.

PurchaseInvoiceSerie
Serie para las facturas de proveedor. Si no se especifica se usara la serie por defecto.

FiscalInfo
Información fiscal que se usa para la generación de documentos en pdf de los
documentos de compra, incluyendo:

FiscalName
Nombre Fiscal.

Cif
Cif.

UseInDocuments
Sí se usa en los documentos de compra o no. Si no se usa se usarán los datos de
empresa.

Delivered
El pedido ha sido servido totalmente desde algún albarán.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

UpdateCostPricePolicy
Política de actualización de los precios de coste del Almacén a la hora de crear un
Albarán de Entrada asociado al mismo.

Guía del Integrador 28 Versión 5.1.0


Tipos de Preparación
Los tipos de preparación se indican dentro del elemento <PreparationTypes> en sucesivos
elementos <PreparationType>:

XML:

<PreparationTypes>
<PreparationType Id="1" Name="Barra"/>
<PreparationType Id="2" Name="Plancha"/>
<PreparationType Id="3" Name="Freidora"/>
</PreparationTypes>

JSON:

{
"PreparationTypes": [
{
"Id": 1,
"Name": "Barra"
},
{
"Id": 2,
"Name": "Plancha"
},
{
"Id": 3,
"Name": "Freidora"
}
]
}

Para cada tipo de preparación podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único del tipo de preparación.

Name [Obligatorio]
Nombre del tipo de preparación.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Guía del Integrador 29 Versión 5.1.0


Órdenes de Preparación
Los órdenes de preparación se indican dentro del elemento <PreparationOrders> en sucesivos
elementos <PreparationOrder>:

XML:

<PreparationOrders>
<PreparationType Id="1" Name="Bebidas" Priority="0"
CanBeRequested="false"/>
<PreparationType Id="2" Name="Primeros" Priority="1"
CanBeRequested="false"/>
<PreparationType Id="3" Name="Segundos" Priority="2"
CanBeRequested="true"/>
</PreparationOrders>

JSON:

{
"PreparationOrders": [
{
"Id": 1,
"Name": "Bebidas",
"Priority": 0,
"CanBeRequested": false
},
{
"Id": 2,
"Name": "Primeros",
"Priority": 1,
"CanBeRequested": false
},
{
"Id": 3,
"Name": "Segundos",
"Priority": 2,
"CanBeRequested": true
}
]
}

Para cada orden de preparación podrá indicar los siguientes atributos

Id [Obligatorio]
Identificador numérico único del orden de preparación.

Name [Obligatorio]
Nombre del orden de preparación.

Guía del Integrador 30 Versión 5.1.0


Priority [Obligatorio]
Prioridad del orden de preparación. Al mostrarse en pantalla, en las comandas
impresas, y en los monitores de cocina, los órdenes de preparación aparecerán
ordenados por prioridad.

CanBeRequested [Obligatorio]
Indica si es posible marchar este órden de preparación (true) o no (false).

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Familias
Las familias se indican dentro del elemento <Families> en sucesivos elementos <Family>:

XML:

<Families>
<Family Id="100" Name="Refrescos" Color="#00FF00" Order="2"/>
<Family Id="101" Name="Bocadillos" Color="#FF0000"
ButtonText="BOCATAS" Order="1"/>
<Family Id="102" Name="Helados"
DeletionDate="2012-11-30T15:00:50"/>
<Family Id="103" Name="Sin Gas" Color="#00FF00"
ParentFamilyId="100" ShowInPos="false"/>
<Family Id="104" Name="Menús" Color="#00FF00"/>
</Families>

JSON:

Guía del Integrador 31 Versión 5.1.0


{
"Families": [
{
"Id": 100,
"Name": "Refrescos",
"Color": "#00FF00",
"Order": 2
},
{
"Id": 101,
"Name": "Bocadillos",
"Color": "#FF0000",
"ButtonText": "BOCATAS",
"Order": 1
},
{
"Id": 102,
"Name": "Helados",
"DeletionDate": "2012-11-30T15:00:50"
},
{
"Id": 103,
"Name": "Sin Gas",
"Color": "#00FF00",
"ParentFamilyId": 100,
"ShowInPos": "false"
},
{
"Id": 104,
"Name": "Menús",
"Color": "#00FF00"
}
]
}

Para cada familia podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único de la familia.

Name [Obligatorio]
Nombre de la familia.

ButtonText
Texto mostrado en el botón asociado a la familia en el punto de venta.

Color
Color del botón asociado a la familia en el punto de venta. El formato es #RRGGBB,
como los ejemplos mostrados en el anexo I.

Guía del Integrador 32 Versión 5.1.0


ParentFamilyId
Identificador único de la familia padre de esta familia. La familia padre debe existir en
Ágora o aparecer en el documento XML de importación. Este valor sólo debe indicarse
para subfamilias. Si una familia deja de ser subfamilia de otra, deberá indicarse
dejando este atributo vacío.

ShowInPos
Permite indicar si la familia se visualiza o no en el punto de venta.

Order
Posición de la familia en el punto de venta. A la hora de mostrar las familias, se
ordenarán por el valor introducido en este campo. Las familias para las que no se haya
indicado el orden aparecerán al final de la lista de familias.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Tarifas
Las tarifas de venta se indican dentro del elemento <PriceLists> en sucesivos elementos
<PriceList>:

XML:

<PriceLists>
<PriceList Id="20" Name="Hora Feliz" VatIncluded="true"/>
<PriceList Id="21" Name="Clientes VIP" VatIncluded="true"/>
</PriceLists>

JSON:

{
"PriceLists": [
{
"Id": 20,
"Name": "Hora Feliz",
"VatIncluded": true
},
{
"Id": 21,
"Name": "Clientes VIP",
"VatIncluded": true
}
]
}

Para cada tarifa podrá indicar los siguientes atributos:


Guía del Integrador 33 Versión 5.1.0
Id [Obligatorio]
Identificador numérico único de la tarifa.

Name [Obligatorio]
Nombre de la tarifa.

VatIncluded [Obligatorio]
Indica si los precios en esta tarifa son con impuestos incluidos (true) o no (false).

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Centros de Venta
Los centros de venta se indican dentro del elemento <SaleCenters> en sucesivos elementos
<SaleCenter>:

XML:

<SaleCenters>
<SaleCenter Id="10" Name="Salón" PriceListId='1' CurrentPriceListId='1'
ButtonText="SALÓN" Color="#341122" VatIncluded="true"
AskForGuests="true" GuestProductId="2" WhenAskForGuests="OnCloseDocument
<SaleLocations>
<SaleLocation Name="S1"/>
<SaleLocation Name="S2"/>
<SaleLocation Name="S3"/>
<SaleLocation Name="S4"/>
<SaleLocation Name="S5"/>
</SaleLocations>
</SaleCenter>
<SaleCenter Id="11" Name="Terraza" PriceListId='2'
Color="#00FF00" VatIncluded="false"
DeletionDate="2012-12-24T15:00:00">
<SaleLocations>
<SaleLocation Name="T1"/>
<SaleLocation Name="T2"/>
<SaleLocation Name="T3"/>
<SaleLocation Name="T4"/>
</SaleLocations>
</SaleCenter>
</SaleCenters>

JSON:

Guía del Integrador 34 Versión 5.1.0


{
"SaleCenters": [
{
"SaleLocations": [
{ "Name": "S1" },
{ "Name": "S2" },
{ "Name": "S3" },
{ "Name": "S4" },
{ "Name": "S5" }
],
"Id": 10,
"Name": "Salón",
"PriceListId": 1,
"CurrentPriceListId": 1,
"ButtonText": "SALÓN",
"Color": "#341122",
"VatIncluded": true,
"AskForGuests": true,
"GuestProductId": 2,
"WhenAskForGuests": "OnCloseDocument"
"Priority": 2,
},
{
"SaleLocations": [
{ "Name": "T1" },
{ "Name": "T2" },
{ "Name": "T3" },
{ "Name": "T4" }
],
"Id": 11,
"Name": "Terraza",
"PriceListId": 2,
"CurrentPriceListId": 2,
"Color": "#00FF00",
"VatIncluded": false,
"DeletionDate": "2012-12-24T15:00:00"
}
]
}

Para cada centro de venta podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único del centro de venta.

Name [Obligatorio]
Nombre del centro de venta.

Guía del Integrador 35 Versión 5.1.0


PriceListId [Obligatorio]
Identificador de la tarifa por defecto del centro de venta. Está tarifa debe existir
previamente.

CurrentPriceListId
Identificador de la tarifa actual del centro de venta. Esta tarifa debe existir
previamente.

VatIncluded [Obligatorio]
Indica si los precios en esta tarifa son con impuestos incluidos (true) o no (false).

ButtonText
Texto mostrado en el botón asociado al centro de venta en el punto de venta.

Color
Color del botón asociado al centro de venta en el punto de venta. El formato es
#RRGGBB, como los ejemplos mostrados en el anexo I.

AskForGuests [Obsoleto]
Indica si al seleccionar una ubicación del centro de venta debe solicitarse (true) o no
(false) la introducción del número de comensales. Obsoleto, ver WhenAskForGuests

GuestProductId
Id del producto que se venderá automáticamente por cada comensal introducido al
seleccionar una ubicación del centro de venta. Si no desea que se realice la venta
automática de ningún producto, deberá incluir este atributo vacío. El producto deberá
existir en la base de datos. Tenga en cuenta que, durante el proceso de importación,
se realiza primero la importación de centros de venta y luego la de productos, por lo
que no es posible asignar como producto de servicio un producto que esté siendo
creado en la misma importación.

WhenAskForGuests
Indica cuando se debe solicitar la introducción del número de comensales. Los posibles
valores son (Never) Nunca, (OnOpenDocument) Al abrir documento y
(OnCloseDocument) Al cerrar documento

SaleLocations [Obligatorio]
Lista de ubicaciones/mesas existentes en el centro de venta, cada una de ellas debe
indicarse en un elemento SaleLocation con un único atributo Name que contenga el
nombre único de la ubicación dentro del centro de venta. En cada centro de venta debe
existir al menos ubicación.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Productos
Los productos se indican dentro del elemento <Products> en sucesivos elementos <Product>:

Guía del Integrador 36 Versión 5.1.0


XML:

Guía del Integrador 37 Versión 5.1.0


<Products>
<Product Id="100" Name="Coca Cola" FamilyId="100" VatId="3"
ButtonText="COCA-COLA" Color="#341122"
Barcode="255223" Order="1"
UseAsDirectSale="true" AskForPreparationNotes="true"
AskForAddins="true"
PreparationTypeId="1" PreparationOrderId="1" PLU="0001">
<Barcodes>
<Barcode Value="91000122"/>
<Barcode Value="81000122"/>
</Barcodes>
<StorageOptions>
<StorageOption WarehouseId="1"
Location="S1.A90" MinStock="5" MaxStock="25"/>
<StorageOption WarehouseId="1"
Location="S1.A90" MinStock="10" MaxStock="30"/>
</StorageOptions>
<Prices>
<Price PriceListId="10" Price="2.50"/>
<Price PriceListId="11" Price="3.00"/>
</Prices>
</Product>
<Product Id="103" Name="Pitiusa" FamilyId="100" VatId="3"
PrintWhenPriceIsZero="false"
DeletionDate="1982-10-01T12:00:00"/>
<Product Id="200" Name="Ron Brugal" FamilyId="101"
Order="1" VatId="3"
MinAddins="0" MaxAddins="1"
SaleableAsMain="true" SaleableAsAddin="false">
<Prices>
<Price PriceListId="10" MainPrice="2.50"/>
<Price PriceListId="11" MainPrice="3.00"/>
</Prices>
<Addins>
<Addin SaleFormatId="100"/>
</Addins>
</Product>
<Product Id="301" Name="Bocadillo de Jamón" FamilyId="101"
VatId="3"/>
<Product Id="302" Name="Bocadillo de Lomo" FamilyId="101"
VatId="3"/>
<Product Id ="400" BaseSaleFormatId="400" Name="Whisky DYC" FamilyId="101"
VatId="2" MinAddins="1" MaxAddins="2" Order="2"
SaleableAsMain="true" SaleableAsAddin="false" >
<Prices>
<Price PriceListId="1" MainPrice="3.0" AddinPrice="/>
<Price PriceListId="2" MainPrice="4.0" AddinPrice="/>
</Prices>
<Addins>
<Addin SaleFormatId="1"/>
<Addin SaleFormatId="4"/>

Guía del Integrador 38 Versión 5.1.0


</Addins>
<AddinRoles>
<AddinRole Name="Añadidos" ButtonText="Añadidos" Color="#BACDE2"
<Addin SaleFormatId="1"/>
<Addin SaleFormatId="4"/>
</AddinRole>
</AddinRoles>
<AdditionalSaleFormats>
<SaleFormat Id="401" Name="Chupito de DYC" Ratio="0.3"
ButtonText="Chupito de DYC" Color="#000000"
SaleableAsMain="true" SaleableAsAddin="true" AskForAddins="false">
<Prices>
<Price PriceListId="1" MainPrice="1.0" AddinPrice="1.0"/>
<Price PriceListId="2" MainPrice="1.5" AddinPrice="1.0"/>
</Prices>
</SaleFormat>
<SaleFormat Id="402" Name="Copa de DYC" Ratio="1.0"
ButtonText="Copa de DYC" Color="#000000"
SaleableAsMain="true" SaleableAsAddin="true" AskForAddins="false">
<Prices>
<Price PriceListId="1" MainPrice="5.0" AddinPrice="3.0"/>
<Price PriceListId="2" MainPrice="6.0" AddinPrice="4.0"/>
</Prices>
<Addins>
<Addin SaleFormatId="1" />
</Addins>
<AddinRoles>
<AddinRole Name="Añadidos" ButtonText="Añadidos"
<Addin SaleFormatId="1"/>
<Addin SaleFormatId="4"/>
</AddinRole>
</AddinRoles>
</SaleFormat>
</AdditionalSaleFormats>
</Product>
</Products>

JSON:

Guía del Integrador 39 Versión 5.1.0


{
"Products": [
{
"Barcodes": [
{
"BarcodeValue": "91000122"
},
{
"BarcodeValue": "81000122"
}
],
"StorageOptions": [
{
"WarehouseId": 1,
"Location": "S1.A90",
"MinStock": 5,
"MaxStock": 25
},
{
"WarehouseId": 1,
"Location": "S1.A90",
"MinStock": 10,
"MaxStock": 30
}
],
"Prices": [
{
"PriceListId": 10,
"Price": 2.50,
"AddinPrice": 0.00,
"MenuItemPrice": 0.00
},
{
"PriceListId": 11,
"Price": 3.00,
"AddinPrice": 0.00,
"MenuItemPrice": 0.00
}
],
"Id": 100,
"Name": "Coca Cola",
"FamilyId": 100,
"VatId": 3,
"ButtonText": "COCA-COLA",
"Color": "#341122",
"Barcode": "255223",
"Order": 1,
"UseAsDirectSale": true,
"AskForPreparationNotes": true,
"AskForAddins": true,
"PreparationTypeId": 1,

Guía del Integrador 40 Versión 5.1.0


"PreparationOrderId": 1,
"PLU": "0001"
},
{
"Id": 103,
"Name": "Pitiusa",
"FamilyId": 100,
"VatId": 3,
"PrintWhenPriceIsZero": false,
"DeletionDate": "1982-10-01T12:00:00"
},
{
"Prices": [
{
"PriceListId": 10,
"MainPrice": 2.50,
"AddinPrice": 0.00,
"MenuItemPrice": 0.00
},
{
"PriceListId": 11,
"MainPrice": 3.00,
"AddinPrice": 0.00,
"MenuItemPrice": 0.00
}
],
"Addins": [
{
"SaleFormatId": 100
}
],
"Id": 200,
"Name": "Ron Brugal",
"FamilyId": 101,
"Order": 1,
"VatId": 3,
"MinAddins": 0,
"MaxAddins": 1,
"SaleableAsMain": true,
"SaleableAsAddin": false
},
{
"Id": 301,
"Name": "Bocadillo de Jamón",
"FamilyId": 101,
"VatId": 3
},
{
"Id": 302,
"Name": "Bocadillo de Lomo",
"FamilyId": 101,

Guía del Integrador 41 Versión 5.1.0


"VatId": 3
},
{
"Prices": [
{
"PriceListId": 1,
"MainPrice": 3.0,
"AddinPrice": null
},
{
"PriceListId": 2,
"MainPrice": 4.0,
"AddinPrice": null
}
],
"Addins": [
{
"SaleFormatId": 1
},
{
"SaleFormatId": 4
}
],
"AddinRoles": [
{
"Name": "Añadidos",
"ButtonText": "Añadidos",
"Color": "#BACDE2",
"MinAddins": 0,
"MaxAddins": 1,
"UsePreparationType": 0,
"Addins": [
{
"AddinSaleFormatId": 4
},
{
"AddinSaleFormatId": 1
}
]
}
],
"AdditionalSaleFormats": [
{
"Id": 401,
"Name": "Chupito de DYC",
"Ratio": 0.3,
"ButtonText": "Chupito de DYC",
"Color": "#000000",
"SaleableAsMain": true,
"SaleableAsAddin": true,
"AskForAddins": false,

Guía del Integrador 42 Versión 5.1.0


"Prices": [
{
"PriceListId": 1,
"MainPrice": 1.0,
"AddinPrice": 1.0
},
{
"PriceListId": 2,
"MainPrice": 1.5,
"AddinPrice": 1.0
}
]
},
{
"Id": 402,
"Name": "Copa",
"Ratio": 1.0,
"ButtonText": "Copa",
"Color": "#000000",
"SaleableAsMain": true,
"SaleableAsAddin": true,
"AskForAddins": false,
"Prices": [
{
"PriceListId": 1,
"MainPrice": 5.0,
"AddinPrice": 3.0
},
{
"PriceListId": 2,
"MainPrice": 6.0,
"AddinPrice": 4.0
}
],
"Addins": [
{
"SaleFormatId": 1
}
],
"AddinRoles": [
{
"Name": "Añadidos",
"ButtonText": "Añadidos",
"Color": "#BACDE2",
"MinAddins": 0,
"MaxAddins": 1,
"UsePreparationType": 0,
"Addins": [
{
"AddinSaleFormat
}

Guía del Integrador 43 Versión 5.1.0


]
}
],
}
],
"Id": 400,
"Name": "Whisky DYC",
"BaseSaleFormatId": 400,
"FamilyId": 4,
"Color": "#341122",
"VatId": 2,
"MinAddins": 1,
"MaxAddins": 2,
"Order": 2,
"SaleableAsMain": true,
"SaleableAsAddin": false,
"AskForPreparationNotes": true
}
]
}

Para cada producto podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único del producto. Este ID se utilizará también para crear el
formato base del producto.

Name [Obligatorio]
Nombre del producto.

VatId [Obligatorio]
Id del impuesto de venta asociado al producto.

BaseSaleFormatId
Id de formato de venta base del producto. Si no se indica, se asumirá que el Id del
formato base coincide con el Id del producto y que no se van a utilizar formatos de
venta en Ágora.

FamilyId
Id de la familia a la que pertenece el producto. Si el producto no pertenece a ninguna
familia, deberá incluirse este atributo vacío.

ButtonText
Texto mostrado en el botón asociado al producto en el punto de venta.

PLU
Código PLU del menú. Debe ser una cadena numérica. Ejemplos: 0001, 33232, etc.

Guía del Integrador 44 Versión 5.1.0


Color
Color del botón asociado al producto el punto de venta. El formato es #RRGGBB, como
los ejemplos mostrados en el anexo I.

Barcodes
Lista de códigos de barras del producto. Cada uno de ellos debe indicarse en un
elemento Barcode con un único atributo Value que contenga el código de barras. En el
caso de esté asociado a una talla y color llevará ademñas los atributos ColorId y
SizeId.

StorageOptions
Opciones de almacenamiento del producto en cada almacén. Cada una debe indicarse
dentro de un elemento StorageOption con los siguientes atributos:

WarehouseId [Obligatorio]
Id del almacén.

Location [Obligatorio]
Ubicación del producto dentro del almacén. Si no desea asignar ninguna
ubicación, puede dejar el atributo vacío. Nota para productos con tallas y
colores: la ubicación dentro del almacén es única para todas las tallas y
colores de un mismo producto, por lo que debería replicar el mismo valor en
todos los registros de tallas y colores asociados a un mismo almacén y
producto.

MinStock [Obligatorio]
Stock mínimo del producto en unidades de venta.

MaxStock [Obligatorio]
Stock máximo del producto en unidades de venta.

Order
Posición del producto dentro de su familia en el punto de venta. A la hora de mostrar
los productos de una determinada familia, se ordenarán por el valor introducido en
este campo. Los productos para los que no se haya indicado el orden, aparecerán al
final de la lista de los productos.

UseAsDirectSale
Indica si el producto debe tratarse como un producto de venta directa (true) o no
(false). Si es así, el producto se mostrará junto a los grupos de productos en la
pantalla de venta, y la posición indicada en el atributo Order será relativa a la posición
de las familias y otros productos de venta directa, no a la posición de los productos de
esta familia.

MinAddins [Obsoleto: Usar AddinRoles]


Número mínimo de añadidos que se deberán seleccionar al vender el producto.

MaxAddins [Obsoleto: Usar AddinRoles]


Número máximo de añadidos que se podrán seleccionar al vender el producto.

SaleableAsMain
Indica si el producto puede venderse como producto principal (true) o no (false).

Guía del Integrador 45 Versión 5.1.0


SaleableAsAddin
Indica si el producto puede venderse como producto añadido (true) o no (false).

AskForAddins
Indica si al vender el producto deben solicitarse automáticamente añadidos (true) o
no (false).

AskForPreparationNotes
Indica si al vender el producto deben solicitarse automáticamente notas de preparación
(true) o no (false).

PrintWhenPriceIsZero
Indica si al imprimir un ticket en el cual este producto tiene precio cero, debe
mostrarse el producto (true) o no (false).

PreparationTypeId
Id del tipo de preparación asociado al producto. Si el producto no tiene tipo de
preparación, deberá incluirse el atributo vacío. Si un producto tiene tipo de
preparación, deberá establecer también su orden de preparación.

PreparationOrderId
Id del order de preparación asociado al producto. Si el producto no tiene order de
preparación, deberá incluirse el atributo vacío. Si un producto tiene orden de
preparación, deberá establecer también su tipo de preparación.

IsSoldByWeight
Indica si el producto es vendible al peso (true) o no (false).

Prices
Precios del producto en cada centro de venta y tarifa especial. Cada precio debe
indicarse en un elemento Price con los siguientes atributos:

PriceListId [Obligatorio]
Id de la tarifa cuyos precios se quieren establecer.

MainPrice [Obligatorio]
Precio de venta como producto principal. El precio será con impuestos
incluidos o no dependiendo de la configuración de la tarifa. Si deja el atributo
vacío, Ágora solicitará el precio en el momento de la venta.

AddinPrice [Obligatorio]
Precio de venta como añadido de otro producto. El precio será con impuestos
incluidos o no dependiendo de la configuración de la tarifa. Si deja el atributo
vacío, Ágora solicitará el precio en el momento de la venta.

MenuItemPrice [Obligatorio]
Suplemento al incluir el producto en un menú. El precio será con impuestos
incluidos o no dependiendo de la configuración de la tarifa. Si deja el atributo
vacío, Ágora solicitará el precio en el momento de la venta.

Addins [Obsoleto: Usar AddinRoles]


Añadidos disponibles para el producto. Cada añadido debe indicarse en un elemento
Addin con los siguientes atributos:

Guía del Integrador 46 Versión 5.1.0


SaleFormatId [Obligatorio]
Id del formato de venta que se usará como añadido. Por razones de
compatibilidad, este atributo se puede sustituir por ProductId.

AddinRoles
Grupos de añadidos disponibles para el producto. Prevalece sobre el node Addins. Cada
grupo debe indicarse en un elemento AddinRole con los siguientes atributos:

Name [Obligatorio]
Nombre del grupo de añadidos.

ButtonText
Texto del botón del grupo de añadidos.

Color
Color del botón del grupo de añadidos.

MinAddins
Número mínimo de añadidos que se deberán seleccionar al vender el producto
con un añadido de este grupo.

MaxAddins
Número máximo de añadidos que se podrán seleccionar al vender el producto
con un añadido de este grupo.

UsePreparationType
Tipo de preparación para los añadidos del grupo. Puede tener dos valores
"FromMain" para usar el tipo de preparción del producto del que es añadido o
"FromAddin" para usar el del añadido.

AdditionalSaleFormats
Formatos de venta adicionales del producto. Los formatos que aparezca en este
elemento serán creados o actualizado en la base de datos conforme sea necesario.
Para eliminar un formato, será necesario indicarlo en este nodo con su DeletionDate
correspondiente. Cada formato de venta debe indicarse en un elemento SaleFormat
con los siguientes atributos:

Id [Obligatorio]
Identificador único del formato de venta. Este identificador debe ser único en
todos los formatos de venta de Ágora, no sólo los de este producto,
incluyendo los Ids de los formatos base de los productos indicados en el
atributo BaseSaleFormatId de los elementos Product.

Name [Obligatorio]
Nombre del formato de venta.

Ratio [Obligatorio]
Relación de la cantidad consumida por este formato con respecto al formato
base.

ButtonText
Texto mostrado en el botón asociado al formato de venta en el punto de
venta.

Guía del Integrador 47 Versión 5.1.0


Color
Color del botón asociado al formato de venta el punto de venta. El formato es
#RRGGBB, como los ejemplos mostrados en el anexo I.

SaleableAsMain
Indica si el formato puede venderse como formato principal (true) o no
(false).

SaleableAsAddin
Indica si el formato puede venderse como formato añadido (true) o no
(false).

AskForAddins
Indica si al vender el formato deben solicitarse automáticamente añadidos
(true) o no (false).

MinAddins [Obsoleto: Usar AddinRoles]


Número mínimo de añadidos que se deberán seleccionar al vender el formato.

MaxAddins [Obsoleto: Usar AddinRoles]


Número máximo de añadidos que se podrán seleccionar al vender el formato.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de
querer eliminar el registro. Si se incluye este atributo con un valor de fecha y
hora válido, se considerará que el registro ha sido dado de baja. El formato de
fechas soportado es aaaa-mm-ddThh:mm:ss, por ejemplo
2012-01-31T10:59:20.

Prices
Precios del formato en cada centro de venta y tarifa especial. Cada precio
debe indicarse en un elemento Price con los siguientes atributos:

PriceListId [Obligatorio]
Id de la tarifa cuyos precios se quieren establecer.

MainPrice [Obligatorio]
Precio de venta como formato principal. El precio será con impuestos
incluidos o no dependiendo de la configuración de la tarifa. Si deja el
atributo vacío, Ágora solicitará el precio en el momento de la venta.

AddinPrice [Obligatorio]
Precio de venta como añadido de otro producto o formato. El precio
será con impuestos incluidos o no dependiendo de la configuración
de la tarifa. Si deja el atributo vacío, Ágora solicitará el precio en el
momento de la venta.

MenuItemPrice [Obligatorio]
Suplemento al incluir el formato en un menú. El precio será con
impuestos incluidos o no dependiendo de la configuración de la
tarifa. Si deja el atributo vacío, Ágora solicitará el precio en el
momento de la venta.

Guía del Integrador 48 Versión 5.1.0


Addins [Obsoleto: Usar AddinRoles]
Añadidos disponibles para el formato. Cada añadido debe indicarse en un
elemento Addin con los siguientes atributos:

SaleFormatId [Obligatorio]
Id del formato de venta que se usará como añadido. Por razones
de compatibilidad, este atributo se puede sustituir por
ProductId.

AddinRoles
Grupos de añadidos disponibles para el formato. Prevalece sobre el node
Addins. Cada grupo debe indicarse en un elemento AddinRole con los
siguientes atributos:

Name [Obligatorio]
Nombre del grupo de añadidos.

ButtonText
Texto del botón del grupo de añadidos.

Color
Color del botón del grupo de añadidos.

MinAddins
Número mínimo de añadidos que se deberán seleccionar al vender el
producto con un añadido de este grupo.

MaxAddins
Número máximo de añadidos que se podrán seleccionar al vender el
producto con un añadido de este grupo.

UsePreparationType
Tipo de preparación para los añadidos del grupo. Puede tener dos
valores "FromMain" para usar el tipo de preparción del producto del
que es añadido o "FromAddin" para usar el del añadido.

CostPrice
Precio de coste del producto.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registro. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. Si se indica este atributo, todos los
formatos relacionados con el producto también serán eliminados. El formato de fechas
soportado es aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Internamente Ágora creará el formato de venta base del producto usando el mismo Id que el
producto si no se especifica el atributo BaseSaleFormatId. Si ya existiese un formato de venta
con ese Id en la base de datos asociado a otro producto, por ejemplo porque ha sido creado
manualmente desde la administración de Ágora, se generará un error.

Guía del Integrador 49 Versión 5.1.0


Menús
Los menús se indican dentro del elemento <Menus> en sucesivos elementos <Menu>:

XML:

<Menus>
<Menu Id="401" Name="Menú Merienda" VatId="3" FamilyId="104"
ButtonText="M.Merienda" Color="#341122" Order="1"
UseAsDirectSale="true" Tag="MM" PLU="0001">
<Barcodes>
<Barcode Value="15998763"/>
</Barcodes>
<Prices>
<Price SaleCenterId="10" MainPrice="9.00"/>
<Price SaleCenterId="11" MainPrice="10.00"/>
</Prices>
<MenuGroups>
<MenuGroup Name="Bebida" MaxItems="1"
PreparationOrderId="1">
<Products>
<Product Id="100"/>
<Product Id="101"/>
</Products>
</MenuGroup>
<MenuGroup Name="Bocadillo" MaxItems="1"
PreparationOrderId="2">
<Products>
<Product Id="301"/>
<Product Id="302"/>
</Products>
</MenuGroup>
</MenuGroups>
</Menu>
</Menus>

JSON:

Guía del Integrador 50 Versión 5.1.0


{
"Menus": [
{
"Barcodes": [
{
"BarcodeValue": "15998763"
}
],
"Prices": [
{
"SaleCenterId": 10,
"MainPrice": 9.00
},
{
"SaleCenterId": 11,
"MainPrice": 10.00
}
],
"MenuGroups": [
{
"Products": [
{
"Id": 100
},
{
"Id": 101
}
],
"Name": "Bebida",
"MaxItems": 1,
"PreparationOrderId": 1
},
{
"Products": [
{
"Id": 301
},
{
"Id": 302
}
],
"Name": "Bocadillo",
"MaxItems": 1,
"PreparationOrderId": 2
}
],
"Id": 401,
"Name": "Menú Merienda",
"VatId": 3,
"FamilyId": 104,
"ButtonText": "M.Merienda",

Guía del Integrador 51 Versión 5.1.0


"Color": "#341122",
"Order": 1,
"UseAsDirectSale": true,
"Tag": "MM",
"PLU": "0001"
}
]
}

Para cada menú podrá indicar información similar a la del producto, pero además deberá indicar
los grupos que forman parte del menú:

Id [Obligatorio]
Identificador numérico único del menú. Este Id se utilizará también para crear el
formato base del menú. Deberá asegurarse además de que este Id no coincide con
ningún Id de producto.

Name [Obligatorio]
Nombre del menú.

VatId [Obligatorio]
Id del impuesto de venta asociado al menú.

FamilyId
Id de la familia a la que pertenece el menú. Si el menú no pertenece a ninguna familia,
deberá incluirse este atributo vacío.

ButtonText
Texto mostrado en el botón asociado al menú en el punto de venta.

Color
Color del botón asociado al menú el punto de venta. El formato es #RRGGBB, como los
ejemplos mostrados en el anexo I.

Barcodes
Lista de códigos de barras del menú. Cada uno de ellos debe indicarse en un elemento
Barcode con un único atributo Value que contenga el código de barras.

Order
Posición del menú dentro de su familia en el punto de venta. A la hora de mostrar los
productos y menús de una determinada familia, se ordenarán por el valor introducido
en este campo. Los productos y menús para los que no se haya indicado el orden,
aparecerán al final de la lista de los productos.

UseAsDirectSale
Indica si el menú debe tratarse como un producto de venta directa (true) o no
(false). Si es así, el menú se mostrará junto a los grupos de productos en la pantalla
de venta, y la posición indicada en el atributo Order será relativa a la posición de las
familias y otros productos de venta directa, no a la posición de los productos de esta
familia.

Guía del Integrador 52 Versión 5.1.0


SaleableAsMain
Indica si el menú puede venderse (true) o no (false).

Tag [Obligatorio]
Texto usado en la comanda impresa y en los monitores de cocina para distinguir los
platos de este menú. Si no se desea utilizar ningún indicador, este campo debe dejarse
vacio.

PLU
Código PLU del menú. Debe ser una cadena numérica. Ejemplos: 0001, 33232, etc.

Prices
Precios del menú en cada centro de venta y tarifa especial. Cada precio debe indicarse
en un elemento Price con los siguientes atributos:

SaleCenterId o SpecialPriceListId
Id del centro de venta o tarifa especial cuyos precios se quieren establecer.

MainPrice
Precio de venta del menú. El precio será con impuestos incluidos o no
dependiendo de la configuración del centro de venta o tarifa. Si deja el
atributo vacío, Ágora solicitará el precio en el momento de la venta.

MenuGroups [Obligatorio]
Grupos de platos que forman el menú. Deberá indicar al menos un grupo de platos.
Cada uno de ellos deberá especificarse en un element MenuGroup con los siguientes
atributos:

Name [Obligatorio]
Nombre del grupo de platos.

MaxItems [Obligatorio]
Número máximo de platos de este grupo que puede pedirse.

PreparationOrderId [Obligatorio]
Id del orden de preparación que se usará al pedir los platos de este grupo.

Products
Lista de productos que se pueden elegir para este grupo de platos. Cada uno
de ellos debe indicarse en un elemento Product con un único atributo Id que
contenga el Id del producto.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Internamente Ágora creará el formato de venta base del menú usando el mismo Id que el
menú. Si ya existiese un formato de venta con ese Id en la base de datos asociado a otro menú,
por ejemplo porque ha sido creado manualmente desde la administración de Ágora, se generará
un error. Además, deberá asegurarse de que no existe ningún producto o menú en la base de
datos con el Id asignado.

Guía del Integrador 53 Versión 5.1.0


Para cada grupo de platos de los menús, Ágora creará automáticamente una categoría llamada
"Grupo de Menú", por ejemplo, "Bebidas de Menú del Día". La gestión de estas categorías es
realizada automáticamente por Ágora y no deberán ser modificadas desde la administración de
Ágora.

Promociones
Las promociones se indican dentro del elemento <Offers> en sucesivos elementos <Offer>:

XML:

<Offers>
<Offer
Id="2"
Name="50%"
Code="50%"
ApplicationMode="AllTickets"
FromDate="2016-02-17"
ToDate="2016-03-17"
StartTime="00:00"
EndTime="23:59"
ApplyOnMonday="true"
ApplyOnTuesday="true"
ApplyOnWednesday="true"
ApplyOnThursday="true"
ApplyOnFriday="true"
ApplyOnSaturday="true"
ApplyOnSunday="true">

<!-- Contiene sólo uno de los siguientes tres elementos dependiendo


del tipo de promoción -->

<Discount>...</Discount>
<Custom>...</Custom>
<FixedPrice>...</FixedPrice>

</Offer>
</Offers>

JSON:

Guía del Integrador 54 Versión 5.1.0


{
"Offers": [
{
"Discount": {},
"Custom": {},
"FixedPrice": {},
"Id": 2,
"Name": "50%",
"Code": "50%",
"ApplicationMode": "AllTickets",
"FromDate": "2016-02-17",
"ToDate": "2016-03-17",
"StartTime": "00:00",
"EndTime": "23:59",
"ApplyOnMonday": true,
"ApplyOnTuesday": true,
"ApplyOnWednesday": true,
"ApplyOnThursday": true,
"ApplyOnFriday": true,
"ApplyOnSaturday": true,
"ApplyOnSunday": true
}
]
}

Para cada promoción podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único de la promoción.

Name [Obligatorio]
El nombre de la promoción. Este campo no puede ser vacío

Code [Obligatorio]
Código de la promoción. Este campo no puede ser vacío

ApplicationMode [Obligatorio]
Si el valor es "AllTickets" indica que la promoción se aplica automáticamente a todos
los tickets o por el contrario es una promoción que puede asociarse a clientes o tickets
manualmente cuando el valor es "SelectedCustomerOrTickets".

FromDate [Obligatorio]
Fecha de inicio de la promoción. El fomato soportado es de la forma aaaa-mm-dd

ToDate [Obligatorio]
Fecha de fin de la promoción. El fomato soportado es de la forma aaaa-mm-dd

Guía del Integrador 55 Versión 5.1.0


StartTime [Obligatorio]
Hora de inicio de la promoción. El formato soportado es de la forma HH:mm. Para
indicar que la promoción está activa durante todo el día, deberá marcar como
StartTime las 00:00 y como EndTime las 23:59.

EndTime [Obligatorio]
Hora de fin de la promoción. El formato soportado es de la forma HH:mm

ApplyOnMonday [Obligatorio]
Indica si la promoción está vigente los lunes.

ApplyOnTuesday [Obligatorio]
Indica si la promoción está vigente los martes.

ApplyOnWednesday [Obligatorio]
Indica si la promoción está vigente los miércoles.

ApplyOnThursday [Obligatorio]
Indica si la promoción está vigente los jueves.

ApplyOnFriday [Obligatorio]
Indica si la promoción está vigente los viernes.

ApplyOnSaturday [Obligatorio]
Indica si la promoción está vigente los sábados.

ApplyOnSunday [Obligatorio]
Indica si la promoción está vigente los domingos.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Cada promoción además de la configuración básica llevará la configuración de los descuentos y


productos a los que se aplica dependiendo del tipo de promoción.

▪ Descuento Directo: su configuración se indica dentro del elemento <Discount>.

▪ Pack de Productos a Precio Fijo: su configuración se indica dentro del elemento


<FixedPrice>.

▪ Personalizada: su configuración se indica dentro del elemento <Custom>.

Descuento Directo
Se corresponde con la promoción de "Descuento Directo" que aparece en el manual de Ágora.

Esta promoción se encuentra dentro del elemento <Discount> que contiene el elemento
<Products> con los productos a los que se aplica la promoción:

Guía del Integrador 56 Versión 5.1.0


XML:

<Discount DiscountRate="0.5000" RequiredQuantity="1.000" ApplyBy="Groups">


<Products>
<Product Id="12" />
<Product Id="13" />
<Product Id="14" />
<Product Id="91" />
<Product Id="92" />
<Product Id="93" />
</Products>
</Discount>

JSON:

{
"Discount": {
"Products": [
{
"Id": 12
},
{
"Id": 13
},
{
"Id": 14
},
{
"Id": 91
},
{
"Id": 92
},
{
"Id": 93
}
],
"DiscountRate": 0.5000,
"RequiredQuantity": 1.000,
"ApplyBy": "Groups"
}
}

Los atributos disponibles son los siguientes:

DiscountRate [Obligatorio si no asignamos CashDiscount]


Tanto por uno de descuento que aplica la promoción.

CashDiscount [Obligatorio si no asignamos DiscountRate]


Descuento en moneda que se aplica la promoción.

Guía del Integrador 57 Versión 5.1.0


RequiredQuantity [Obligatorio]
Cantidad necesaria que se debe comprar de los productos indicados para aplicar la
promoción.

ApplyBy
Modo de aplicación de la promoción. Los posibles valores para este atributo son
"Groups" y "Units". Este atributo, si está presente, modifica el comportamiento de
Ágora a la hora de aplicar la promoción. Con el valor "Units", una vez que se alcancen
la cantidad requerida de unidades, se aplicará la promoción a todas ellas. Con el valor
"Groups" la promoción se aplicará a cada tantas unidades como se hayan establecido.

Nota: Sólo es necesario asignar CashDiscount o DiscountRate, no ambos.

Para producto, debería indicarse:

Id [Obligatorio]
Identificador del producto.

Pack de Productos a Precio Fijo


Se corresponde con la promoción "Pack de Productos a Precio Fijo" que aparece en el manual de
Ágora.

Esta promoción se encuentra dentro del elemento <FixedPrice> que contiene el elemento
<Products> con los productos a los que se aplica la promoción y por otro lado el elemento
<Prices> con los precios por tarifa o centro de venta del pack de productos:

XML:

<FixedPrice RequiredQuantity='2'>
<Products>
<Product Id='1'/>
<Product Id='2'/>
<Product Id='3'/>
<Product Id='4'/>
</Products>
<Prices>
<Price PriceListId='11' Value='1.6'/>
<Price PriceListId='12' Value='1.6'/>
</Prices>
</FixedPrice>

JSON:

Guía del Integrador 58 Versión 5.1.0


{
"FixedPrice": {
"Products": [
{
"Id": 1
},
{
"Id": 2
},
{
"Id": 3
},
{
"Id": 4
}
],
"Prices": [
{
"PriceListId": 11,
"Value": 1.6
},
{
"PriceListId": 12,
"Value": 1.6
}
],
"RequiredQuantity": 2
}
}

Los atributos disponibles en el elemento <FixedPrice> son los siguientes:

RequiredQuantity [Obligatorio]
Cantidad necesaria que se debe comprar de los productos para aplicar la promoción.

Para cada producto será necesario indicar:

Id [Obligatorio]
Identificador del producto.

Cada precio se indicará de la siguiente manera:

PriceListId [Obligatorio]
Id de la tarifa cuyos precios se quieren establecer.

Value [Obligatorio]
Precio de venta del pack de productos. El precio será con impuestos incluidos o no
dependiendo de la configuración del centro de venta o tarifa.

Guía del Integrador 59 Versión 5.1.0


Personalizada
Se corresponde con la promoción "Personalizada" y permite relizar el resto de promociones
disponibles en Ágora así como promociones más complejas.

Esta promoción se encuentra dentro del elemento <Custom> que contiene el elemento
<SourceProducts> con los productos que es necesario comprar para que se aplique la
promoción y el elemento <TargetProducts> con los productos sobre los que se aplica el
descuento de la promoción:

XML:

<Custom RequiredSourceQuantity="1.000"
MaxTargetQuantity="1.000"
DiscountRate="1.0000">
<SourceProducts >
<Product Id="19" />
<Product Id="20" />
<Product Id="21" />
<Product Id="22" />
<Product Id="23" />
</SourceProducts>
<TargetProducts>
<Product Id="19" />
<Product Id="20" />
<Product Id="21" />
<Product Id="22" />
<Product Id="23" />
</TargetProducts>
</Custom>

JSON:

Guía del Integrador 60 Versión 5.1.0


{
"Custom": {
"SourceProducts": [
{
"ProductId": 19
},
{
"ProductId": 20
},
{
"ProductId": 21
},
{
"ProductId": 22
},
{
"ProductId": 23
}
],
"TargetProducts": [
{
"ProductId": 19
},
{
"ProductId": 20
},
{
"ProductId": 21
},
{
"ProductId": 22
},
{
"ProductId": 23
}
],
"RequiredSourceQuantity": 1.000,
"MaxTargetQuantity": 1.000,
"DiscountRate": "1.0000"
}
}

Los atributos disponibles son los siguientes:

RequiredSourceQuantity [Obligatorio]
Cantidad necesaria que se debe comprar de los productos indicados para aplicar la
promoción.

Guía del Integrador 61 Versión 5.1.0


MaxTargetQuantity [Obligatorio]
Cantidad de productos sobre los que se aplicará el descuento de la promoción.

DiscountRate [Obligatorio si no asignamos CashDiscount]


Tanto por uno de descuento que aplica sobre los productos a los que se aplica la
promoción.

CashDiscount [Obligatorio si no asignamos DiscountRate]


Descuento en moneda que aplica sobre los productos a los que se aplica la promoción.

Nota: Sólo es necesario asignar CashDiscount o DiscountRate, no ambos.

Los productos que se deben comprar para promoción se establecen en el elemento


SourceProducts indicando para cada uno:

Id [Obligatorio]
Identificador del producto.

Los productos que a los que se aplicará el descuento se establecen en el elemento


SourceProducts indicando para cada uno:

Id [Obligatorio]
Identificador del producto.

Notas Predefinidas
Las notas predefinidas se indican dentro del elemento <PredefinedNotes> en sucesivos
elementos <PredefinedNote>:

XML:

Guía del Integrador 62 Versión 5.1.0


<PredefinedNotes>
<PredefinedNote Id="100" Text="Sin Sal" ValidForAllGroups="true"
Priority="5"
ButtonText="Sin Sal" Color="#ffffff" />
<ValidGroups/>
</PredefinedNote>
<PredefinedNote Id="101" Text="Muy Hecho"
ValidForAllGroups="false" Priority="5">
<ValidGroups>
<Family Id="3"/>
<Family Id="24"/>
</ValidGroups>
</PredefinedNote>
<PredefinedNote Id="102" Text="Muy Hecho"
DeletionDate="2012-01-31T10:00:00">
<ValidGroups/>
</PredefinedNote>
</PredefinedNotes>

JSON:

Guía del Integrador 63 Versión 5.1.0


{
"PredefinedNotes": [
{
"ValidGroups": [],
"Id": 100,
"Text": "Sin Sal",
"ValidForAllGroups": true,
"Priority": 5
},
{
"ValidGroups": [
{
"FamilyId": 3
},
{
"FamilyId": 24
}
],
"Id": 101,
"Text": "Muy Hecho",
"ValidForAllGroups": false,
"Priority": 5
},
{
"ValidGroups": [],
"Id": 102,
"Text": "Muy Hecho",
"DeletionDate": "2012-01-31T10:00:00"
}
]
}

Para cada nota predefinida podrá indicar los siguientes atributos:

Id [Obligatorio]
Identificador numérico único de la nota predefinida.

Text [Obligatorio]
Texto de la nota predefinida.

Priority [Obligatorio]
Prioridad usada para ordenar las notas predefinidas a la hora de mostrarlas en la
pantalla de selección de notas. Las notas con un valor de Priority más bajo serán
mostradas antes.

ValidForAllGroups [Obligatorio]
Indica si la nota predefinida se puede aplicar a todas las familias y categorías de
productos (true) o sólo a algunas familias (false).

Guía del Integrador 64 Versión 5.1.0


ValidGroups [Obligatorio]
Lista de familias a las que se puede aplicar la nota predefinida. Cada familia debe
indicarse en un elemento Family con un único atributo Id que contenga el identificador
único de la familia. Si la nota predefinida está marcada como
ValidForAllGroups='false', sólo se podrá aplicar a las familias incluidas en este
elemento. Tenga en cuenta que las familias deben existir en las base de datos o estar
definidas en el fichero xml antes de las notas predefinidas para poder importarlas
correctamente.

ButtonText
Texto mostrado en el botón asociado a la nota predefinida en el punto de venta.

Color
Color del botón asociado a la nota en el punto de venta. El formato es #RRGGBB,
como los ejemplos mostrados en el anexo I.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Pedidos
El formato de importación de los pedidos es igual que el formato usado para la exportación,
con la salvedad de que no es obligatorio añadir el elemento <Totals> porque será recalculado
en base a los descuentos y líneas introducidas.

En caso de que el albarán no incluya una dirección de entrega se le pondrá la dirección de


entrega por defecto del cliente asociado.

Importante: antes de importar cualquier pedido en Ágora debe de darse de alta


la serie con la que se va a importar. No se dejará importar un pedido con la serie
que esté activada en Ágora en ese momento.

A la hora de importar un pedido en Ágora se tratará de distinta manera según su estado.


Cuando el pedido a importar tiene un estado "Pendiente" (Pending) o "Facturado" (Invoiced) se
tratará de la siguiente manera:

▪ Si el pedido no existía en Ágora, se guardará un pedido que puede ser editado desde
Ágora, independientemente de que su estado en el documento XML sea "Pendiente" o
"Facturado". Para que un pedido quede como facturado, será necesario importar la
factura correspondiente, y será en ese momento cuando el pedido dejará de ser
editable.

▪ Si existía en Ágora y no había sido facturado o cancelado previamente, se sobreescribirá


el pedido anterior con los nuevos datos importados. De esta manerá el pedido quedará
actualizado con las últimas modificaciones.

Guía del Integrador 65 Versión 5.1.0


▪ Si existía en Ágora y ya había sido facturado o cancelado, se ignorará el documento
importado y se respetará la información existente en Ágora.

En cambio, si el pedido que se está importando tiene un estado "Cancelado" (Cancelled):

▪ Si el pedido no existía en Ágora, se guardará el pedido y se emitirá y guardará su


cancelación, por lo que el pedido pasará a estar en estado "Cancelado" y no podrá ser
editado.

▪ Si ya existía en Ágora y no aun no estaba cancelado o facturado, se sobreescribirá el


pedido anterior y se guardará y emitirá su cancelación.

▪ Si ya existía en Ágora y ya se encontraba facturado o cancelado, se ignorará el pedido


importado y se respetará el estado existente en Ágora.

Importante: siempre que se importa un pedido con estado "Cancelado" en una


central de Ágora, el pedido de origen que se encuentre en el local quedará
invalidado y no podrá modificarse.

Albaranes
El formato de importación de los albaranes es igual que el formato usado para la exportación.
Con la salvedad de que no es obligatorio añadir el elemento <Totals> porque será recalculado
en base a los descuentos y líneas introducidas.

En caso de que el albarán no incluya una dirección de entrega se le pondrá la dirección de


entrega por defecto del cliente asociado.

Importante: antes de importar cualquier albarán en Ágora debe de darse de alta


la serie con la que se va a importar. No se permitirá importar un albarán con la
serie que esté usando Ágora, a menos que sea para realizar su cancelación.

A la hora de importar un albarán en Ágora se tratará de distinta manera según su estado.


Cuando el albarán importado tiene un estado "Pendiente" (Pending) o "Facturado" (Invoiced) se
tratará de la siguiente manera:

▪ Si el albarán no existía en Ágora, se guardará un albarán que puede ser editado desde
Ágora independientemente de que su estado en el documento XML sea "Pendiente" o
"Facturado". Para que un albarán quede como facturado, será necesario importar la
factura correspondiente, y será en ese momento cuando el albarán dejará de ser
editable.

▪ Si el albarán existía en Ágora pero todavía no había sido facturado o cancelado, se


sobrescribirá el albarán anterior con los datos importados. De esta manerá el albarán
quedará actualizado con las últimas modificaciones.

▪ Si el albarán existía en Ágora y ya estaba facturado o cancelado, se ignorará el albarán


importado y se respetará la información existente en Ágora.

Guía del Integrador 66 Versión 5.1.0


En cambio, si el albarán que se está importando tiene un estado "Cancelado" (Cancelled):

▪ Si el albarán no existía en Ágora, se guardará un albarán que no puede ser editado


desde Ágora (por ejemplo, no puede reabrirse ni facturarse).

▪ Si el albarán ya existía en Ágora pero todavía no estaba cancelado o facturado, se


sobreescribirá el albarán anterior y se marcará como que no puede ser editado. De esta
forma, quedará registrado un albarán con las últimas modificaciones, pero no se
permitirá su edición.

▪ Si el albarán ya existía en Ágora y ya estaba facturado o cancelado, se ignorará el


albarán importado y se respetará el estado existente en Ágora.

Importante: siempre que se importa un albarán, se generan los movimientos de


stock correspondientes. Si se importa un albarán ya existente en Ágora, al
sobreescribirlo se actualizarán también sus movimientos de stock. En el caso de
albaranes cancelados, los movimientos de stock se mantienen. Un albarán
cancelado sólo implica que ya no puede ser modificado desde el TPV (reabierto,
facturado, etc.), pero sus movimientos de stock siguen siendo válidos. En el caso
de querer hacer una devolución de un albarán, será necesario enviar la
cancelación del albarán original, y enviar un nuevo albarán en negativo para
recuperar el stock; este albarán en negativo deberá tener estado cancelado para
evitar que sea facturado.

Importante: siempre que se importa un albarán con estado "Cancelado" en una


central de Ágora, el albarán de origen que se encuentre en el local quedará
invalidado y no podrá modificarse.

Facturas
El formato de importación de las facturas es igual que el formato usado para la exportación.
Con la salvedad de que no es obligatorio añadir cualquier elemento <Totals> porque será
recalculado en base a los descuentos y líneas introducidas.

Importante: antes de importar cualquier factura en Ágora debe de darse de alta


la serie con la que se va a importar. No se dejará importar una factura con la
serie que esté activada en Ágora.

Si se importa una factura que ya existe en Ágora, sea cual sea su contenido se ignorará porque
ninguna factura puede ser modificada y por tanto es seguro descartar la nueva factura.
Asimismo, si se importa una factura que referencia a otra, la factura referenciada deberá existir
previamente en Ágora.

Guía del Integrador 67 Versión 5.1.0


A la hora de importar una factura que no esté dada de alta se tratará de distinta manera según
su contenido:

▪ Si el contenido de la factura son albaranes, se crearán los albaranes correspondientes y


se emitirá la factura. Si los albaranes ya existían en la base de datos, su contenido será
sobreescrito con la información procedente del documento XML, siguiendo las reglas
descritas en la importación de albaranes.

▪ Si el contenido es un ticket que referencia a un pedido, se creará el pedido


correspondiente y se realizará la facturación de dicho pedido. Si el pedido ya existía en
la base de datos, su contenido será sobreescrito con la información procedente del
documento XML, siguiendo las reglas descritas en la importación de pedidos.

▪ Si el contenido es simplemente un ticket, se creará la factura.

Notas especiales sobre redondeo de facturas


En ocasiones pueden existir desajustes entre los totales de la factura calculados por Ágora y por
el sistema que la generó, generalmente basados por diferencias de redondeo. Para permitir que
el importe total de la factura coincida en ambos sistemas, es posible forzar a que Ágora haga
coincidir el total de la factura con los pagos realizados. Para ello, Ágora añadirá una línea con un
artículo para compensar las diferencias de redondeo al cuerpo de la factura y, si fuera
necesario, ajustará los descuentos a pie de ticket. Este comportamiento sólo está disponible
para facturas generadas a partir de un único ticket (no funcionará con las facturas de varios
albaranes). Para habilitarlo, es necesario indicar en el nodo Invoice el valor
FixTotalToPayments a true:

XML:

<Invoice Serie="F" Number="1" BusinessDay="2014-09-29"


...
FixTotalToPayments="true"
...>

JSON:

{
"Serie": "F",
"Number": 1,
"BusinessDay": "2014-09-29",
...
"FixTotalToPayments": true
...
}

Pedidos a Proveedor
El formato de importación de los pedidos a proveedor es igual que el formato usado para la
exportación, con la salvedad de que no es obligatorio añadir el elemento <Totals> y

Guía del Integrador 68 Versión 5.1.0


<TotalAmount> para cada línea del pedido porque los totales serán recalculados en base a los
descuentos y líneas introducidas.

Importante: Al contrario que en los Pedidos de venta, no es necesario crear una


serie específica para importar Pedidos a Proveedor, aunque la serie indicada debe
existir en Ágora. Sin embargo es importante resaltar que, si se importa un Pedido
a Proveedor con un número de serie inferior al último número de dicha serie, se
actualizará el documento que tuviera asociado dicho número, y la serie
mantendrá su contador inalterado. Si se importa un Pedido con un número de
serie superior al último de dicha serie, el contador de la misma actualizará su
contador para que su último número coincida con el número de serie del Pedido
que se importa.

A la hora de importar un pedido a proveedor en Ágora se tratará de distinta manera según su


estado y si se encontraba registrado previamente en Ágora:

▪ Si el pedido no existía en Ágora, se guardará un pedido que puede ser editado desde
Ágora ignorando la cantidad servida si se ha indicado. Cuando el pedido a importar
tiene un estado "Borrador" (Draft) se mantendrá como tal. Si por el contrario tiene un
estado distinto como "Confirmado" (Confirmed), "Servido Parcialmente"
(PartialDelivery) o "Servido" (Delivered), el pedido se importará como "Confirmado"
(Confirmed).

▪ Si el pedido existía en Ágora y no está servido (estado "Borrador" o "Confirmado"), se


sobreescribirá el pedido anterior con los nuevos datos importados. De esta manerá el
pedido quedará actualizado con las últimas modificaciones.

▪ Si el pedido existía en Ágora y está servido, total o parcialmente, se ignorará el


documento importado y se respetará la información existente en Ágora.

Albaranes de Proveedor
El formato de importación de los albaranes es igual que el formato usado para la exportación.
Con la salvedad de que no es obligatorio añadir el elemento <Totals> y <TotalAmount> de las
líneas del albarán porque serán recalculados en base a los descuentos y líneas introducidas.

Importante: Al contrario que en los Albaranes, no es necesario crear una serie


específica para importar Albaranes de Proveedor, aunque la serie indicada debe
existir en Ágora. Sin embargo es importante resaltar que, si se importa un
Albarán de Proveedor con un número de serie inferior al último número de dicha
serie, se actualizará el documento que tuviera asociado dicho número, y la serie
mantendrá su contador inalterado. Si se importa un Albarán con un número de
serie superior al último de dicha serie, el contador de la misma actualizará su
contador para que su último número coincida con el número de serie del Albarán
que se importa.

Guía del Integrador 69 Versión 5.1.0


A la hora de importar un albarán de proveedor en Ágora se tratará de distinta manera según su
estado y si existía o no en Ágora:

▪ Si el albarán no existía en Ágora, se guardará un albarán que puede ser editado desde
Ágora independientemente de que su estado en el documento XML sea "Pendiente" o
"Facturado". Para que un albarán quede como facturado, será necesario importar la
factura de proveedor correspondiente, y será en ese momento cuando el albarán dejará
de ser editable. Si el albarán está sirviendo líneas de pedidos que no existen en Ágora
se producirá un error de importación. Los pedidos que se estén sirviendo en el albarán
quedarán marcados como "Servidos" o "Servidos Parcialmente".

▪ Si el albarán existía en Ágora pero todavía no había sido facturado o cancelado, se


sobrescribirá el albarán anterior con los datos importados. De esta manerá el albarán
quedará actualizado con las últimas modificaciones y los pedidos servidos quedarán
marcados como "Servidos" o "Servidos Parcialmente".

▪ Si el albarán existía en Ágora y ya estaba facturado, se ignorará el albarán importado y


se respetará la información existente en Ágora.

Importante: siempre que se importa un albarán de proveedor, se generan los


movimientos de stock correspondientes. Si se importa un albarán ya existente en
Ágora, al sobreescribirlo se actualizarán también sus movimientos de stock.

Facturas a Proveedor
El formato de importación de las facturas es igual que el formato usado para la exportación.
Con la salvedad de que no es obligatorio añadir cualquier elemento <Totals> porque será
recalculado en base a los descuentos y líneas introducidas.

Importante: Al contrario que en las Facturas, no es necesario crear una serie


específica para importar Facturas de Proveedor, aunque la serie indicada debe
existir en Ágora. Sin embargo es importante resaltar que, si se importa una
Factura de Proveedor con un número de serie inferior al último número de dicha
serie, se actualizará el documento que tuviera asociado dicho número, y la serie
mantendrá su contador inalterado. Si se importa una Factura con un número de
serie superior al último de dicha serie, el contador de la misma se actualizará
para que su último número coincida con el número de serie de la Factura que se
importa.

A la hora de importar una factura de proveedor en Ágora se tratará de distinta manera según su
estado y si existía o no en Ágora:

▪ Si la factura no existía en Ágora, esta se importará con el estado indicado, y


reimportará los albaranes que se estén importando en la factura. Esto marcará dichos
albaranes como "Facturados".

▪ Si la factura existía en Ágora, será reimportada marcando como facturados todos los
albaranes que se incluyan con la factura. Si la factura incluye pagos que la pagan

Guía del Integrador 70 Versión 5.1.0


completamente, la factura se importará con el estado "Pagada", si no, será importada
con el estado "Pendiente de Pago".

Importante: Para marcar una factura como "Contabilizada" ha de importarse con


la propiedad Accounted con el valor true. Además, para que esta importación sea
válida la factura ha de estar pagada completamente y, por tanto, estar en estado
"Pagado".

Formato de fichero de exportación de datos de ventas y


compras
El fichero de exportación de datos de Ágora permite obtener la información generada en el
punto de venta, incluyendo Facturas, Cargos a Cuenta, Movimientos de Caja, Cierres de Caja y
Cierres de Sistema. Así mismo también permite obtener los documentos de compra realizados
incluyendo Pedidos a Proveedor, Albaranes de Entrada y Facturas de Proveedor.

Se trata de un fichero xml con las siguientes secciones:

Guía del Integrador 71 Versión 5.1.0


<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Export>
<CashTransactions>
<!-- Movimientos de Caja -->
</CashTransactions>
<SalesOrders>
<!-- Pedidos -->
</SalesOrders>
<DeliveryNotes>
<!-- Albaranes -->
</DeliveryNotes>
<Invoices>
<!-- Facturas -->
</Invoices>
<PosCloseOuts>
<!-- Cierres de Caja -->
</PosCloseOuts>
<SystemCloseOuts>
<!-- Cierres de Caja -->
</SystemCloseOuts>
<PurchaseOrders>
<!-- Pedidos a Proveedor -->
</PurchaseOrders>
<IncomingDeliveryNotes>
<!-- Albaranes de Entrada -->
</IncomingDeliveryNotes>
<PurchaseInvoices>
<!-- Facturas de Proveedor -->
</PurchaseInvoices>
</Export>

También puede tratarse de un fichero JSON con las siguientes secciones:

Guía del Integrador 72 Versión 5.1.0


{
"CashTransactions": [
/* Movimientos de Caja */
],
"SalesOrders": [
/* Pedidos */
],
"DeliveryNotes": [
/* Albaranes */
],
"Invoices": [
/* Facturas */
],
"PosCloseOuts": [
/* Cierres de Caja */
],
"SystemCloseOuts": [
/* Cierres de Caja */
],
"PurchaseOrders": [
/* Pedidos a Proveedor */
],
"IncomingDeliveryNotes": [
/* Albaranes de Entrada */
],
"PurchaseInvoices": [
/* Facturas de Proveedor */
]
}

Los ejemplos que se incluyen en este documento son orientativos y puede que
no cubran todos los casos existentes. Le recomendamos encarecidamente que,
además de seguir los textos incluidos en este documento, utilice la versión de
demostración de Ágora para verificar el formato de ficheros.

La información del fichero se generará para la fecha de negocio indicada como parámetro al
ejecutar la aplicación ais.exe. Si no se indica una fecha de negocio, se usará el día actual como
fecha de negocio.

Sólo se incluirán en el documento aquellas secciones que tengan datos. Por ejemplo, si no se ha
generado ninguna factura o no hay ningún cierre de caja, estas secciones no aparecerán en el
documento.

Los campos numéricos utilizan como separador de decimales el punto '.' y NO


utilizan separador de millares.

Guía del Integrador 73 Versión 5.1.0


Los campos de tipo fecha utilizando como formato aaaa-mm-dd. Si además
incluye la hora, el formato es aaaa-mm-ddThh:mm:ss, por ejemplo
2012-01-29T21:00:54.

Movimientos de Caja
Los movimientos de caja se indican dentro del elemento CashTransactions en sucesivos
elementos CashTransaction:

XML:

<CashTransactions>
<CashTransaction Id="1" PosId="1" UserId="3"
BusinessDay="2014-09-29" Date="2014-09-29T12:06:46"
Amount="500.00" Supplier="Casbega"
Description="Devolución de Mercancía" />
<CashTransaction Id="2" PosId="1" UserId="3"
BusinessDay="2014-09-29" Date="2014-09-29T12:07:20"
Amount="-100.00" Supplier="Fontanero"
Description="Grifo WC Caballeros" />
</CashTransactions>

JSON:

{
"CashTransactions": [
{
"Id": 1,
"PosId": 1,
"UserId": 3,
"BusinessDay": "2014-09-29",
"Date": "2014-09-29T12:06:46",
"Amount": 500.00,
"Supplier": "Casbega",
"Description": "Devolución de Mercancía"
},
{
"Id": 2,
"PosId": 1,
"UserId": 3,
"BusinessDay": "2014-09-29",
"Date": "2014-09-29T12:07:20",
"Amount": -100.00,
"Supplier": "Fontanero",
"Description": "Grifo WC Caballeros"
}
]
}

Guía del Integrador 74 Versión 5.1.0


La información indicada para cada movimiento de caja es:

Id
Identificador del movimiento de caja.

PosId
Identificador del punto de venta donde se ha realizado el movimiento de caja.

UserId
Identificador del usuario que ha realizado el movimiento de caja.

BusinessDay
Fecha de negocio en que se ha realizado el movimiento de caja con formato aaaa-mm-
dd.

Date
Fecha y hora en que se ha realizado el movimento de caja con formato aaaa-mm-
ddThh:mm:ss.

Amount
Importe del movimiento de caja. Si es un movimiento de entrada, el importe será
positivo, y si es de salida, el importe será negativo.

Supplier
Proveedor para el que se ha realizado el movimiento de caja.

Description
Motivo o concepto del movimiento de caja.

Pedidos
Los pedidos se indican dentro del elemento SalesOrders en sucesivos elementos SalesOrder:

XML:

Guía del Integrador 75 Versión 5.1.0


<SalesOrders>
<SalesOrder Serie="P" Number="1" VatIncluded="true"
BusinessDay="2014-09-29" Date="2014-09-29T12:08:00"
Guests="" Status="Pending"
AutoPrepare="Always">

<Customer Id="2" FiscalName="Sol y Sombra, S.L." Cif="B0018912"


Street="C/ García de Paredes, 10"
City="Madrid" Region="Madrid" ZipCode="28010"
ApplySurcharge="false"
AccountCode="43100001"/>

<DeliveryAddress Street="C/ García de Paredes, 10"


City="Madrid" Region="Madrid" ZipCode="28010" />

<Pos Id="1" Name="TPV" />


<Workplace Id="1" Name="Local" />
<User Id="3" Name="Pedro" />

<SaleCenter Id="1" Name="Barra" Location="B1"/>


<Notes><![CDATA[]]> </Notes>

<Lines>
<Line
Index="0" Type="Standard"
CreationDate="2014-09-29T12:08:00"
ParentIndex="" MenuGroup=""
ProductId="16" ProductName="Hamburguesa doble"
SaleFormatId="16"
SaleFormatName="Hamburguesa doble"
SaleFormatRatio="1.000"
MainBarcode=""
ProductPrice="3.25"
Quantity="1.000"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
UnitPrice="4.25"
DiscountRate="0.0000" CashDiscount="0.0000"
TotalAmount="4.25"
UnitCostPrice="0.00"
TotalCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU="598"
FamilyId="1"
FamilyName="Hamburguesas"
PreparationOrderId=""
PreparationOrderName="">
<Addins>
<Addin ProductId="18" ProductName="Bacon"
SaleFormatId="18"

Guía del Integrador 76 Versión 5.1.0


SaleFormatName="Bacon"
SaleFormatRatio="1.000"
MainBarcode=""
ProductPrice="0.50"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
ProductCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""
FamilyId="2"
FamilyName="Complementos Hamburguesas" />
<Addin ProductId="17"
ProductName="Queso"
SaleFormatId="17"
SaleFormatName="Queso"
MainBarcode=""
SaleFormatRatio="1.000"
ProductPrice="0.50"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
ProductCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""
FamilyId="2"
FamilyName="Complementos Hamburguesas" />
</Addins>
<Notes><![CDATA[Muy Hecha]]>
</Line>
<Line
Index="1" Type="Standard"
CreationDate="2014-09-29T12:08:00"
ParentIndex="" MenuGroup=""
ProductId="5" ProductName="Fanta Limón"
SaleFormatId="5"
SaleFormatName="Fanta Limón"
SaleFormatRatio="1.000"
MainBarcode=""
ProductPrice="2.50"
Quantity="1.000"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
UnitPrice="2.50"
DiscountRate="0.0000" CashDiscount="0.0000"
TotalAmount="2.50"
UnitCostPrice="0.00"
TotalCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""

Guía del Integrador 77 Versión 5.1.0


FamilyId="3"
FamilyName="Refrescos"
PreparationOrderId=""
PreparationOrderName="" />
</Lines>

<Discounts DiscountRate="0.0050" CashDiscount="0.00" />

<Payments>
<Payment MethodId="2" MethodName="Tarjeta" Amount="-6.85"
PaidAmount="-6.85" ChangeAmount="0.00" PosId="1"
IsPrepayment="true" >
<ExtraInformation>
<![CDATA[Tipo de Tarjeta: MASTERVISA]]>
</ExtraInformation>
</Payment>
</Payments>

<Offers>
<Offer Id="1"/>
</Offers>

<Totals GrossAmount="6.22" NetAmount="5.65"


VatAmount="0.57" SurchargeAmount="0.00">
<Taxes>
<Tax VatRate="0.1000" SurchargeRate="0.0140"
GrossAmount="6.22" NetAmount="5.65"
VatAmount="0.57" SurchargeAmount="0.00" />
</Taxes>
</Totals>

<LoyaltyProgram MemberId="3hRXhZ01Kictq">
<Rewards>
<Reward Id="7cnZDFPw" Name="Descuento de 3€"
Type="CashDiscount" Value="3.00" />
<Reward Id="8xmssMkq" Name="Descuento Cumpleaños"
Type="NamedDiscount" Code="EMPT" />
</Rewards>
</LoyaltyProgram>

</SalesOrder>
</SalesOrders>

JSON:

Guía del Integrador 78 Versión 5.1.0


{
"SalesOrders": [
{
"Customer": {
"Id": 2,
"FiscalName": "Sol y Sombra, S.L.",
"Cif": "B0018912",
"AccountCode": "43100001"
"Street": "C/ García de Paredes, 10",
"City": "Madrid",
"Region": "Madrid",
"ZipCode": "28010",
"ApplySurcharge": false
},
"DeliveryAddress": {
"Street": "",
"City": "",
"Region": "",
"ZipCode": ""
},
"Pos": {
"Id": 1,
"Name": "TPV"
},
"Workplace": {
"Id": 1,
"Name": "Local"
},
"User": {
"Id": "3",
"Name": "Pedro"
},
"SaleCenter": {
"Id": 1,
"Name": "Barra",
"Location": "B1"
},
"Notes": "",
"Lines": [
{
"Addins": [
{
"ProductId": 18,
"ProductName": "Bacon",
"SaleFormatId": 18,
"SaleFormatName": "Bacon",
"SaleFormatRatio": 1.000,
"MainBarcode": "",
"ProductPrice": 0.50,
"VatId": 3,
"VatRate": 0.1000,

Guía del Integrador 79 Versión 5.1.0


"SurchargeRate": 0.0140,
"ProductCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "",
"FamilyId": 2,
"FamilyName": "Complementos Hamburguesas"
},
{
"ProductId": 17,
"ProductName": "Queso",
"SaleFormatId": 17,
"SaleFormatName": "Queso",
"MainBarcode": "",
"SaleFormatRatio": 1.000,
"ProductPrice": 0.50,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"ProductCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "",
"FamilyId": 2,
"FamilyName": "Complementos Hamburguesas"
}
],
"Index": 0,
"Type": "Standard",
"CreationDate": "2014-09-29T12:08:00",
"ParentIndex": null,
"MenuGroup": "",
"ProductId": 16,
"ProductName": "Hamburguesa doble",
"SaleFormatId": 16,
"SaleFormatName": "Hamburguesa doble",
"SaleFormatRatio": 1.000,
"MainBarcode": "",
"ProductPrice": 3.25,
"Quantity": 1.000,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"UnitPrice": 4.25,
"DiscountRate": 0.0000,
"CashDiscount": 0.0000,
"TotalAmount": 4.25,
"UnitCostPrice": 0.00,
"TotalCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",

Guía del Integrador 80 Versión 5.1.0


"PLU": "",
"FamilyId": 1,
"FamilyName": "Hamburguesas",
"PreparationOrderId": null,
"PreparationOrderName": "",
"Notes": "Muy hecha"
},
{
"Index": 1,
"Type": "Standard",
"CreationDate": "2014-09-29T12:08:00",
"ParentIndex": null,
"MenuGroup": "",
"ProductId": 5,
"ProductName": "Fanta Limón",
"SaleFormatId": 5,
"SaleFormatName": "Fanta Limón",
"SaleFormatRatio": 1.000,
"MainBarcode": "",
"ProductPrice": 2.50,
"Quantity": 1.000,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"UnitPrice": 2.50,
"DiscountRate": 0.0000,
"CashDiscount": 0.0000,
"TotalAmount": 2.50,
"UnitCostPrice": 0.00,
"TotalCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "",
"FamilyId": 3,
"FamilyName": "Refrescos",
"PreparationOrderId": null,
"PreparationOrderName": ""
}
],
"Discounts": {
"DiscountRate": 0.0050,
"CashDiscount": 0.00
},
"LoyaltyProgram": {
"MemberId": "3hRXhZ01Kictq",
"Rewards": [
{
"Id": "7cnZDFPw",
"Name": "Descuento de 3€",
"Type": "CashDiscount",
"Value": 3.000000

Guía del Integrador 81 Versión 5.1.0


},
{
"Id": "8xmssMkq",
"Name": "Descuento Cumpleaños",
"Type": "NamedDiscount",
"Code": "EMPT"
}
]
},
"Payments": [
{
"ExtraInformation": "Tipo de Tarjeta: MASTERVISA",
"MethodId": 2,
"MethodName": "Tarjeta",
"Amount": -6.85,
"PaidAmount": -6.85,
"ChangeAmount": 0.00,
"PosId": 1,
"IsPrepayment": true
}
],
"Offers": [
{
"Id": 1
}
],
"Totals": {
"Taxes": [
{
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"GrossAmount": 6.22,
"NetAmount": 5.65,
"VatAmount": 0.57,
"SurchargeAmount": 0.00
}
],
"GrossAmount": 6.22,
"NetAmount": 5.65,
"VatAmount": 0.57,
"SurchargeAmount": 0.00
},
"Serie": "P",
"Number": 1,
"VatIncluded": true,
"BusinessDay": "2014-09-29",
"Date": "2014-09-29T12:08:00",
"Guests": null,
"Status": "Pending",
"AutoPrepare": "Always"
}

Guía del Integrador 82 Versión 5.1.0


]
}

La información indicada para cada pedido es:

Serie
Serie de pedido.

Number
Número de pedido.

BusinessDay
Fecha de negocio en formato aaaa-mm-dd.

Guests
Número de comensales. Vacío si no los tiene asociados.

VatIncluded
Indica si lleva impuestos incluidos (true) o no (false).

Date
Fecha y hora de creación del pedido en formato aaaa-mm-ddThh:mm:ss.

Pos
Identificador único y nombre del TPV en que se creó el pedido.

Workplace
Identificador único y nombre del Local en que se creó el pedido.

User
Identificador único y nombre del usuario que creó el pedido.

Status
Estado del pedido. Puede ser:

Pending
El pedido está pendiente de facturar.

Cancelled
El pedido no ha sido facturado y ya no podrá facturarse nunca más (por
ejempo, porque ha sido cancelado).

Invoiced
El pedido ha sido facturado.

AutoPrepare [Opcional: sólo válido a importar documentos]


Indica si se deben enviar las comandas a los puntos de preparación al importar el
documento. Los posibles valores de este campo son:

▪ Never: No enviar comandas nunca.

▪ Always: Enviar comandas siempre que se importa el documento.

Guía del Integrador 83 Versión 5.1.0


▪ OnlyIfNew: Enviar comandas sólo la primera vez que se importe el documento
(si el documento ya existía y se vuelve a importar, no se volverán a realizar los
envíos).

Customer
Datos del cliente al que se emite la factura, incluyendo:

Id
Identificador único del cliente.

FiscalName
Nombre fiscal del cliente.

Cif
CIF/NIF del cliente.

AccountCode
Código de la cuenta contable del cliente.

Street
Calle del cliente.

City
Población del cliente.

Region
Provincia del cliente.

ZipCode
Código postal del cliente.

ApplySurcharge
Indica si al cliente se le aplica recargo de equivalencia.

DeliveryAddress
Dirección de Entrega del pedido. Es opcional si no se indica se usará la dirección de
facturación del cliente.

Street
Calle del cliente.

City
Ciudad del cliente.

Region
Población del cliente.

ZipCode
Código Postal del cliente.

SaleCenter
Información del centro de venta donde se ha realizado el pedido, incluyendo Id,
Nombre y Ubicación.

Guía del Integrador 84 Versión 5.1.0


Notes
Notas asociadas al pedido.

Lines
Líneas del documento, cada una de ellas en un elemento Line con el siguiente
formato:

Index
Índice de la línea dentro del documento. Las líneas se empiezan a numerar en
0.

Type
Tipo de línea. Puede ser Standard si es una línea normal, MenuHeader si es la
un menú, o MenuItem si es un plato perteneciente a un menú.

CreationDate
Fecha en que se añadió la línea al documento.

ParentIndex
Índice de la línea a la que está asociada ésta. Sólo se utiliza en el caso de
platos de menú, es decir, cuando Type="MenuItem". En ese caso,
ParentIndex es el índice de la línea que contiene el menú al que pertenece
este plato. Si la línea es de otro tipo, este atributo estará vacío.

MenuGroup
Nombre del grupo de platos del menú al que pertenece esta línea. Sólo se
utiliza en el caso de platos de menú, es decir, cuando Type="MenuItem". En
ese caso, MenuGroup es nombre del group de platos al que pertenece este
plato. Si la línea es de otro tipo, este atributo estará vacío.

UserId
Identificador del usuario que añadió la línea.

ProductId
Identificador del producto principal de la línea.

ProductName
Nombre del producto principal de la línea.

SaleFormatId
Identificador del formamto de venta principal de la línea.

SaleFormatName
Nombre del formato de venta principal de la línea.

SaleFormatRatio
Ratio del formato de venta principal de la línea con respecto a su formato
base.

MainBarcode
Código de barras principal del artículo.

Guía del Integrador 85 Versión 5.1.0


ProductPrice
Precio unitario del producto principal de la línea. Este precio incluirá
impuestos o no dependiendo del valor del atributo VatIncluded del ticket.

Quantity
Cantidad.

VatId
Identificador único del impuesto asociado al producto principal de la línea.

VatRate
Tanto por uno de impuesto asociado al producto principal de la línea. Por
ejemplo, si el porcentaje de impuesto es 21%, este valor será 0.21.

SurchargeRate
Tanto por uno de recargo de equivalencia asociado al producto principal de la
línea. Por ejemplo, si el porcentaje de recargo es 4%, este valor será 0.04.

UnitPrice
Precio unitario de la línea incluyendo tanto el producto principal como los
añadidos. Es decir, si el producto principal tiene un precio de 6€ y lleva un
añadido de 2€, el valor de este atributo será 8€. Este precio incluirá
impuestos o no dependiendo del valor del atributo VatIncluded del ticket.

DiscountRate
Tanto por uno de descuento aplicado a la línea. Por ejemplo, si el porcentaje
de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado a la línea.

TotalAmount
Importe total de la línea tras aplicar descuentos. Este valor incluirá impuestos
o no dependiendo del valor del atributo VatIncluded del ticket.

ProductCostPrice
Precio de coste del producto principal.

UnitCostPrice
Precio de coste unitario de la línea, incluyendo tanto el producto principal
como los añadidos.

TotalCostPrice:
Precio de coste total de la línea. Es decir la cantidad por el precio de coste de
la línea.

OfferId
En caso de que la línea pertenezca a una promoción se incluye este elemento
con el identificador de la oferta.

OfferCode
En caso de que la línea pertenezca a una promoción se incluye este elemento
con el código de la oferta.

Guía del Integrador 86 Versión 5.1.0


PreparationTypeId
Identificador del tipo de preparación del producto principal. Si no lleva tipo de
preparación el campo se dejará vacío.

PreparationTypeName [Opcional]
Nombre del tipo de preparación del producto principal.

PLU
PLU del artículo. Puede ser vacía si el artículo no tiene asignada ninguna PLU.

FamilyId
Identificador de la familia a la que pertenece el producto. Puede ser vacío si el
producto no está asociado a ninguna familia.

FamilyName
Nombre de la familia a la que pertenece el producto. Puede ser vacío si el
producto no está asociado a ninguna familia

PreparationOrderId
Identificador del orden de preparación del producto principal. Si no lleva tipo
de preparación el campo se dejará vacío.

PreparationOrderName [Opcional]
Nombre del orden del preparación del producto principal.

Addins
En caso de que haya añadidos al producto principal se incluyen en este
elemento. Para cada uno de ellos se indica información análoga a la del
producto principal salvo que no llevan ordenes de preparación, usan el orden
de preparación del producto principal.

Notes
Notas de preparación asociadas a la línea. Si la línea no lleva notas de
preparación, no se incluirá este elemento.

Discounts
Descuentos del documento

DiscountRate
Tanto por uno de descuento aplicado al documento. Por ejemplo, si el
porcentaje de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado al documento.

Offers
Lista con las promociones asignadas:

Id
Identificador de la promoción.

Totals
Contiene el detalle de los descuentos en pie del documento y de los totales,
desglosándolos por base imponible. La información incluida para cada uno es:

Guía del Integrador 87 Versión 5.1.0


GrossAmount
Importe incluyendo los impuestos.

NetAmount
Importe tras descontar los impuestos.

VatAmount
Cuota correspondiente al impuesto.

SurchageAmount
Cuota correspondiente al recargo de equivalencia.

LoyaltyProgram [Opcional]
Información sobre los datos del participante del sistema de fidelización asociados al
documento en caso de que el documento tenga asociado un participante del programa
de fidelización. Puede consultar los detalles sobre la información suministrada en la
sección sobre integración con sistemas de fidelización de este manual.

Payments
Lista con los pagos asociados al pedido. Cada pago incluirá la siguiente información:

MethodId
Identificador de la forma de pago.

MethodName
Nombre de la forma de pago.

Amount
Cantidad total. La diferencia entra la cantidad pagada y el cambio

PaidAmount
Cantidad pagada.

ChangeAmount
Cambio entregado.

Date
Fecha en la que se ha realizado el pago.

PosId
Identificador del punto de venta donde se registró el pago

IsPrepayment
Indica si el pago se realizó antes de emitir al factura (true) o en el momento
de emitirla (false). En este caso de pedidos, todos los pagos tendrán el valor
true.

ExtraInformation
Información adicional sobre el pago que se haya introducido en el punto de
venta.

Los documentos aparecen ordenados primero por Fecha de Creación y luego por
Id.

Guía del Integrador 88 Versión 5.1.0


Albaranes (Cargos en Cuenta)
Los albaranes (cargos a cuenta) se indican dentro del elemento DeliveryNotes en sucesivos
elementos DeliveryNote:

XML:

Guía del Integrador 89 Versión 5.1.0


<DeliveryNotes>
<DeliveryNote Serie="A" Number="1" VatIncluded="true"
BusinessDay="2014-09-29" Date="2014-09-29T12:08:00"
Guests="" Status="Pending"
AutoPrepare="Always">

<Customer Id="2" FiscalName="Sol Sombra, S.L." Cif="B0018912"


Street="C/ García de Paredes, 10"
City="Madrid" Region="Madrid" ZipCode="28010"
ApplySurcharge="false"
AccountCode="43100001"/>

<DeliveryAddress Street="" City="" Region="" ZipCode="" />

<Pos Id="1" Name="TPV" />


<Workplace Id="1" Name="Local" />
<User Id="3" Name="Pedro" />
<SaleCenter Id="1" Name="Barra" Location="B1"/>
<Notes><![CDATA[]]> </Notes>
<SuggestedTip Percentage="0.00" VatId="0" VatRate="0.00"
SurchargeRate="0.00" ApplyToVatIncluded="true"
IgnoreTicketDiscounts="false" />
<ServiceCharge Rate="0.00" VatId="0" VatRate="0.00"
SurchargeRate="0.00" ApplyToVatIncluded="true"
IgnoreTicketDiscounts="false" GrossAmount="0.00"
NetAmount="0.00" VatAmount="0.00" SurchargeAmount="0.00" />
<Lines>
<Line
Index="0" Type="Standard"
CreationDate="2014-09-29T12:08:00"
ParentIndex="" MenuGroup=""
ProductId="16" ProductName="Hamburguesa doble"
SaleFormatId="16"
SaleFormatName="Hamburguesa doble"
SaleFormatRatio="1.000"
MainBarcode=""
ProductPrice="3.25"
Quantity="1.000"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
UnitPrice="4.25"
DiscountRate="0.0000" CashDiscount="0.0000"
TotalAmount="4.25"
UnitCostPrice="0.00"
TotalCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU="598"
FamilyId="1"
FamilyName="Hamburguesas"
PreparationOrderId=""

Guía del Integrador 90 Versión 5.1.0


PreparationOrderName="">
<Addins>
<Addin ProductId="18" ProductName="Bacon"
SaleFormatId="18"
SaleFormatName="Bacon"
SaleFormatRatio="1.000"
MainBarcode=""
ProductPrice="0.50"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
ProductCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""
FamilyId="2"
FamilyName="Complementos Hamburguesas" />
<Addin ProductId="17"
ProductName="Queso"
SaleFormatId="17"
SaleFormatName="Queso"
MainBarcode=""
SaleFormatRatio="1.000"
ProductPrice="0.50"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
ProductCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""
FamilyId="2"
FamilyName="Complementos Hamburguesas" />
</Addins>
<Notes><![CDATA[Muy Hecha]]>
</Line>
<Line
Index="1" Type="Standard"
CreationDate="2014-09-29T12:05:00"
ParentIndex="" MenuGroup=""
ProductId="5" ProductName="Fanta Limón"
SaleFormatId="5"
SaleFormatName="Fanta Limón"
SaleFormatRatio="1.000"
MainBarcode=""
ProductPrice="2.50"
Quantity="1.000"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
UnitPrice="2.50"
DiscountRate="0.0000" CashDiscount="0.0000"
TotalAmount="2.50"
UnitCostPrice="0.00"

Guía del Integrador 91 Versión 5.1.0


TotalCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""
FamilyId="3"
FamilyName="Refrescos"
PreparationOrderId=""
PreparationOrderName="" />
<Notes><![CDATA[Sin hielo]]>
</Lines>

<Discounts DiscountRate="0.0050" CashDiscount="0.00" />

<Payments>
<Payment MethodId="2" MethodName="Tarjeta"
Amount="-6.85" PaidAmount="-6.85"
ChangeAmount="0.00" PosId="1"
IsPrepayment="true" >
<ExtraInformation>
<![CDATA[Tipo de Tarjeta: MASTERVISA]]>
</ExtraInformation>
</Payment>
</Payments>

<Offers>
<Offer Id="1"/>
</Offers>

<Totals GrossAmount="6.22" NetAmount="5.65"


VatAmount="0.57" SurchargeAmount="0.00">
<Taxes>
<Tax VatRate="0.1000" SurchargeRate="0.0140"
GrossAmount="6.22" NetAmount="5.65"
VatAmount="0.57" SurchargeAmount="0.00" />
</Taxes>
</Totals>

<LoyaltyProgram MemberId="3hRXhZ01Kictq">
<Rewards>
<Reward Id="7cnZDFPw" Name="Descuento de 3€"
Type="CashDiscount" Value="3.00" />
<Reward Id="8xmssMkq" Name="Descuento Cumpleaños"
Type="NamedDiscount" Code="EMPT" />
</Rewards>
</LoyaltyProgram>

</DeliveryNote>
</DeliveryNotes>

JSON:

Guía del Integrador 92 Versión 5.1.0


{
"DeliveryNotes": [
{
"Serie": "A",
"Number": 1,
"VatIncluded": true,
"BusinessDay": "2014-09-29",
"Date": "2014-09-29T12:08:00",
"Guests": null,
"Status": "Pending",
"AutoPrepare": "Always",
"Customer": {
"Id": 2,
"FiscalName": "Sol Sombra, S.L.",
"Cif": "B0018912",
"AccountCode": "43100001",
"Street": "C/ García de Paredes, 10",
"City": "Madrid",
"Region": "Madrid",
"ZipCode": "28010",
"ApplySurcharge": false
},
"DeliveryAddress": {
"Street": "",
"City": "",
"Region": "",
"ZipCode": ""
},
"Pos": {
"Id": 1,
"Name": "TPV"
},
"Workplace": {
"Id": 1,
"Name": "Local"
},
"User": {
"Id": 3,
"Name": "Pedro"
},
"SaleCenter": {
"Id": 1,
"Name": "Barra",
"Location": "B1"
},
"Notes": "",
"SuggestedTip": {
"Percentage": 0,
"VatId": 0,
"VatRate": 0,
"SurchargeRate": 0,

Guía del Integrador 93 Versión 5.1.0


"ApplyToVatIncluded": true,
"IgnoreTicketDiscounts": true
},
"ServiceCharge": {
"Rate": 0,
"VatId": 0,
"VatRate": 0,
"SurchargeRate": 0,
"ApplyToVatIncluded": true,
"IgnoreTicketDiscounts": true
},
"Lines": [
{
"Index": 0,
"Type": "Standard",
"CreationDate": "2014-09-29T12:08:00",
"ParentIndex": null,
"MenuGroup": "",
"ProductId": 16,
"ProductName": "Hamburguesa doble",
"SaleFormatId": 16,
"SaleFormatName": "Hamburguesa doble",
"SaleFormatRatio": 1.000,
"MainBarcode": "",
"ProductPrice": 3.25,
"Quantity": 1.000,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"UnitPrice": 4.25,
"DiscountRate": 0.0000,
"CashDiscount": 0.0000,
"TotalAmount": 4.25,
"UnitCostPrice": 0.00,
"TotalCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "598",
"FamilyId": 1,
"FamilyName": "Hamburguesas",
"PreparationOrderId": null,
"PreparationOrderName": "",
"Addins": [
{
"ProductId": 18,
"ProductName": "Bacon",
"SaleFormatId": 18,
"SaleFormatName": "Bacon",
"SaleFormatRatio": 1.000,
"MainBarcode": "",
"ProductPrice": 0.50,

Guía del Integrador 94 Versión 5.1.0


"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"ProductCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "",
"FamilyId": 2
"FamilyName": "Complementos Hamburguesas"
},
{
"ProductId": 17,
"ProductName": "Queso",
"SaleFormatId": 17,
"SaleFormatName": "Queso",
"MainBarcode": "",
"SaleFormatRatio": 1.000,
"ProductPrice": 0.50,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"ProductCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "",
"FamilyId": 2
"FamilyName": "Complementos Hamburguesas"
}
],
"Notes": "Muy hecha"
},
{
"Index": 1,
"Type": "Standard",
"CreationDate": "2014-09-29T12:05:00",
"ParentIndex": null,
"MenuGroup": "",
"ProductId": 5,
"ProductName": "Fanta Limón",
"SaleFormatId": 5,
"SaleFormatName": "Fanta Limón",
"SaleFormatRatio": 1.000,
"MainBarcode": "",
"ProductPrice": 2.50,
"Quantity": 1.000,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"UnitPrice": 2.50,
"DiscountRate": 0.0000,
"CashDiscount": 0.0000,

Guía del Integrador 95 Versión 5.1.0


"TotalAmount": 2.50,
"UnitCostPrice": 0.00,
"TotalCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PreparationOrderId": null,
"PreparationOrderName": "",
"PLU": "",
"FamilyId": 3
"FamilyName": "Refrescos",
"Notes": "Sin hielo"
}
],
"Discounts": {
"DiscountRate": 0.0050,
"CashDiscount": 0.00
},
"LoyaltyProgram": {
"MemberId": "3hRXhZ01Kictq",
"Rewards": [
{
"Id": "7cnZDFPw",
"Name": "Descuento de 3€",
"Type": "CashDiscount",
"Value": 3.000000
},
{
"Id": "8xmssMkq",
"Name": "Descuento Cumpleaños",
"Type": "NamedDiscount",
"Code": "EMPT"
}
]
},
"Payments": [
{
"ExtraInformation": "Tipo de Tarjeta: MASTERVISA",
"MethodId": 2,
"MethodName": "Tarjeta",
"Amount": -6.85,
"PaidAmount": -6.85,
"ChangeAmount": 0.00,
"PosId": 1,
"IsPrepayment": true
}
],
"Offers": [
{
"Id": 1
}
],

Guía del Integrador 96 Versión 5.1.0


"Totals": {
"Taxes": [
{
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"GrossAmount": 6.22,
"NetAmount": 5.65,
"VatAmount": 0.57,
"SurchargeAmount": 0.00
}
],
"GrossAmount": 6.22,
"NetAmount": 5.65,
"VatAmount": 0.57,
"SurchargeAmount": 0.00
}
}
]
}

La información indicada para cada albarán es:

Serie
Serie de albarán.

Number
Número de albarán.

BusinessDay
Fecha de negocio en formato aaaa-mm-dd.

VatIncluded
Indica si lleva impuestos incluidos (true) o no (false).

Date
Fecha y hora de creación del albarán en formato aaaa-mm-ddThh:mm:ss.

Guests
Número de comensales. Si no se han indicado comensales, este campo aparecerá
vacío.

Pos
Identificador único y nombre del TPV en que se creó el albarán.

Workplace
Identificador único y nombre del Local en que se creó el albarán.

User
Identificador único y nombre del usuario que creó el albarán.

Guía del Integrador 97 Versión 5.1.0


SaleCenter
Información del centro de venta donde se ha realizado el albarán, incluyendo Id,
Nombre y Ubicación.

Notes
Notas asociadas al albarán.

Status
Estado del albarán. Puede ser:

Pending
El albarán está pendiente de facturar.

Cancelled
El albarán no ha sido facturado y ya no podrá facturarse nunca más (por
ejempo, porque ha sido cancelado).

Invoiced
El albarán ha sido facturado.

AutoPrepare [Opcional: sólo válido a importar documentos]


Indica si se deben enviar las comandas a los puntos de preparación al importar el
documento. Los posibles valores de este campo son:

▪ Never: No enviar comandas nunca.

▪ Always: Enviar comandas siempre que se importa el documento.

▪ OnlyIfNew: Enviar comandas sólo la primera vez que se importe el documento


(si el documento ya existía y se vuelve a importar, no se volverán a realizar los
envíos).

Customer
Datos del cliente al que se emite la factura, incluyendo:

Id
Identificador único del cliente.

FiscalName
Nombre fiscal del cliente.

Cif
CIF/NIF del cliente.

AccountCode
Código de la cuenta contable del cliente.

Street
Calle del cliente.

City
Población del cliente.

Region
Provincia del cliente.

Guía del Integrador 98 Versión 5.1.0


ZipCode
Código postal del cliente.

ApplySurcharge
Indica si al cliente se le aplica recargo de equivalencia.

DeliveryAddress
Dirección de Entrega del albarán. Es opcional si no se indica se usará la dirección de
facturación del cliente.

Street
Calle del cliente.

City
Ciudad del cliente.

Region
Población del cliente.

ZipCode
Código Postal del cliente.

SuggestedTip
Propina sugerida para la factura, incluyendo impuesto aplicado a la propina y modo de
aplicación (si es sobre el total con o sin impuestos y con o sin descuentos al pie del
ticket).

ServiceCharge
Recargo por servicio para la factura, incluyendo impuesto aplicado al servicio por
recargo y modo de aplicación (si es sobre el total con o sin impuestos y con o sin
descuentos al pie del ticket).

RelatedSalesOrder
Serie y número del pedido relaccionado con éste documento. Este campo sólo se indica
cuando el documento ha sido emitido a partir de un pedido.

Lines
Líneas del documento, cada una de ellas en un elemento Line con el siguiente
formato:

Index
Índice de la línea dentro del documento. Las líneas se empiezan a numerar en
0.

Type
Tipo de línea. Puede ser Standard si es una línea normal, MenuHeader si es la
un menú, o MenuItem si es un plato perteneciente a un menú.

CreationDate
Fecha en que se añadió la línea al documento.

ParentIndex
Índice de la línea a la que está asociada ésta. Sólo se utiliza en el caso de
platos de menú, es decir, cuando Type="MenuItem". En ese caso,

Guía del Integrador 99 Versión 5.1.0


ParentIndex es el índice de la línea que contiene el menú al que pertenece
este plato. Si la línea es de otro tipo, este atributo estará vacío.

MenuGroup
Nombre del grupo de platos del menú al que pertenece esta línea. Sólo se
utiliza en el caso de platos de menú, es decir, cuando Type="MenuItem". En
ese caso, MenuGroup es nombre del group de platos al que pertenece este
plato. Si la línea es de otro tipo, este atributo estará vacío.

UserId
Identificador del usuario que añadió la línea.

ProductId
Identificador del producto principal de la línea.

ProductName
Nombre del producto principal de la línea.

SaleFormatId
Identificador del formamto de venta principal de la línea.

SaleFormatName
Nombre del formato de venta principal de la línea.

SaleFormatRatio
Ratio del formato de venta principal de la línea con respecto a su formato
base.

MainBarcode
Código de barras principal del artículo.

ProductPrice
Precio unitario del producto principal de la línea. Este precio incluirá
impuestos o no dependiendo del valor del atributo VatIncluded del ticket.

Quantity
Cantidad.

VatId
Identificador único del impuesto asociado al producto principal de la línea.

VatRate
Tanto por uno de impuesto asociado al producto principal de la línea. Por
ejemplo, si el porcentaje de impuesto es 21%, este valor será 0.21.

SurchargeRate
Tanto por uno de recargo de equivalencia asociado al producto principal de la
línea. Por ejemplo, si el porcentaje de recargo es 4%, este valor será 0.04.

UnitPrice
Precio unitario de la línea incluyendo tanto el producto principal como los
añadidos. Es decir, si el producto principal tiene un precio de 6€ y lleva un
añadido de 2€, el valor de este atributo será 8€. Este precio incluirá
impuestos o no dependiendo del valor del atributo VatIncluded del ticket.

Guía del Integrador 100 Versión 5.1.0


DiscountRate
Tanto por uno de descuento aplicado a la línea. Por ejemplo, si el porcentaje
de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado a la línea.

TotalAmount
Importe total de la línea tras aplicar descuentos. Este valor incluirá impuestos
o no dependiendo del valor del atributo VatIncluded del ticket.

ProductCostPrice
Precio de coste del producto principal.

UnitCostPrice
Precio de coste unitario de la línea, incluyendo tanto el producto principal
como los añadidos.

TotalCostPrice:
Precio de coste total de la línea. Es decir la cantidad por el precio de coste de
la línea.

OfferId
En caso de que la línea pertenezca a una promoción se incluye este elemento
con el identificador de la oferta.

OfferCode
En caso de que la línea pertenezca a una promoción se incluye este elemento
con el código de la oferta.

PreparationTypeId
Identificador del tipo de preparación del producto principal. Si no lleva tipo de
preparación el campo se dejará vacío.

PreparationTypeName [Opcional]
Nombre del tipo de preparación del producto principal.

PLU
PLU del artículo. Puede ser vacía si el artículo no tiene asignada ninguna PLU.

FamilyId
Identificador de la familia a la que pertenece el producto. Puede ser vacío si el
producto no está asociado a ninguna familia.

FamilyName
Nombre de la familia a la que pertenece el producto. Puede ser vacío si el
producto no está asociado a ninguna familia

PreparationOrderId
Identificador del orden de preparación del producto principal. Si no lleva tipo
de preparación el campo se dejará vacío.

PreparationOrderName [Opcional]
Nombre del orden del preparación del producto principal.

Guía del Integrador 101 Versión 5.1.0


Addins
En caso de que haya añadidos al producto principal se incluyen en este
elemento. Para cada uno de ellos se indica información análoga a la del
producto principal salvo que no llevan ordenes de preparación, usan el orden
de preparación del producto principal.

Notes
Notas de preparación asociadas a la línea. Si la línea no lleva notas de
preparación, no se incluirá este elemento.

Discounts
Descuentos del documento

DiscountRate
Tanto por uno de descuento aplicado al documento. Por ejemplo, si el
porcentaje de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado al documento.

Offers
Lista con las promociones asignadas:

Id
Identificador de la promoción.

Totals
Contiene el detalle de los descuentos en pie del albarán y de los totales,
desglosándolos por base imponible. La información incluida para cada uno es:

GrossAmount
Importe incluyendo los impuestos.

NetAmount
Importe tras descontar los impuestos.

VatAmount
Cuota correspondiente al impuesto.

SurchageAmount
Cuota correspondiente al recargo de equivalencia.

LoyaltyProgram [Opcional]
Información sobre los datos del participante del sistema de fidelización asociados al
documento en caso de que el documento tenga asociado un participante del programa
de fidelización. Puede consultar los detalles sobre la información suministrada en la
sección sobre integración con sistemas de fidelización de este manual.

Payments
Lista con los pagos asociados al albarán. Cada pago incluirá la siguiente información:

MethodId
Identificador de la forma de pago.

Guía del Integrador 102 Versión 5.1.0


MethodName
Nombre de la forma de pago.

Amount
Cantidad total. La diferencia entra la cantidad pagada y el cambio

PaidAmount
Cantidad pagada.

ChangeAmount
Cambio entregado.

Date
Fecha en la que se ha realizado el pago.

PosId
Identificador del punto de venta donde se registró el pago

IsPrepayment
Indica si el pago se realizó antes de emitir al factura (true) o en el momento
de emitirla (false). En este caso de albaranes, todos los pagos tendrán el
valor true.

ExtraInformation
Información adicional sobre el pago que se haya introducido en el punto de
venta.

Los documentos aparecen ordenados primero por Fecha de Creación y luego por
Id.

Facturas
Las facturas se indican dentro del elemento Invoices en sucesivos elementos Invoice:

XML:

Guía del Integrador 103 Versión 5.1.0


<Invoices>
<Invoice Serie="F" Number="1" BusinessDay="2014-09-29"
PrintCount="1"
VatIncluded="true" Date="2014-09-29T12:11:01"
DocumentType="StandardInvoice"
AutoPrepare="Always">

<Customer Id="2" FiscalName="Sol y Sombra, S.L." Cif="B0018912"


Street="C/ García de Paredes, 10"
City="Madrid" Region="Madrid" ZipCode="28010"
ApplySurcharge="false"
AccountCode="43100001"/>

<Pos Id="1" Name="TPV" />


<Workplace Id="1" Name="Local" />
<User Id="5" Name="Charo" />

<InvoiceItems>
<Item ContentType="T" BusinessDay="2014-09-29"
Guests="2"
VatIncluded="true" Date="2014-09-29T12:10:30">

<Pos Id="1" Name="TPV" />


<User Id="5" Name="Charo" />

<SaleCenter Id="1" Name="Barra" Location="B3" />


<SuggestedTip Percentage="5.0000" VatId="3"
VatRate="0.0500" SurchargeRate="0.0500"
ApplyToVatIncluded="true"
IgnoreTicketDiscounts="true"/>

<ServiceCharge Rate="0.1" VatId="4"


VatRate="0.2100" SurchargeRate="0.2100"
ApplyToVatIncluded="true"
IgnoreTicketDiscounts="true"/>

<Lines>
<Line
Index="0" Type="Standard"
CreationDate="2014-09-29T12:08:00"
ParentIndex="" MenuGroup=""
ProductId="16" ProductName="Hamburguesa doble"
SaleFormatId="16"
SaleFormatName="Hamburguesa doble"
SaleFormatRatio="1.000"
MainBarcode=""
PLU=""
ProductPrice="3.25"
Quantity="1.000"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"

Guía del Integrador 104 Versión 5.1.0


UnitPrice="4.25"
DiscountRate="0.0000" CashDiscount="0.0000"
TotalAmount="4.25"
UnitCostPrice="0.00"
TotalCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU="598"
FamilyId="1"
FamilyName="Hamburguesas"
PreparationOrderId=""
PreparationOrderName="">
<Addins>
<Addin ProductId="18" ProductName="Bacon"
SaleFormatId="18"
SaleFormatName="Bacon"
SaleFormatRatio="1.000"
MainBarcode=""
ProductPrice="0.50"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
ProductCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""
FamilyId="2"
FamilyName="Complementos Hamburguesas" />
<Addin ProductId="17"
ProductName="Queso"
SaleFormatId="17"
SaleFormatName="Queso"
MainBarcode=""
SaleFormatRatio="1.000"
ProductPrice="0.50"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
ProductCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""
FamilyId="2"
FamilyName="Complementos Hamburguesas" />
</Addins>
<Notes><![CDATA[Muy Hecha]]>
</Line>
<Line
Index="1" Type="Standard"
CreationDate="2014-09-29T12:08:00"
ParentIndex="" MenuGroup=""
ProductId="5" ProductName="Fanta Limón"
SaleFormatId="5"

Guía del Integrador 105 Versión 5.1.0


SaleFormatName="Fanta Limón"
SaleFormatRatio="1.000"
MainBarcode=""
PLU=""
ProductPrice="2.50"
Quantity="1.000"
VatId="3" VatRate="0.1000"
SurchargeRate="0.0140"
UnitPrice="2.50"
DiscountRate="0.0000" CashDiscount="0.0000"
TotalAmount="2.50"
UnitCostPrice="0.00"
TotalCostPrice="0.00"
PreparationTypeId=""
PreparationTypeName=""
PLU=""
FamilyId="3"
FamilyName="Refrescos"
PreparationOrderId=""
PreparationOrderName="" />
</Lines>

<Discounts DiscountRate="0.0050" CashDiscount="0.00" />

<Payments/>

<Offers/>

<Totals GrossAmount="6.72" NetAmount="6.11"


VatAmount="0.61" SurchargeAmount="0.00">
<Taxes>
<Tax VatRate="0.1000" SurchargeRate="0.0140"
GrossAmount="6.72" NetAmount="6.11"
VatAmount="0.61" SurchargeAmount="0.00" />
</Taxes>
</Totals>

<LoyaltyProgram MemberId="3hRXhZ01Kictq">
<Rewards>
<Reward Id="7cnZDFPw" Name="Descuento de 3€"
Type="CashDiscount" Value="3.00" />
<Reward Id="8xmssMkq" Name="Descuento Cumpleaños"
Type="NamedDiscount" Value="EMPT" />
</Rewards>
</LoyaltyProgram>

</Item>
</InvoiceItems>
<Payments>
<Payment MethodId="2" MethodName="Tarjeta"
Amount="-6.85" PaidAmount="-6.85"

Guía del Integrador 106 Versión 5.1.0


ChangeAmount="0.00" PosId="1" IsPrepayment="true" >
<ExtraInformation>
<![CDATA[Tipo de Tarjeta: MASTERVISA]]>
</ExtraInformation>
</Payment>
</Payments>
<Totals GrossAmount="6.72" NetAmount="6.11"
VatAmount="0.61" SurchargeAmount="0.00">
<Taxes>
<Tax VatRate="0.1000" SurchargeRate="0.0140"
GrossAmount="6.72" NetAmount="6.11"
VatAmount="0.61" SurchargeAmount="0.00" />
</Taxes>
</Totals>
</Invoice>
</Invoices>

JSON:

Guía del Integrador 107 Versión 5.1.0


{
"Invoices": [
{
"Serie": "F",
"Number": 1,
"BusinessDay": "2014-09-29",
"PrintCount": 1,
"VatIncluded": true,
"Date": "2014-09-29T12:11:01",
"AutoPrepare": "Always",
"Customer": {
"Id": 2,
"FiscalName": "Sol y Sombra, S.L.",
"Cif": "B0018912",
"AccountCode": "43100001",
"Street": "C/ García de Paredes, 10",
"City": "Madrid",
"Region": "Madrid",
"ZipCode": "28010",
"ApplySurcharge": false
},
"Pos": {
"Id": 1,
"Name": "TPV"
},
"Workplace": {
"Id": 1,
"Name": "Local"
},
"User": {
"Id": 5,
"Name": "Charo"
},
"DocumentType": "StandardInvoice"
"InvoiceItems": [
{
"ContentType": "T",
"BusinessDay": "2014-09-29",
"Guests": 2,
"VatIncluded": true,
"Date": "2014-09-29T12:10:30",
"Pos": {
"Id": 1,
"Name": "TPV"
},
"User": {
"Id": 5,
"Name": "Charo"
},
"SaleCenter": {
"Id": 1,

Guía del Integrador 108 Versión 5.1.0


"Name": "Barra",
"Location": "B3"
},
"SuggestedTip": {
"Percentage": 5.0000,
"VatId": 3,
"VatRate": 0.0500,
"SurchargeRate": 0.0500,
"ApplyToVatIncluded": true,
"IgnoreTicketDiscounts": true
},
"ServiceCharge": {
"Rate": 0.1,
"VatId": 4,
"VatRate": 0.2100,
"SurchargeRate": 0.2100,
"ApplyToVatIncluded": true,
"IgnoreTicketDiscounts": true
},
"Lines": [
{
"Index": 0,
"Type": "Standard",
"CreationDate": "2014-09-29T12:08:00",
"ParentIndex": null,
"MenuGroup": "",
"ProductId": 16,
"ProductName": "Hamburguesa doble",
"SaleFormatId": 16,
"SaleFormatName": "Hamburguesa doble",
"SaleFormatRatio": 1.000,
"MainBarcode": "",
"PLU": "",
"ProductPrice": 3.25,
"Quantity": 1.000,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"UnitPrice": 4.25,
"DiscountRate": 0.0000,
"CashDiscount": 0.0000,
"TotalAmount": 4.25,
"UnitCostPrice": 0.00,
"TotalCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "598",
"FamilyId": 1,
"FamilyName": "Hamburguesas",
"PreparationOrderId": null,
"PreparationOrderName": "",

Guía del Integrador 109 Versión 5.1.0


"Addins": [
{
"ProductId": 18,
"ProductName": "Bacon",
"SaleFormatId": 18,
"SaleFormatName": "Bacon",
"SaleFormatRatio": 1.000,
"MainBarcode": "",
"ProductPrice": 0.50,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"ProductCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "",
"FamilyId": 2,
"FamilyName": "Complementos Hamburguesas"
},
{
"ProductId": 17,
"ProductName": "Queso",
"SaleFormatId": 17,
"SaleFormatName": "Queso",
"MainBarcode": "",
"SaleFormatRatio": 1.000,
"ProductPrice": 0.50,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"ProductCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "",
"FamilyId": 2,
"FamilyName": "Complementos Hamburguesas"
}
],
"Notes": "Muy hecha"
},
{
"Index": 1,
"Type": "Standard",
"CreationDate": "2014-09-29T12:08:00",
"ParentIndex": null,
"MenuGroup": "",
"ProductId": 5,
"ProductName": "Fanta Limón",
"SaleFormatId": 5,
"SaleFormatName": "Fanta Limón",
"SaleFormatRatio": 1.000,

Guía del Integrador 110 Versión 5.1.0


"MainBarcode": "",
"PLU": "",
"ProductPrice": 2.50,
"Quantity": 1.000,
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"UnitPrice": 2.50,
"DiscountRate": 0.0000,
"CashDiscount": 0.0000,
"TotalAmount": 2.50,
"UnitCostPrice": 0.00,
"TotalCostPrice": 0.00,
"PreparationTypeId": null,
"PreparationTypeName": "",
"PLU": "",
"FamilyId": 3,
"FamilyName": "Refrescos",
"PreparationOrderId": null,
"PreparationOrderName": ""
}
],
"Discounts": {
"DiscountRate": 0.0050,
"CashDiscount": 0.00
},
"LoyaltyProgram": {
"MemberId": "3hRXhZ01Kictq",
"Rewards": [
{
"Id": "7cnZDFPw",
"Name": "Descuento de 3€",
"Type": "CashDiscount",
"Value": 3.000000
},
{
"Id": "8xmssMkq",
"Name": "Descuento Cumpleaños",
"Type": "NamedDiscount",
"Code": "EMPT"
}
]
},
"Payments": [],
"Offers": [],
"Totals": {
"GrossAmount": 6.72,
"NetAmount": 6.11,
"VatAmount": 0.61,
"SurchargeAmount": 0.00,
"Taxes": [

Guía del Integrador 111 Versión 5.1.0


{
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"GrossAmount": 6.72,
"NetAmount": 6.11,
"VatAmount": 0.61,
"SurchargeAmount": 0.00
}
]
}
}
],
"Payments": [
{
"ExtraInformation": "Tipo de Tarjeta: MASTERVISA",
"MethodId": 2,
"MethodName": "Tarjeta",
"Amount": -6.85,
"PaidAmount": -6.85,
"ChangeAmount": 0.00,
"PosId": 1,
"IsPrepayment": true
}
],
"Totals": {
"GrossAmount": 6.72,
"NetAmount": 6.11,
"VatAmount": 0.61,
"SurchargeAmount": 0.00,
"Taxes": [
{
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"GrossAmount": 6.72,
"NetAmount": 6.11,
"VatAmount": 0.61,
"SurchargeAmount": 0.00
}
]
}
}
]
}

La información indicada para cada factura es:

Serie
Serie de factura.

Guía del Integrador 112 Versión 5.1.0


Number
Número de factura.

BusinessDay
Fecha de negocio en formato aaaa-mm-dd.

VatIncluded
Indica si lleva impuestos incluidos (true) o no (false).

PrintCount
Número de veces que ha sido impresa la factura.

Date
Fecha y hora de creación de la factura en formato aaaa-mm-ddThh:mm:ss.

DocumentType
Tipo de factura. Puede ser:

▪ BasicInvoice: Factura simplificada

▪ StandardInvoice: Factura nominal

▪ BasicRefund: Devolución de factura simplificada

▪ StandardRefund: Devolución de factura nominal

AutoPrepare [Opcional: sólo válido a importar documentos]


Indica si se deben enviar las comandas a los puntos de preparación al importar el
documento. En el caso de las facturas, este valor se ignorará si la factura contiene un
pedido o albaranes. Para lanzar las preparaciones de una factura que contiene pedidos
o albaranes deberá importar primero el pedido los albaranes indicando que desea
autoprepararlos, y a continuación importar la factura. Los posibles valores de este
campo son:

▪ Never: No enviar comandas nunca.

▪ Always: Enviar comandas siempre que se importa el documento.

▪ OnlyIfNew: Enviar comandas sólo la primera vez que se importe el documento


(si el documento ya existía y se vuelve a importar, no se volverán a realizar los
envíos).

Pos
Identificador único y nombre del TPV en que se creó la factura.

Workplace
Identificador único y nombre del Local en que se creó la factura.

User
Identificador único y nombre del usuario que creó la factura.

SaleCenter
Información del centro de venta donde se ha realizado la factura, incluyendo Id,
Nombre y Ubicación.

Guía del Integrador 113 Versión 5.1.0


SuggestedTip
Propina sugerida para la factura, incluyendo impuesto aplicado a la propina y modo de
aplicación (si es sobre el total con o sin impuestos y con o sin descuentos al pie del
ticket).

ServiceCharge
Recargo por servicio para la factura, incluyendo impuesto aplicado al servicio por
recargo y modo de aplicación (si es sobre el total con o sin impuestos y con o sin
descuentos al pie del ticket).

RelatedInvoice
Serie y número de la factura relaccionada con ésta. Este campo sólo se indica cuando
la factura ha sido emitida a partir de otra factura, por ejemplo, para realizar una
devolución. En ese caso, se indicará en este campo la factura original.

Customer
Datos del cliente al que se emite la factura. Si se trata de una factura simplificada sin
cliente asignado, este elemento será omitido. Si se incluye el cliente, contendrá la
siguiente información:

Id
Identificador único del cliente.

FiscalName
Nombre fiscal del cliente.

Cif
CIF/NIF del cliente.

AccountCode
Código de la cuenta contable del cliente.

Street
Calle del cliente.

City
Población del cliente.

Region
Provincia del cliente.

ZipCode
Código postal del cliente.

ApplySurcharge
Indica si al cliente se le aplica recargo de equivalencia.

DeliveryAddress
Dirección de Entrega del documento. Es opcional si no se indica se usará la dirección
de facturación del cliente.

Street
Calle del cliente.

Guía del Integrador 114 Versión 5.1.0


City
Ciudad del cliente.

Region
Población del cliente.

ZipCode
Código Postal del cliente.

RelatedInvoice
Serie y número de la factura relaccionada con ésta. Este campo sólo se indica cuando
la factura ha sido emitida a partir de otra factura, por ejemplo, para realizar una
devolución. En ese caso, se indicará en este campo la factura original.

InvoiceItems
Documentos que forman parte de la factura. En Ágora, una factura puede estar
formada por un único ticket o por varios albaranes. El contenido de la factura se
indicará dentro de este elemento en sucesivos elementos Item con el siguiente
formato:

ContentType
Indica si el documento es un ticket (T) o un albarán (D).

BusinessDay
Fecha de negocio del documento.

Guests
Número de comensales. Vacío si no los tiene asociados.

VatIncluded
Indica si el documento lleva impuestos incluidos (true) o no (false).

Date
Fecha de creación del documento.

Serie [Sólo si ContentType = 'D']


Serie del albarán facturado.

Number [Sólo si ContentType = 'D']


Número del albarán facturado.

Pos
Identificador único y nombre del TPV en que se creó el documento. Si la
factura es de un único ticket, este elemento coincidirá con el elemento Pos de
la propia factura. Si la factura es de uno o más albaranes, es posible que cada
albarán se generase en un TPV distinto del TPV que se utilizó para emitir la
factura.

User
Identificador único y nombre del usuario que creó el documento. Si la factura
es de un único ticket, este elemento coincidirá con el elemento User de la
propia factura. Si la factura es de uno o más albaranes, es posible que cada
albarán lo generase un usuario distinto del usuario que emitió la factura.

Guía del Integrador 115 Versión 5.1.0


SaleCenter
Información del centro de venta donde se creó el documento, incluyendo Id,
Nombre y Ubicación. Si la factura es de un único ticket, este elemento
coincidirá con el elemento SaleCenter de la propia factura. Si la factura es de
uno o más albaranes, es posible que cada albarán se generase en una
ubicación distinta de la ubicación en que se emitió la factura.

RelatedSalesOrder
Este campo sólo se indica cuando el documento ha sido emitido a partir de un
pedido. En ese caso, incluye serie y número de pedido.

Lines
Líneas del documento, cada una de ellas en un elemento Line con el
siguiente formato:

Index
Índice de la línea dentro del documento. Las líneas se empiezan a
numerar en 0.

Type
Tipo de línea. Puede ser Standard si es una línea normal,
MenuHeader si es la un menú, o MenuItem si es un plato
perteneciente a un menú.

CreationDate
Fecha en que se añadió la línea al documento.

ParentIndex
Índice de la línea a la que está asociada ésta. Sólo se utiliza en el
caso de platos de menú, es decir, cuando Type="MenuItem". En ese
caso, ParentIndex es el índice de la línea que contiene el menú al
que pertenece este plato. Si la línea es de otro tipo, este atributo
estará vacío.

MenuGroup
Nombre del grupo de platos del menú al que pertenece esta línea.
Sólo se utiliza en el caso de platos de menú, es decir, cuando
Type="MenuItem". En ese caso, MenuGroup es nombre del group de
platos al que pertenece este plato. Si la línea es de otro tipo, este
atributo estará vacío.

UserId
Identificador del usuario que añadió la línea.

ProductId
Identificador del producto principal de la línea.

ProductName
Nombre del producto principal de la línea.

SaleFormatId
Identificador del formamto de venta principal de la línea.

Guía del Integrador 116 Versión 5.1.0


SaleFormatName
Nombre del formato de venta principal de la línea.

SaleFormatRatio
Ratio del formato de venta principal de la línea con respecto a su
formato base.

MainBarcode
Código de barras principal del artículo.

PLU
Código PLU del artículo.

ProductPrice
Precio unitario del producto principal de la línea. Este precio incluirá
impuestos o no dependiendo del valor del atributo VatIncluded del
ticket.

Quantity
Cantidad.

VatId
Identificador único del impuesto asociado al producto principal de la
línea.

VatRate
Tanto por uno de impuesto asociado al producto principal de la línea.
Por ejemplo, si el porcentaje de impuesto es 21%, este valor será
0.21.

SurchargeRate
Tanto por uno de recargo de equivalencia asociado al producto
principal de la línea. Por ejemplo, si el porcentaje de recargo es 4%,
este valor será 0.04.

UnitPrice
Precio unitario de la línea incluyendo tanto el producto principal
como los añadidos. Es decir, si el producto principal tiene un precio
de 6€ y lleva un añadido de 2€, el valor de este atributo será 8€.
Este precio incluirá impuestos o no dependiendo del valor del
atributo VatIncluded del ticket.

DiscountRate
Tanto por uno de descuento aplicado a la línea. Por ejemplo, si el
porcentaje de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado a la línea.

TotalAmount
Importe total de la línea tras aplicar descuentos. Este valor incluirá
impuestos o no dependiendo del valor del atributo VatIncluded del
ticket.

Guía del Integrador 117 Versión 5.1.0


ProductCostPrice
Precio de coste del producto principal.

UnitCostPrice
Precio de coste unitario de la línea, incluyendo tanto el producto
principal como los añadidos.

TotalCostPrice:
Precio de coste total de la línea. Es decir la cantidad por el precio de
coste de la línea.

OfferId
En caso de que la línea pertenezca a una promoción se incluye este
elemento con el identificador de la oferta.

OfferCode
En caso de que la línea pertenezca a una promoción se incluye este
elemento con el código de la oferta.

PreparationTypeId
Identificador del tipo de preparación del producto principal. Si no
lleva tipo de preparación el campo se dejará vacío.

PreparationTypeName [Opcional]
Nombre del tipo de preparación del producto principal.

PLU
PLU del artículo. Puede ser vacía si el artículo no tiene asignada
ninguna PLU.

FamilyId
Identificador de la familia a la que pertenece el producto. Puede ser
vacío si el producto no está asociado a ninguna familia.

FamilyName
Nombre de la familia a la que pertenece el producto. Puede ser vacío
si el producto no está asociado a ninguna familia

PreparationOrderId
Identificador del orden de preparación del producto principal. Si no
lleva tipo de preparación el campo se dejará vacío.

PreparationOrderName [Opcional]
Nombre del orden del preparación del producto principal.

Addins
En caso de que haya añadidos al producto principal se incluyen en
este elemento. Para cada uno de ellos se indica información análoga
a la del producto principal salvo que no llevan ordenes de
preparación, usan el orden de preparación del producto principal.

Notes
Notas de preparación asociadas a la línea. Si la línea no lleva notas
de preparación, no se incluirá este elemento.

Guía del Integrador 118 Versión 5.1.0


Discounts
Descuentos del documento

DiscountRate
Tanto por uno de descuento aplicado al documento. Por ejemplo, si
el porcentaje de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado al documento.

Payments
Lista con los pagos asociados al documento antes de convertirse en factura.
Para cada pago se incluye la misma información que en los pagos de factura,
tal y como se detalla más adelante.

Offers
Lista con las promociones asignadas:

Id
Identificador de la promoción.

Totals
Contiene el detalle de los descuentos en pie del documento y de los totales,
desglosándolos por base imponible. La información incluida para cada uno es:

GrossAmount
Importe incluyendo los impuestos.

NetAmount
Importe tras descontar los impuestos.

VatAmount
Cuota correspondiente al impuesto.

SurchageAmount
Cuota correspondiente al recargo de equivalencia.

LoyaltyProgram [Opcional]
Información sobre los datos del participante del sistema de fidelización
asociados al documento en caso de que el documento tenga asociado un
participante del programa de fidelización. Puede consultar los detalles sobre la
información suministrada en la sección sobre integración con sistemas de
fidelización de este manual.

Payments
Lista con los pagos asociados a la factura. Cada pago incluirá la siguiente información:

MethodId
Identificador de la forma de pago.

MethodName
Nombre de la forma de pago.

Amount
Cantidad total. La diferencia entra la cantidad pagada y el cambio

Guía del Integrador 119 Versión 5.1.0


PaidAmount
Cantidad pagada.

ChangeAmount
Cambio entregado.

Date
Fecha en la que se ha realizado el pago.

Tip
Propina recibida.

PosId
Identificador del punto de venta donde se registró el pago

IsPrepayment
Indica si el pago se realizó antes de emitir al factura (true) o en el momento
de emitirla (false). Los pagos procedentes de tickets, albaranes o pedidos,
tendrán este valor a true, mientras que los pagos que se hayan realizado en
el momento de emitir la factura, tendrá este valor a false.

ExtraInformation
Información adicional sobre el pago que se haya introducido en el punto de
venta.

Totals
Contiene el importe total de la factura, incluyendo todos sus documentos, desglosado
por base imponibles. Para cada base imponible se detallará:

GrossAmount
Importe incluyendo los impuestos.

NetAmount
Importe tras descontar los impuestos.

VatAmount
Cuota correspondiente al impuesto.

SurchageAmount
Cuota correspondiente al recargo de equivalencia.

El orden en que aparecen los elementos dentro del documento es importante si


va a querer importar documentos con este formato en otro Ágora.

Los documentos aparecen ordenados primero por Fecha de Creación y luego por
Id.

Cierres de Caja
Los cierres de caja se indican en el elemento PosCloseOuts en sucesivos elementos
PosCloseOut:

Guía del Integrador 120 Versión 5.1.0


XML:

<PosCloseOuts>
<PosCloseOut Id="1" PosId="1" WorkplaceId="1" BusinessDay="2014-09-29"
InitialAmount="100.00"
ExpectedEndAmount="512.07"
ActualEndAmount="500.00"
Incident="Desconocido"
OpenDate="2014-09-29T12:05:58" OpenerUserId="3"
CloseDate="2014-09-29T12:11:17" CloserUserId="5"
VerificationCode="acmINnin5qGq"/>
</PosCloseOuts>

JSON:

{
"PosCloseOuts": [
{
"Id": 1,
"PosId": 1,
"WorkplaceId": 1,
"BusinessDay": "2014-09-29",
"InitialAmount": 100.00,
"ExpectedEndAmount": 512.07,
"ActualEndAmount": 500.00,
"Incident": "Desconocido",
"OpenDate": "2014-09-29T12:05:58",
"OpenerUserId": 3,
"CloseDate": "2014-09-29T12:11:17",
"CloserUserId": 5,
"VerificationCode": "acmINnin5qGq"
}
]
}

La información indicada para cada cierre de caja es:

Id
Identificador del cierre de caja.

PosId
Identificador del punto de venta donde se ha realizado el movimiento de caja.

WorkplaceId
Identificador del local donde se ha realizado el cierre de caja.

BusinessDay
Fecha de negocio en que se ha realizado el cierre de caja con formato aaaa-mm-dd.

Guía del Integrador 121 Versión 5.1.0


InitialAmount
Cantidad inicial de dinero en caja.

ExpectedEndAmount
Cantidad final teórica de dinero en caja.

ActualEndAmount
Cantidad final real de dinero en caja.

Incident
Incidencia registrada al cerrar la caja. Si no hubo descuadre, este atributo estará
vacío.

OpenDate
Fecha y hora en que se ha realizado la apertura de caja con formato aaaa-mm-
ddThh:mm:ss.

OpenerUserId
Id del usuario que ha realizado la apertura de caja.

CloseDate
Fecha y hora en que se ha realizado el cierre de caja con formato aaaa-mm-
ddThh:mm:ss.

CloserUserId
Id del usuario que ha realizado el cierre de caja.

VerificationCode
Código de seguridad único para identificar el cierre de caja.

Cierres de Sistema
Los cierres de sistema se indican en el elemento SystemCloseOuts en sucesivos elementos
SystemCloseOut:

XML:

Guía del Integrador 122 Versión 5.1.0


<SystemCloseOuts>
<SystemCloseOut Number="1" BusinessDay="2014-09-29"
OpenDate="2014-09-29T12:05:58" OpenerUserId="3"
CloseDate="2014-09-29T12:11:17" CloserUserId="5"
WorkplaceId="1">
<Documents>
<Document Serie="TD" Amount="-6.85"
FirstNumber="1" LastNumber="1" Count="1"/>
<Document Serie="T" Amount="12.20"
FirstNumber="1" LastNumber="2" Count="2"/>
<Document Serie="F" Amount="6.72"
FirstNumber="1" LastNumber="1" Count="1"/>
</Documents>
<Amounts NetAmount="10.97" GrossAmount="12.07"
SurchargeAmount="0.00" VatAmount="1.10" />
<InvoicePayments>
<Payment MethodName="Cheque restaurante" Amount="0.00" />
<Payment MethodName="Efectivo" Amount="12.07" />
<Payment MethodName="Tarjeta" Amount="0.00" />
</InvoicePayments>
<SalesOrderPayments>
<Payment MethodName="Efectivo" Amount="12.07" />
<Payment MethodName="Tarjeta" Amount="0.00" />
</SalesOrderPayments>
<DeliveryNotePayments>
<Payment MethodName="Efectivo" Amount="12.07" />
<Payment MethodName="Tarjeta" Amount="0.00" />
</DeliveryNotePayments>
<TicketPayments>
<Payment MethodName="Efectivo" Amount="12.07" />
<Payment MethodName="Tarjeta" Amount="0.00" />
</TicketPayments>
</SystemCloseOut>
</SystemCloseOuts>

JSON:

Guía del Integrador 123 Versión 5.1.0


{
"SystemCloseOuts": [{
"Number": 1,
"BusinessDay": "2014-09-29",
"OpenDate": "2014-09-29T12:05:58",
"OpenerUserId": 3,
"CloseDate": "2014-09-29T12:11:17",
"CloserUserId": 5,
"WorkplaceId": 1,
"Documents": [{
"Serie": "TD",
"Amount": -6.85,
"FirstNumber": 1,
"LastNumber": 1,
"Count": 1
}, {
"Serie": "T",
"Amount": 12.20,
"FirstNumber": 1,
"LastNumber": 2,
"Count": 2
}, {
"Serie": "F",
"Amount": 6.72,
"FirstNumber": 1,
"LastNumber": 1,
"Count": 1
}],
"Amounts": {
"NetAmount": 10.97,
"GrossAmount": 12.07,
"SurchargeAmount": 0.00,
"VatAmount": 1.10
},
"InvoicePayments": [{
"MethodName": "Cheque restaurante",
"Amount": 0.00
}, {
"MethodName": "Efectivo",
"Amount": 12.07
}, {
"MethodName": "Tarjeta",
"Amount": 0.00
}],
"SalesOrderPayments": [{
"MethodName": "Efectivo",
"Amount": 12.07
}, {
"MethodName": "Tarjeta",
"Amount": 0.00
}],

Guía del Integrador 124 Versión 5.1.0


"DeliveryNotePayments": [{
"MethodName": "Efectivo",
"Amount": 12.07
}, {
"MethodName": "Tarjeta",
"Amount": 0.00
}],
"TicketPayments": [{
"MethodName": "Efectivo",
"Amount": 12.07
}, {
"MethodName": "Tarjeta",
"Amount": 0.00
}]
}]
}

La información indicada para cada cierre de sistema es:

Number
Número único y correlativo de cierre de sistema.

BusinessDay
Fecha de negocio asociada a la jornada de trabajo con formato aaaa-mm-dd.

OpenDate
Fecha y hora en que se ha realizado la apertura de la jornada de trabajo con formato
aaaa-mm-ddThh:mm:ss.

OpenerUserId
Id del usuario que ha realizado la apertura de la jornada de trabajo.

CloseDate
Fecha y hora en que se ha realizado el cierre de la jornada de trabajo con formato
aaaa-mm-ddThh:mm:ss.

CloserUserId
Id del usuario que ha realizado el cierre de jornada de trabajo.

WokrplaceId
Id del local que ha realizado el cierre de sistema.

Documents
Información sobre los documentos generados en cada serie de facturas (incluyendo
facturas simplificadas y devoluciones). Para cada uno se incluye la siguiente
información en un elemento Document:

Serie
Serie de los documentos.

Guía del Integrador 125 Versión 5.1.0


FirstNumber
Número del primero documento generado en esa serie durante esta jornada
de trabajo.

LastNumber
Número del último documento generado en esa serie durante esta jornada de
trabajo.

Count
Número total de documentos generados en esa serie durante esta joranada
de trabajo.

Amount
Importe total (impuestos incluidos) facturado en esta serie.

Amounts
Importes totales de ventas durante esta jornada de trabajo. Detallando:

GrossAmount
Importe con impuestos incluidos.

NetAmount
Importe tras descontar impuestos.

VatAmount
Cuota correspondiente al impuesto.

SurchargeAmount
Cuota correspondiente al recargo de equivalencia.

InvoicePayments
Pagos de facturas realizados durante la jornada de trabajo ((impuestos incluidos)
desglosada por forma de pago. Para cada forma de pago se indica:

MethodName
Nombre de la forma de pago.

Amount
Importe cobrado.

SalesOrderPayments
Pagos de pedidos realizados durante la jornada de trabajo (impuestos incluidos)
desglosada por forma de pago. Para cada forma de pago se indica:

MethodName
Nombre de la forma de pago.

Amount
Importe cobrado.

DeliveryNotePayments
Pagos de albaranes realizados durante la jornada de trabajo ((impuestos incluidos)
desglosada por forma de pago. Para cada forma de pago se indica:

Guía del Integrador 126 Versión 5.1.0


MethodName
Nombre de la forma de pago.

Amount
Importe cobrado.

TicketPayments
Pagos de proformas realizados durante la jornada de trabajo ((impuestos incluidos)
desglosada por forma de pago. Para cada forma de pago se indica:

MethodName
Nombre de la forma de pago.

Amount
Importe cobrado.

Pedidos a Proveedor
Los pedidos a proveedor se indican dentro del elemento PurchaseOrders en sucesivos
elementos PurchaseOrder:

XML:

Guía del Integrador 127 Versión 5.1.0


<PurchaseOrders>
<PurchaseOrder Serie="PO" Number="1"
SupplierDocumentNumber="A4422" Date="2010-10-10"
Status="Confirmed">
<Warehouse Id="1" Name="Almacén Global"
Street="Calle del Almacén, 9" City="Madrid" Region="Madrid"
ZipCode="28099" Cif="" FiscalName="">
<Supplier Id="2" FiscalName="Arcoiris" Cif="B0018912"
Street="C/ García de Paredes, 10"
City="Madrid" Region="Madrid" ZipCode="28010"
ApplySurcharge="false"
AccountCode="43100001"/>

<Lines>
<Line
Index="0"
ProductId="1"
ProductName="Coca Cola"
PurchaseUnitId="1"
PurchaseUnitName="Uno"
FamilyId="1"
FamilyName="Refrescos"
VatId="3" VatRate="0.10" SurchargeRate="0.014"
OrderedQuantity="10.00" DeliveredQuantity="0.00"
Price="1.00" DiscountRate="0.01" CashDiscount="1.00"
TotalAmount="8.90">
<Notes><![CDATA[Servir en cajas nuevas]]>
</Line>
</Lines>

<Notes><![CDATA[Mis notas]]><Notes>

<Discounts DiscountRate="0.00" CashDiscount="0.00" />

<Totals GrossAmount="9.79" NetAmount="8.90"


VatAmount="0.89" SurchargeAmount="0.00">
<Taxes>
<Tax VatRate="0.1000" SurchargeRate="0.0140"
GrossAmount="9.79" NetAmount="8.90"
VatAmount="0.89" SurchargeAmount="0.00" />
</Taxes>
</Totals>

</PurchaseOrder>
</PurchaseOrders>

JSON:

Guía del Integrador 128 Versión 5.1.0


{
"PurchaseOrders": [
{
"Serie": "PO",
"Number": 1,
"Warehouse": {
"Id": 1,
"Name": "Almacén Global",
"Street": "Calle del Almacén, 9",
"City": "Madrid",
"Region": "Madrid",
"ZipCode": "28099",
"Cif": "",
"FiscalName": ""
},
"Supplier": {
"Id": 2,
"FiscalName": "Arcoiris",
"Cif": "HADGBF",
"Street": "",
"City": "",
"Region": "",
"ZipCode": "",
"ApplySurcharge": false
},
"SupplierDocumentNumber": "A4422",
"Date": "2010-10-10",
"Lines": [
{
"Index": 0,
"ProductId": 2,
"ProductName": "Coca Cola",
"PurchaseUnitId": 1,
"PurchaseUnitName": "Uno",
"FamilyId": 1,
"FamilyName": "Refrescos",
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"OrderedQuantity": 10.000,
"DeliveredQuantity": 0.000,
"Price": 1.00000000,
"DiscountRate": 0.0100,
"CashDiscount": 1.00000000,
"TotalAmount": 8.90000000,
"Notes": "Es cocacola zero"
}
],
"Notes": "Mis notas",
"Status": "Confirmed",
"Discounts": {

Guía del Integrador 129 Versión 5.1.0


"DiscountRate": 0.0000,
"CashDiscount": 0.000
},
"Totals": {
"GrossAmount": 9.79,
"NetAmount": 8.9,
"VatAmount": 0.89,
"SurchargeAmount": 0.0,
"Taxes": [
{
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"GrossAmount": 9.79,
"NetAmount": 8.9,
"VatAmount": 0.89,
"SurchargeAmount": 0.0
}
]
}
}
]
}

La información indicada para cada pedido es:

Serie
Serie de pedido.

Number
Número de pedido.

Date
Fecha del pedido en formato aaaa-mm-dd.

SupplierDocumentNumber
Número del pedido del proveedor.

Status
Estado del pedido. Puede ser:

Draft
El pedido está en borrador.

Confirmed
El pedido ha sido confirmado para enviar al proveedor (por ejempo, porque
ha sido cancelado).

PartialDelivery
El pedido ha sido servido parcialmente desde algún albarán.

Guía del Integrador 130 Versión 5.1.0


Delivered
El pedido ha sido servido totalmente desde algún albarán.

Warehouse
Datos del almacén, incluyendo:

Id
Identificador único del cliente.

Name
Nombre del almacén.

Street
Calle del almacén.

City
Ciudad del almacén.

Region
Provincia del almacén

ZipCode
Código postal del almacén.

Cif
Cif asociado al almacén.

FiscalName
Nommbre fiscal asociado al almacén.

Proveedor
Datos del proveedor, incluyendo:

Id
Identificador único del proveedor.

FiscalName
Nombre fiscal del proveedor.

Cif
CIF/NIF del proveedor.

Street
Calle del almacén.

City
Ciudad del almacén.

Region
Provincia del almacén

ZipCode
Código postal del almacén.

Guía del Integrador 131 Versión 5.1.0


Cif
Cif asociado al almacén.

ApplySurcharge
Si al proveedor se compra con recargo de equivalencia.

Lines
Líneas del documento, cada una de ellas en un elemento Line con el siguiente
formato:

Index
Índice de la línea dentro del documento. Las líneas se empiezan a numerar en
0.

ProductId
Identificador del producto principal de la línea.

ProductName
Nombre del producto principal de la línea.

PurchaseUnitId
Identificador único de la unidad de compra.

PurchaseUnitName
Nombre de la unidad de compra.

FamilyId
Identificador único de la familia asociada al producto de la línea, o cadena
vacía si este no tuviera asociada ninguna familia.

FamilyName
Nombre de la familia asociada al producto de la línea, o cadena vacía si este
no tuviera asociada ninguna familia.

OrderedQuantity
Cantidad pedida.

DeliveredQuantity
Cantidad servida.

VatId
Identificador único del impuesto asociado al producto de la línea.

VatRate
Tanto por uno de impuesto asociado al producto de la línea. Por ejemplo, si el
porcentaje de impuesto es 21%, este valor será 0.21.

SurchargeRate
Tanto por uno de recargo de equivalencia asociado al producto de la línea. Por
ejemplo, si el porcentaje de recargo es 4%, este valor será 0.04.

Price
Precio unitario de la unidad comprada.

Guía del Integrador 132 Versión 5.1.0


DiscountRate
Tanto por uno de descuento aplicado a la línea. Por ejemplo, si el porcentaje
de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado a la línea.

TotalAmount
Importe total de la línea tras aplicar descuentos.

Notes
Notas a nivel de línea de pedido.

Notas
Notas del pedido.

Discounts
Descuentos del documento

DiscountRate
Tanto por uno de descuento aplicado al documento. Por ejemplo, si el
porcentaje de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado al documento.

Totals
Contiene el detalle de los descuentos en pie del documento y de los totales,
desglosándolos por base imponible. La información incluida para cada uno es:

GrossAmount
Importe incluyendo los impuestos.

NetAmount
Importe tras descontar los impuestos.

VatAmount
Cuota correspondiente al impuesto.

SurchageAmount
Cuota correspondiente al recargo de equivalencia.

Los documentos aparecen ordenados primero por Nombre y Número de Serie y


luego por Id.

Albaranes de Entrada
Los albaranes de entrada se indican dentro del elemento IncomingDeliveryNotes en sucesivos
elementos IncomingDeliveryNote:

XML:

Guía del Integrador 133 Versión 5.1.0


<IncomingDeliveryNotes>
<IncomingDeliveryNote Serie="IDN" Number="1"
SupplierDocumentNumber="A4422" Date="2010-10-10"
Invoiced="false">
<Warehouse Id="1" Name="Almacén Global"
Street="Calle del Almacén, 9" City="Madrid" Region="Madrid"
ZipCode="28099" Cif="" FiscalName="">
<Supplier Id="2" FiscalName="Arcoiris" Cif="B0018912"
Street="C/ García de Paredes, 10"
City="Madrid" Region="Madrid" ZipCode="28010"
ApplySurcharge="false"
AccountCode="43100001"/>

<Lines>
<Line
Index="0"
ProductId="1"
ProductName="Fanta"
PurchaseUnitId="1"
PurchaseUnitName="Uno"
FamilyId="1"
FamilyName="Refrescos"
VatId="3" VatRate="0.10" SurchargeRate="0.014"
Quantity="10.00"
Price="1.00" DiscountRate="0.01" CashDiscount="1.00"
TotalAmount="8.90">
<Notes><![CDATA[Servir en cajas amarillas]]><Notes>
</Line>

<Line
Index="1"
ProductId="2"
ProductName="Coca Cola"
PurchaseUnitId="1"
PurchaseUnitName="Uno"
VatId="3" VatRate="0.10" SurchargeRate="0.014"
Quantity="10.00"
Price="1.00" DiscountRate="1.00" CashDiscount="1.00"
TotalAmount="-1.00">
<DeliveredOrder Serie="PO" Number="1"
LineIndex="0"/>
</Line>
</Lines>

<Notes><![CDATA[Mis notas]]><Notes>

<Discounts DiscountRate="0.00" CashDiscount="0.00" />

<Totals GrossAmount="9.79" NetAmount="8.90"


VatAmount="0.89" SurchargeAmount="0.00">
<Taxes>

Guía del Integrador 134 Versión 5.1.0


<Tax VatRate="0.1000" SurchargeRate="0.0140"
GrossAmount="9.79" NetAmount="8.90"
VatAmount="0.89" SurchargeAmount="0.00" />
</Taxes>
</Totals>

</IncomingDeliveryNote>
</IncomingDeliveryNotes>

JSON:

Guía del Integrador 135 Versión 5.1.0


{

"IncomingDeliveryNotes": [
{
"Serie": "IDN",
"Number": 1,
"Warehouse": {
"Id": 1,
"Name": "Almacén Global",
"Street": "Calle del Almacén, 9",
"City": "Madrid",
"Region": "Madrid",
"ZipCode": "28099",
"Cif": "",
"FiscalName": ""
},
"Supplier": {
"Id": 1,
"FiscalName": "Casbega",
"Cif": "AASDFGH",
"Street": "",
"City": "",
"Region": "",
"ZipCode": "",
"ApplySurcharge": false
},
"SupplierDocumentNumber": "AP1234",
"Date": "2018-12-19",
"Lines": [
{
"Index": 0,
"ProductId": 2,
"ProductName": "Coca Cola",
"PurchaseUnitId": 1,
"PurchaseUnitName": "Uno",
"FamilyId": 1,
"FamilyName": "Refrescos",
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"Quantity": 10.000,
"Price": 1.00000000,
"DiscountRate": 0.1000,
"CashDiscount": 0.00000000,
"TotalAmount": 9.00000000,
"Notes": "Es fanta de limón"
}
],
"Discounts": {
"DiscountRate": 0.0000,
"CashDiscount": 0.000

Guía del Integrador 136 Versión 5.1.0


},
"Totals": {
"GrossAmount": 9.9,
"NetAmount": 9.0,
"VatAmount": 0.9,
"SurchargeAmount": 0.0,
"Taxes": [
{
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"GrossAmount": 9.9,
"NetAmount": 9.0,
"VatAmount": 0.9,
"SurchargeAmount": 0.0
}
]
},
"Invoiced": true
}
]
}

La información indicada para cada pedido es:

Serie
Serie del albarán de entrada.

Number
Número del albarán de entrada.

Date
Fecha del albarán de entrada en formato aaaa-mm-dd.

SupplierDocumentNumber
Número del documento del albarán de entrada del proveedor.

Invoiced
Si el pedido tiene ha sido facturado o no.

Warehouse
Datos del almacén, incluyendo:

Id
Identificador único del cliente.

Name
Nombre del almacén.

Street
Calle del almacén.

Guía del Integrador 137 Versión 5.1.0


City
Ciudad del almacén.

Region
Provincia del almacén

ZipCode
Código postal del almacén.

Cif
Cif asociado al almacén.

FiscalName
Nommbre fiscal asociado al almacén.

Proveedor
Datos del proveedor, incluyendo:

Id
Identificador único del proveedor.

FiscalName
Nombre fiscal del proveedor.

Cif
CIF/NIF del proveedor.

Street
Calle del almacén.

City
Ciudad del almacén.

Region
Provincia del almacén

ZipCode
Código postal del almacén.

Cif
Cif asociado al almacén.

ApplySurcharge
Si al proveedor se compra con recargo de equivalencia.

Lines
Líneas del documento, cada una de ellas en un elemento Line con el siguiente
formato:

Index
Índice de la línea dentro del documento. Las líneas se empiezan a numerar en
0.

ProductId
Identificador del producto principal de la línea.

Guía del Integrador 138 Versión 5.1.0


ProductName
Nombre del producto principal de la línea.

PurchaseUnitId
Identificador único de la unidad de compra.

PurchaseUnitName
Nombre de la unidad de compra.

FamilyId
Identificador único de la familia asociada al producto de la línea, o cadena
vacía si este no tuviera asociada ninguna familia.

FamilyName
Nombre de la familia asociada al producto de la línea, o cadena vacía si este
no tuviera asociada ninguna familia.

Quantity
Cantidad del producto entregada.

VatId
Identificador único del impuesto asociado al producto de la línea.

VatRate
Tanto por uno de impuesto asociado al producto de la línea. Por ejemplo, si el
porcentaje de impuesto es 21%, este valor será 0.21.

SurchargeRate
Tanto por uno de recargo de equivalencia asociado al producto de la línea. Por
ejemplo, si el porcentaje de recargo es 4%, este valor será 0.04.

Price
Precio unitario de la unidad comprada.

DiscountRate
Tanto por uno de descuento aplicado a la línea. Por ejemplo, si el porcentaje
de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado a la línea.

TotalAmount
Importe total de la línea tras aplicar descuentos.

Notes
Notas a nivel de línea de pedido.

DeliveredOrder
Referencia de la línea del pedido que sirve.

Serie
Serie del pedido

Number
Número del pedido.

Guía del Integrador 139 Versión 5.1.0


LineIndex
Indice de la línea del pedido.

Notas
Notas del pedido.

Discounts
Descuentos del documento

DiscountRate
Tanto por uno de descuento aplicado al documento. Por ejemplo, si el
porcentaje de descuento es 10%, este valor será 0.1.

CashDiscount
Descuento en moneda aplicado al documento.

Totals
Contiene el detalle de los descuentos en pie del documento y de los totales,
desglosándolos por base imponible. La información incluida para cada uno es:

GrossAmount
Importe incluyendo los impuestos.

NetAmount
Importe tras descontar los impuestos.

VatAmount
Cuota correspondiente al impuesto.

SurchageAmount
Cuota correspondiente al recargo de equivalencia.

Los documentos aparecen ordenados primero por Nombre y Número de Serie y


luego por Id.

Facturas de Proveedor
Las facturas de proveedor se indican dentro del elemento PurchaseInvoices en sucesivos
elementos PurchaseInvoice:

XML:

Guía del Integrador 140 Versión 5.1.0


<PurchaseInvoices>
<PurchaseInvoice Serie="PI" Number="1"
SupplierDocumentNumber="A4422" Date="2010-10-10"
Accounted="true">
<Supplier Id="2" FiscalName="Arcoiris" Cif="B0018912"
Street="C/ García de Paredes, 10"
City="Madrid" Region="Madrid" ZipCode="28010"
ApplySurcharge="false"
AccountCode="43100001"/>

<IncomingDeliveryNotes>
<IncomingDeliveryNote Serie="IDN" Number="1"
SupplierDocumentNumber="A4422" Date="2010-10-10"
Invoiced="false">
<Warehouse Id="1" Name="Almacén Global"
Street="Calle del Almacén, 9" City="Madrid" Regi
ZipCode="28099" Cif="" FiscalName="">
<Supplier Id="2" FiscalName="Arcoiris" Cif="B0018912"
Street="C/ García de Paredes, 10"
City="Madrid" Region="Madrid" ZipCode="28010"
ApplySurcharge="false"
AccountCode="43100001"/>

<Lines>
<Line
Index="0"
ProductId="1"
ProductName="Fanta"
PurchaseUnitId="1"
PurchaseUnitName="Uno"
FamilyId="1"
FamilyName="Refrescos"
VatId="3" VatRate="0.10" SurchargeRate
Quantity="10.00"
Price="1.00" DiscountRate="0.10" CashD
TotalAmount="9.00">
<Notes><![CDATA[Servir en cajas amarilla
</Line>
</Lines>

<Notes><![CDATA[Mis notas]]><Notes>

<Discounts DiscountRate="0.00" CashDiscount="0.00" />

<Totals GrossAmount="9.79" NetAmount="8.90"


VatAmount="0.89" SurchargeAmount="0.00">
<Taxes>
<Tax VatRate="0.1000" SurchargeRate="0.0
GrossAmount="9.90" NetAmount="9
VatAmount="0.90" SurchargeAmoun
</Taxes>

Guía del Integrador 141 Versión 5.1.0


</Totals>

</IncomingDeliveryNote>
</IncomingDeliveryNotes>

<Totals GrossAmount="9.90" NetAmount="9.00"


VatAmount="0.90" SurchargeAmount="0.00">
<Taxes>
<Tax VatRate="0.1000" SurchargeRate="0.0140"
GrossAmount="9.90" NetAmount="9.00"
VatAmount="0.90" SurchargeAmount="0.00" />
</Taxes>
</Totals>

</PurchaseInvoice>
</PurchaseInvoices>

JSON:

Guía del Integrador 142 Versión 5.1.0


{
"PurchaseInvoices": [
{
"Serie": "FC",
"Number": 1,
"Supplier": {
"Id": 1,
"FiscalName": "Casbega",
"Cif": "AASDFGH",
"Street": "",
"City": "",
"Region": "",
"ZipCode": "",
"ApplySurcharge": false
},
"SupplierDocumentNumber": "FP1234",
"Date": "2018-12-19",
"IncomingDeliveryNotes": [
{
"Serie": "AC",
"Number": 1,
"Warehouse": {
"Id": 1,
"Name": "Almacén Global",
"Street": "Calle del Almacén, 9",
"City": "Madrid",
"Region": "Madrid",
"ZipCode": "28099",
"Cif": "",
"FiscalName": ""
},
"Supplier": {
"Id": 1,
"FiscalName": "Casbega",
"Cif": "AASDFGH",
"Street": "",
"City": "",
"Region": "",
"ZipCode": "",
"ApplySurcharge": false
},
"SupplierDocumentNumber": "AP1234",
"Date": "2018-12-10",
"Lines": [
{
"Index": 0,
"ProductId": 2,
"ProductName": "Coca Cola",
"PurchaseUnitId": 1,
"PurchaseUnitName": "Uno",
"FamilyId": 1,

Guía del Integrador 143 Versión 5.1.0


"FamilyName": "Refrescos",
"VatId": 3,
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"Quantity": 10.000,
"Price": 1.00000000,
"DiscountRate": 0.1000,
"CashDiscount": 0.00000000,
"TotalAmount": 9.00000000,
"Notes": "Servir en cajas amarillas"
}
],
"Discounts": {
"DiscountRate": 0.0000,
"CashDiscount": 0.000
},
"Totals": {
"GrossAmount": 9.9,
"NetAmount": 9.0,
"VatAmount": 0.9,
"SurchargeAmount": 0.0,
"Taxes": [
{
"VatRate": 0.1000,
"SurchargeRate": 0.0140,
"GrossAmount": 9.9,
"NetAmount": 9.0,
"VatAmount": 0.9,
"SurchargeAmount": 0.0
}
]
},
"Invoiced": true
}
],
"Payments": [
{
"Date": "2018-12-19",
"MethodId": 1,
"MethodName": "Efectivo",
"Amount": 9.900
}
],
"Totals": {
"GrossAmount": 9.9,
"NetAmount": 9.0,
"VatAmount": 0.9,
"SurchargeAmount": 0.0,
"Taxes": [
{
"VatRate": 0.1000,

Guía del Integrador 144 Versión 5.1.0


"SurchargeRate": 0.0140,
"GrossAmount": 9.9,
"NetAmount": 9.0,
"VatAmount": 0.9,
"SurchargeAmount": 0.0
}
]
},
"Accounted": false
}
]
}

La información indicada para cada pedido es:

Serie
Serie de la factura.

Number
Número de factura.

Date
Fecha de la factura en formato aaaa-mm-dd.

SupplierDocumentNumber
Número de la factura del proveedor.

Accounted
Si la factura ha sido procesada y contabilizada. Una factura contabilizada no se puede
borrar ni modioficar

Proveedor
Datos del proveedor, incluyendo:

Id
Identificador único del proveedor.

FiscalName
Nombre fiscal del proveedor.

Cif
CIF/NIF del proveedor.

Street
Calle del almacén.

City
Ciudad del almacén.

Region
Provincia del almacén

Guía del Integrador 145 Versión 5.1.0


ZipCode
Código postal del almacén.

Cif
Cif asociado al almacén.

ApplySurcharge
Si al proveedor se compra con recargo de equivalencia.

IncomingDeliveryNotes
Albaranes de entrada que incluye la factura. Los datos que incluye cada albarán se
pueden consultar en el apartado de exportación de alabaranes de entrada.

Totals
Contiene el detalle de los descuentos en pie del documento y de los totales,
desglosándolos por base imponible. La información incluida para cada uno es:

GrossAmount
Importe incluyendo los impuestos.

NetAmount
Importe tras descontar los impuestos.

VatAmount
Cuota correspondiente al impuesto.

SurchageAmount
Cuota correspondiente al recargo de equivalencia.

Payments
Lista con los pagos asociados a la factura. Cada pago incluirá la siguiente información:

MethodId
Identificador de la forma de pago.

MethodName
Nombre de la forma de pago.

Amount
Cantidad pagada

Date
Fecha en la que se ha realizado el pago.

Los documentos aparecen ordenados primero por Nombre y Número de Serie y


luego por Id.

Formato de fichero de exportación de datos maestros


El formato del fichero de exportación de datos maestros es similar al formato de ficheros de
importación, aunque es posible que se incluya información adicional que no es importada por
Ágora, pero puede resultar de utilidad a otras aplicaciones, como por ejemplo el stock de los
productos.

Guía del Integrador 146 Versión 5.1.0


En el proceso de exportación se incluirán tanto los registros activos como los registros que
hayan sido eliminados en Ágora, con el fin de que pueda proceder a su eliminación en otros
sistemas.

Resumen de Locales
Es posible exportar una información resumida de la estructura de locales generadas para
obtener información de los grupos de puntos de venta asociados a cada local, los puntos de
venta existentes en cada grupo, y los almacenes asociados a algún grupo de puntos de venta
del local. Para ello deberá utilizar el parámetro workplacessummary al invocar los servicios de
integración.

Este resumen no se puede importar en Ágora a través de servicios de integración, sólo se


puede exportar con fines informativos.

La informacion sobre la estructura de locales se incluye en el elemento WorkplacesSummary en


sucesivos elementos WorkplaceSummary:

XML:

Guía del Integrador 147 Versión 5.1.0


<WorkplacesSummary>
<WorkplaceSummary Id="1" Name="Bar Tolo">
<PosGroups>
<PosGroup Id="1" Name="Tolo/TPVs">
<PointsOfSale>
<PointOfSale Id="9" Name="BT1"/>
<PointOfSale Id="10" Name="BT2"/>
<PointOfSale Id="13" Name="BT3" DeletionDate="2012-12-24T15:00:00"/>
</PointsOfSale>
</PosGroup>
<PosGroup Id="2" Name="Tolo/Comanderas">
<PointsOfSale>
<PointOfSale Id="11" Name="CT1"/>
</PointsOfSale>
</PosGroup>
</PosGroups>
<Warehouses>
<Warehouse Id="1" Name="Tolo/Terraza"/>
<Warehouse Id="2" Name="Tolo/Almacén"/>
</Warehouses>
</WorkplaceSummary>
<WorkplaceSummary Id="2" Name="Bar Ullo">
<PosGroups>
<PosGroup Id="3" Name="Ullo/TPVs">
<PointsOfSale>
<PointOfSale Id="15" Name="UT1"/>
</PointsOfSale>
</PosGroup>
</PosGroups>
<Warehouses>
<Warehouse Id="3" Name="Ullo/Almacén"/>
</Warehouses>
</WorkplaceSummary>
</WorkplacesSummary>

JSON:

Guía del Integrador 148 Versión 5.1.0


{
"WorkplacesSummary": [
{
"Id": 1,
"Name": "Bar Tolo",
"PosGroups": [
{
"Id": 1,
"Name": "Tolo/TPVs",
"PointsOfSale": [
{
"Id": 9,
"Name": "BT1"
},
{
"Id": 10,
"Name": "BT2"
},
{
"Id": 13,
"Name": "BT3",
"DeletionDate": "2012-12-24T15:00:00"
}
]
},
{
"Id": 2,
"Name": "Tolo/Comanderas",
"PointsOfSale": [
{
"Id": 11,
"Name": "CT1"
}
]
}
],
"Warehouses": [
{
"Id": 1,
"Name": "Tolo/Terraza"
},
{
"Id": 2,
"Name": "Tolo/Almacén"
}
]
},
{
"Id": 2,
"Name": "Bar Ullo",
"PosGroups": [

Guía del Integrador 149 Versión 5.1.0


{
"Id": 3,
"Name": "Ullo/TPVs",
"PointsOfSale": [
{
"Id": 15,
"Name": "UT1"
}
]
}
],
"Warehouses": [
{
"Id": 3,
"Name": "Ullo/Almacén"
}
]
}
]
}

La información en cada elemento es:

Id
Id del local.

Name
Nombre del local.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de querer
eliminar el registros. Si se incluye este atributo con un valor de fecha y hora válido, se
considerará que el registro ha sido dado de baja. El formato de fechas soportado es
aaaa-mm-ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

PosGroups
Contiene los grupos de puntos de venta asociados al local. Para cada uno se indica:

Id
Id del grupo de puntos de venta.

Name
Nombre del grupo de puntos de venta.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de
querer eliminar el registros. Si se incluye este atributo con un valor de fecha y
hora válido, se considerará que el registro ha sido dado de baja. El formato de
fechas soportado es aaaa-mm-ddThh:mm:ss, por ejemplo
2012-01-31T10:59:20.

Guía del Integrador 150 Versión 5.1.0


PointsOfSale
Puntos de venta asociados al grupo. Para cada uno se indica:

Id
Id del punto de venta.

Name
Nombre del punto de venta.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en
caso de querer eliminar el registros. Si se incluye este atributo con
un valor de fecha y hora válido, se considerará que el registro ha
sido dado de baja. El formato de fechas soportado es aaaa-mm-
ddThh:mm:ss, por ejemplo 2012-01-31T10:59:20.

Warehouses
Almacenes asociados a alguno de los grupos de puntos de venta del local. Para cada
uno se indica:

Id
Id del almacén.

Name
Nombre del almacén.

DeletionDate
Fecha de borrado del registro. Sólo se debe incluir este atributo en caso de
querer eliminar el registros. Si se incluye este atributo con un valor de fecha y
hora válido, se considerará que el registro ha sido dado de baja. El formato de
fechas soportado es aaaa-mm-ddThh:mm:ss, por ejemplo
2012-01-31T10:59:20.

Stocks
Es posible exportar el stock de cada producto en cada almacén utilizando el parámetro stocks
al invocar los servicios de integración.

El stock no se puede importar en Ágora a través de servicios de integración. Esto es así porque
no es posible garantizar que no haya habido movimientos de stock entre el momento en que se
generó el fichero xml con la información de stock, y el momento de la importación en Ágora, por
lo que se podrían producir errores difíciles de detectar y resolver.

Los datos de stock se indican dentro del elemento Stocks en sucesivos elementos Stock:

XML:

Guía del Integrador 151 Versión 5.1.0


<Stocks>
<Stock WarehouseId="1" ProductId="2" Quantity="5.000"/>
<Stock WarehouseId="1" ProductId="3" Quantity="9.000"/>

</Stocks>

JSON:

{
"Stocks": [
{
"WarehouseId": 1,
"ProductId": 2,
"Quantity": 5.000
},
{
"WarehouseId": 1,
"ProductId": 3,
"Quantity": 9.000
}
]
}

La información en cada elemento es:

WarehouseId
Id del almacén.

ProductId
Id del producto.

Quantity
Cantidad en unidades de venta disponible actualmente en stock.

El fichero incluirá el stock de todos los productos que controlan stock (excepto los que tienen
escandallo) para todos los almacenes. En los casos en que no haya stock, se indicará el valor 0.

Guía del Integrador 152 Versión 5.1.0


Integración mediante API HTTP

Ágora también soporta la importación y exportación de datos mediante una API HTTP. Para ello,
deberá activar la opción correspondiente al configurar el módulo de servicios de integración. Al
activar el API HTTP deberá indicar un token de autenticación, que tendrá que ser enviado junto
con cada petición que quiera enviar u obtener datos del API.

El servidor HTTP utilizado será el mismo que el de la Administración de Ágora. Todas las URLs
que aparecen en este manual son relativas a la URL base de la administración, por defecto,
http://SERVIDOR:8984/.

El API soporta los mismos tipos de exportación e importación que la aplicación de línea de
comandos ais.exe por lo que puede usarla para exportar e importar datos maestros de Ágora,
así como exportar e importar datos de ventas.

A diferencia de la integración mediante ficheros, el API soporta tanto XML como JSON. El
formato es el descrito en las secciones correspondientes de este manual.

Formato de Petición y Respuesta


A la hora de solicitar o enviar datos al API es necesario indicar algunas cabeceras en la petición
HTTP:

Api-Token
Valor de la clave (token de autenticación) que se haya configurado en Ágora desde la
pantalla de Activar Módulos Adicionales. Ejemplo:

▪ Api-Token: gtSUwbHbxwg3hRXhZ01Kictq

Accept
Formato de serialización empleado. Por defecto se usará JSON si está cabecera no está
presente. Los valores soportados son:

▪ Accept: application/xml para XML

▪ Accept: application/json para JSON

Accept-Encoding (opcional)
Permite habilitar la compresión de datos en la respuesta para reducir el tráfico de red a
costa de incrementar el tiempo de proceso en el servidor. Para habilitar la compresión
es necesario añadir esta cabecera con el valor:

▪ Accept-Encoding: gzip

Guía del Integrador 153 Versión 5.1.0


Content-Type
Formato del contenido enviado en las peticiones POST. Es necesario indicar el
encoding para evitar problemas con caracateres no ASCII. Los formatos más
habituales són:

▪ Content-Type: application/xml; charset=utf-8 para XML.

▪ Content-Type: application/json; charset=utf-8 para JSON.

El código de estado de la respuesta será 200 OK en caso de que la petición se ha procesado con
éxito, o un código de error en caso contrario. Si se trata de una solicitud de exportación de
datos, el cuerpo de la respuesta contendrá los datos exportados en el formato indicado.

Además, se incluiría una cabecerá Api-Version con la versión de Ágora que ha generado la
respuesta para permitir que los sistemas externos puedan amoldarse a cambios de versiones.

Exportación de ventas y compras


Para obtener los datos de ventas (facturas, albaranes, pedidos, cierres de caja, movimientos de
caja, pedidos a proveedor, albaranes de entrada, facturas de proveedor etc.) deberá utilizar la
siguiente URL:

/api/export/

Deberá lanzar una petición GET a esta URL. Opcionalmente se pueden incluir los siguientes
parámetros:

business-day
Indica la fecha de negocio en formato aaaa-mm-dd para los documentos de venta o
documentos de compra para la cual se desean obtener los datos. Si no se especifica se
exportarán las ventas y compras de hoy.

▪ /api/export/?business-day=2013-05-21

filter
Permite restringir el tipo de datos exportado. Si no se establece se exportan todos los
datos disponibles, pero puede indicar los tipos de datos que desee exportar separados
por comas:

▪ CashTransactions: movimientos de caja

▪ DeliveryNotes: alabaranes

▪ SalesOrders: pedidos

▪ Invoices: facturas

▪ PosCloseOuts: cierres de caja

▪ SystemCloseOuts: cierres de sistema

▪ PurchaseOrders: pedidos a proveedor

▪ IncomingDeliveryNotes: albaranes de entrada

Guía del Integrador 154 Versión 5.1.0


▪ PurchaseInvoices: facturas de proveedor
Por ejemplo, si sólo desea obtener las facturas de hoy:

▪ /api/export/?filter=Invoices
O si necesita conocer los pedidos y albaranes de un día concreto:

▪ /api/export/?business-
day=2018-04-28&filter=SalesOrders,DeliveryNotes

workplaces

Permite limitar la exportación a los locales con los ids indicados. Si no se establece se
exportan datos para todos los locales, pero puede indicar los locales para los cuales
quiere exportar datos pasando sus ids separados por comas:

▪ /api/export/?workplaces=2,3,5,7

Exportación de datos maestros


Para obtener los datos maestros de Ágora (productos, precios, tarifas, etc. deberá utilizar la
siguiente URL:

/api/export-master/

Deberá lanzar una petición GET a esta URL. Opcionalmente se pueden incluir los siguientes
parámetros:

filter
Permite restringir el tipo de datos a exportar, separándolos por comas. Si no se indica
este parámetro, se exportará toda la información. Los posibles valores son:

▪ WorkplacesSummary: resumen de locales

▪ Series: series

▪ Customers: clientes

▪ Users: usuarios

▪ Vats: tipos de impuestos

▪ PaymentMethods: formas de pago

▪ PriceLists: tarifas

▪ SaleCenters: centros de venta

▪ Families: familias

▪ Products: productos

▪ Menus: menús

▪ Offers: promociones

▪ Suppliers: proveedores

▪ Warehouses: almacenes

Guía del Integrador 155 Versión 5.1.0


▪ Stocks: stocks actuales
Por ejemplo, quiere exportar los datos de series, clientes y familias, se enviaría una
peticion a la URL:

▪ /api/export-master/?filter=Series,Customers,Families

where-product-category-id

Permite limitar la exportación de los datos de productos y stocks a los productos que
tienen asignada la categoría indicada. Este parámetro será ignorado a la hora de
exportar el resto de información. Si no se establece se exportarán datos de todas las
categorías existentes. Para utilizarlo, deberá indicar el id de la categoría cuyos
productos quiere exportar:

▪ /api/export-master/?filter=Products&where-product-category-id=2

where-stock-warehouse-id

Permite limitar la exportación de los datos de stock al almacén indicado. Este


parámetro será ignorado a la hora de exportar el resto de información. Si no se
establece se exportará el stock para todos los almacenes existentes. Para utilizarlo,
deberá indicar el id del almacén cuyo stock desea exportar:

▪ /api/export-master/?filter=Stocks&where-stock-warehouse-id=14
Este parámetro puede usarse conjuntamente con el parámetro where-product-
category-id para acotar más exportación de datos de stock. Por ejemplo, para
obtener el stock de los productos de la categoría 17 en el almacén 14, se debe enviar
una petición a la URL:

▪ /api/export-master/?filter=Stocks&where-stock-warehouse-
id=14&where-product-category-id=17

Importación (ventas, compras y maestros)


La importación de datos se realiza en una misma URL, independientemente de que sean ventas
o datos maestros. Deberá realizar una petición POST a:

/api/import/

El cuerpo de la petición deberá contener los datos a importar en el formato indicado en las
secciones correspondientes de este manual.

Recuerde que deberá establecer tanto la cabecera Accept para indicar el formato de
serialización que quiere emplear con el API y como la cabecera Content-Type para indicar la
codificación de los mismos.

Por ejemplo, para enviar datos en formato XML codificado como utf-8 deberá usar las siguientes
cabeceras:

Guía del Integrador 156 Versión 5.1.0


Api-Token: gtSUwbHbxwg3hRXhZ01Kictq
Accept: application/xml
Content-Type: application/xml; charset=utf-8

Para enviar datos en formato json codificado como utf-8 deberá usar las siguientes cabeceras:

Api-Token: gtSUwbHbxwg3hRXhZ01Kictq
Accept: application/json
Content-Type: application/json; charset=utf-8

Impresión libre
Utilizando los servicios de integración a través del API HTTP es posible imprimir textos y
documentos usando las impresoras configuradas en el sistema. Esto puede ser útil para notificar
a los empleados del establecimiento de determinados eventos, por ejemplo que se acaba de
recibir un nuevo pedido, o que se ha activado una promoción.

Para ello deberá realizar una petición POST a la siguiente URL:

/api/print/

El cuerpo de la petición deberá ser un documento JSON con el siguiente formato:

{
"PrinterName": "tickets-pr80",
"Format": "plain",
"Data": "Primera línea de texto\nSegunda línea de texto\nTercera línea de texto"
}

Donde:

PrinterName
Es el nombre en Windows de la impresora por la que desea imprmir. Si no indica esta
propiedad, se usará la impresora configurada como predeterminada en Windows. Si
indica la propiedad, deberá ser un nombre de impresora válido.

Format
Formato en el que se están enviando lo datos. Puede ser plain, si la petición contiene
los datos en formato texto, o base64 si la petición contiene los datos en formato
binario codificado en base64. Si no indica esta propiedad, se asumirá que los datos

Guía del Integrador 157 Versión 5.1.0


están en formato texto. Si indica la propiedad, deberá tener uno de los dos valores
soportados (plain o base64).

Data
Información que se enviará a la impresora. Ágora no realizará ningún proceso sobre
esta información, que será enviada directamente al driver de impresión.

Generación de datos para clientes de ACMS


Puede utilizar los servicios de integración a través del API HTTP en una instalación de ACMS
para automatizar el envío de datos desde la Central a los Locales de la instalación.

Para ello deberá realizar una petición POST a la siguiente URL:

/api/hub/generate-data/

Deberá lanzar una petición POST a esta URL. Opcionalmente se pueden incluir los siguientes
parámetros:

workplaces
Permite restringir los locales con los ids indicados a los cuales se enviarán los datos
desde la central, separándolos por comas. Si no se indica este parámetro, los datos se
enviarán a todos los locales. Por ejemplo, si quiere enviar datos a los locales con Id 1 y
3, se enviaría una peticion a la URL:

▪ /api/hub/generate-data/?workplaces=1,3

Puede ejecutar fácilmente el envío de datos ejecutando el siguiente script de cURL:

curl -X POST http://url_agora_central:8984/api/hub/generate-data/ -H 'Api-Token:


api_token'

Donde:

url_agora_central
Es la dirección de internet de la central de la instalación.

api_token
El token configurado en el monitor de servicio de Ágora, especificado al activar el
módulo de Servicios de Integración y el API web.

Guía del Integrador 158 Versión 5.1.0


Integración con Sistemas de Fidelización

Ágora se puede integrar con sistemas de fidelización a través de los servicios de integración
incluidos con Ágora. Para poder realizar la integración, es necesario primero conocer los
conceptos sobre los que se va a asentar:

Un programa de fidelización (LoyaltyProgram) permite ofrecer premios (Reward) a sus


participantes (Member) en base a las consumiciones realizadas previamente con el fin de
aumentar las ventas del comercio (Merchant) que lanza el programa. Para ello, será necesario:

▪ Que Ágora pueda identificar un participante del programa y conocer los premios que
tiene disponibles.

▪ Que Ágora pueda notificar al sistema de fidelización las consumiciones realizadas y los
premios redimidos por un participante cuando se le emite una factura.

Participantes en el programa de fidelización


Los participantes del programa de fidelización no tienen por qué ser clientes (Customer) de
Ágora. Ágora no mantendrá información de los participantes del programa de fidelización, más
allá de la necesaria para mantener la integración entre ambos sistemas, y esa información
siempre será algo que podrá decidir el sistema externo. Esto cumple varios objetivos:

▪ Evitar posibles problemas legales. Habrá sistemas de fidelización en los que el acuerdo
de cesión de datos se haya realizado entre el participante del programa y el sistema de
fidelización, pero no sea legal cederle esos datos al establecimiento.

▪ Dar libertad al programa de fidelización para definir sus participantes con la información
que quiera, sin necesidad de buscar un modelo que sea compatible con los requisitos de
Ágora para crear un cliente.

▪ Poder desligar el cliente de una factura del participante del programa de fidelización,
cubriendo así casos como que la factura se emita a una empresa pero los puntos los
acumule otra persona.

El único requisito que impone Ágora es que en el programa de fidelización los participantes
cuenten con un identificador único. El programa de fidelización podrá decidir si ese identificador
es una clave numérica, un código QR, un número de telefóno, un DNI, etc. Desde el punto de
vista de Ágora se tratará como un valor alfanumérico y se usará para acceder al sistema de
fidelización para validar el participante, obtener sus promociones o imputarle los consumos.

Ágora sólo permite identificar participantes del programa de fidelización a partir de su


identificador único. No existe opción de buscar por otros campos, y el sistema de fidelización
debe responder con un único resultado a las peticiones de validación de participante del
programa realizadas por Ágora. Esto se hace por varios motivos:

▪ Simplificar al máximo el interface de usuario y la operativa en el punto de venta.

Guía del Integrador 159 Versión 5.1.0


▪ Evitar dependencias en la forma de modelar los datos del sistema de fidelización y
Ágora. Para poder buscar por campos que no fuesen el código único, ambos sistemas
deberían coordinarse sobre los campos que existen, perdiendo flexibilidad.

▪ Aumentar la seguridad del sistema. Al hacer obligatorio leer el identificador único del
cliente, si éste se encuentra en una tarjeta/app de fidelización, es más complicado
(aunque posible) para el empleado del comercio realizar operativas ilegales.

Premios
Los participantes del programa de fidelización pueden obtener distintos tipos de premio en base
a sus consumiciones previas o a los parámetros que decida el sistema de fidelización. Desde el
punto de vista de Ágora, cómo se consiguen esos premios es irrelevante.

Una vez que en Ágora se ha identificado a un participante del programa de fidelización se podrá
solicitar al sistema de fidelización los premios que tiene disponibles. Ágora mostrará al usuario
la lista de premios para que pueda seleccionar cuales desea redimir. Los premios no se
aplicarán automáticamente, únicamente se aplicarán aquellos que hayan sido seleccionados
manualmente por el usaurio. De esta forma el participante del programa de fidelización puede
decidir si desea redimir los premios acumulados o conservarlos para el futuro.

Los tipos de premios soportados por Ágora son:

▪ Aplicar un descuento directo en porcentaje sobre el total de la factura.

▪ Aplicar un descuento directo en moneda sobre el todal de la factura. Si el descuento es


superior al total de la factura, sólo se aplicará el descuento necesario para dejar la
factura a cero.

▪ Aplicar un descuento predefinido en Ágora sobre el total de la factura.

▪ Aplicar una promoción existente en Ágora sobre la factura.

El sistema de fidelización no debe considerar el premio redimido hasta que reciba desde Ágora
la notificación de factura. Esto es necesario para cubrir escenarios en los que se asocia un
premio a un ticket de Ágora, pero luego el ticket no llega a facturarse por el motivo que sea.

Consumiciones
Cada vez que se emite una factura en Ágora se notificará al sistema de fidelización de ello,
indicando su importe, el contenido detallado, el participante del programa al que se imputar las
consumiciones y los posibles premios redimidos.

Hay algunas operativas en Ágora que pueden resultar complejas desde el punto de vista del
sistema de fidelización y la asignación del participante al documento. Se trata de las siguientes:

▪ Al dividir un ticket, no se permitirá realizar la división si tiene asociado un participante


del programa de fidelización. Será necesario realizar primero la división y
posteriormente asociar el participante a cada uno de los tickets generados.

Guía del Integrador 160 Versión 5.1.0


▪ Al unir dos tickets, si sólo uno de ellos está asociado a un participante, se respetará ese
participante. En caso de que ambos tengan participantes asociados, no se permitirá
realizar la unión.

▪ Al emitir una devolución asociada a un participante, se notificará al sistema de


fidelización de la misma. Esto es aplicable a devoluciones emitidas también durante la
reapertura de tickets, conversión de facturas simplificadas en facturas o cualquier otro
motivo.

▪ Al realizar un cambio de forma de pago sobre una factura asociada a un participante, no


se notificará al sistema de fidelización. De esta forma se evita que el sistema de
notificación tenga que distinguir entre facturas nuevas y facturas cuya forma de pago
ha cambiado a la hora de imputar consumos al participante del programa.

▪ Al emitir un albarán, Ágora no notificará al sistema de fidelización. La notificación se


realizará en el momento de la factura. Esto es una limitación del diseño actual que
podría llevar a redimir varias veces el mismo premio si en lugar de facturar los tickets
se generan albaranes. En cualquier caso, el sistema de fidelización siempre tiene la
última palabra a la hora de redimir premios y podría rechazar el envío de una factura si
detecta que hay premios que ya han sido redimidos previamente.

Protocolo de Integración
La integración entre Ágora y el sistema de fidelización se realizará a través de peticiones HTTP
realizadas desde Ágora. Cada petición se hará a una URL diferente configurable en Ágora, pero
deberá ajustarse al protocolo definido en este documento.

Dado que cada sistema de fidelización puede tener su propio esquema de autenticación y
autorización, no existirá ningún mecanismo explícito para autenticar Ágora frente a las URLs
proporcionadas. Es recomendable que todo el acceso se realice a través de SSL y, en caso de
considerarse necesario, se puede incluir un token de autorización como parte de la URL para
poder limitar el acceso de Ágora revocando el token si fuera necesario.

Todas las peticiones y respuestas serán en formato JSON codificado en utf8. Esto se reflejará en
las cabeceras HTTP de las peticiones y respuestas. Adicionalmente, en las peticiones realizadas
con Ágora se enviará una cabecera Agora-Version para indicar la versión de Ágora que está
generando la petición, por si el sistema de fidelización tuviera que tenerlo en cuenta (por
ejemplo, porque una versión antigua de Ágora no soportase nuevos formatos de premios).

Peticiones:

Accept: application/json
Agora-Version: 5.0.4

Respuestas:

Guía del Integrador 161 Versión 5.1.0


Accept: application/json
Content-Type: application/json; charset=utf-8

Validación de participante y obtención de premios


Para validar si un identificador único está registrado en el programa de fidelización y obtener
sus premios disponibles se invocará la URL configurada en Ágora. En esta URL se reemplazará el
marcador {member_id} por el identificador único de participante.

Por ejemplo, si la URL configurada en Ágora es la siguiente:

https://api.loyalty-club.com/member/{member_id}/

Al leer el identificador de participante 3hRXhZ01Kictq Ágora lanzará una petición GET a la URL:

https://api.loyalty-club.com/member/3hRXhZ01Kictq/

Si el identificador es válido, la respuesta deberá tener como código de respuesta 200 OK y su


cuerpo ajustarse al siguiente formato:

Guía del Integrador 162 Versión 5.1.0


{
"MemberId": "3hRXhZ01Kictq",
"DisplayText:" "Hola Marcos Gómez, tienes 257 puntos acumulados.",
"Rewards": [
{
"Id": "7cnZDFPw",
"Name": "Descuento de 3€",
"Description": "Descuento de 3€ sobre el total de tu factura.",
"Type": "CashDiscount",
"Value": 5.00
},
{
"Id": "T8j3h6TL",
"Name": "Descuento del 10%",
"Description": "Descuento del 10% sobre el total de tu factura.",
"Type": "DiscountRate",
"Value": 0.10
},
{
"Id": "8xmssMkq",
"Name": "Descuento Cumpleaños",
"Description": "Consigue un descuento por ser tu cumpleaños.",
"Type": "NamedDiscount",
"Code": "HBD"
},
{
"Id": "tu98JVRb",
"Name": "Promoción Postre Gratis",
"Description": "Pide dos platos principales y llévate un postre gratis.",
"Type": "Offer",
"Code": "PPG"
}
]
}

Donde:

▪ MemberId: es el identificador único del participante en el programa de fidelización.

▪ DisplayText: es el texto que se mostrará en pantalla al identificar al participante.


Puede incluir información sobre el participante (nombre, teléfono, etc.), saldo
acumulado de puntos, próximas promociones...

▪ Rewards: contiene la lista de premios disponibles para el participante en este momento.


Cada premio debe incluir la siguiente información:

▪ Id: identificador único del premio. Este identificador será generado por el
sistema de fidelización y será enviado por Ágora al notificar una venta para que
pueda proceder a redimirlo.

Guía del Integrador 163 Versión 5.1.0


▪ Name: nombre del premio. Se mostrará al empleado para facilitar la selección
del premio que desea aplicar.

▪ Description: descripción larga del premio. Podrá ser consultada por el


empleado para facilitar la selección del premio que desea aplicar.

▪ Type: tipo de premio. Puede ser:

▪ CashDiscount: descuento directo en moneda sobre total de factura. El


valor del descuento se deberá indicar en la propiedad Value.

▪ DiscountRate: descuento directo en porcentaje expresado en tanto


por uno sobre total de factura (por ejemplo, un descuento del 25% se
expresa como 0.25). El valor del descuento se deberá indicar en la
propiedad Value.

▪ NamedDiscount: descuento predefinido en Ágora. El código del


descuento se deberá indicar en la propiedad Code y debe
corresponderse con un descuento existente en Ágora de tipo
"Descuento en Ticket". En caso de que el no exista tal descuento en
Ágora se ignorará el premio. Utilizar NamedDiscount en lugar de
descuentos directos permite luego analizar el Ágora más fácilmente los
descuentos aplicados y delegar en Ágora el importe real del descuento
aplicado.

▪ Offer: promoción definida en Ágora. El código de promoción se deberá


indicar en la propiedad Code y debe corresponderse con una promoción
existente en Ágora de tipo "Sólo clientes y tickets seleccionados". En
caso de que no exista tal promoción en Ágora se ignorará el premio.

Si no hay premios disponibles para redimir se deberá devolver un array vacío, pero el código de
respuesta deberá seguir siendo 200 OK.

En caso de que el identificador no sea válido, el servidor deberá devolver un código de


respuesta 404 Not Found.

Acumulación de puntos y redención de premios


Cada vez que se emita una factura en Ágora asociada a un participante del programa de
fidelización se enviará una notificación mediante una petición POST a la URL configurada en
Ágora, por ejemplo:

https://api.loyalty-club.com/invoices/

Esta URL no incluye información del member_id asociado a la factura porque en el caso de
facturas de varios albaranes, cada albarán podría tener un member_id distinto.

Guía del Integrador 164 Versión 5.1.0


En el cuerpo de la petición se incluirán todos los detalles de la factura en el formato descrito en
la sección de exportación de facturas de este manual. Además de la información propia de la
factura (totales, productos, cantidades, etc.) para permitir acumular los consumos del usuario,
se incluirán los premios redimidos en esa factura como datos adicionales dentro de los cada
elemento InvoiceItem:

"LoyaltyProgram": {
"MemberId": "3hRXhZ01Kictq",
"Rewards": [{
"Id": "7cnZDFPw",
"Name": "Descuento de 3€",
"Type": "CashDiscount",
"Value": 3.000000
}, {
"Id": "8xmssMkq",
"Name": "Descuento Cumpleaños",
"Type": "NamedDiscount",
"Code": "EMPT"
}]
}

En la propiedad LoyaltyProgram se incluirá toda la información relativa al programa de


fidelización:

MemberId
Identificador único del participante del sistema de fidelización.

Rewards
Contiene la lista de premios consumidos por el participante. Puede ser vacía si no se ha
redimido ningún premio. Cada premio incluye la siguiente información:

Id
Identificador único del premio.

Name
Nombre del premio.

Type
Tipo de premio. Puede ser:

CashDiscount
Descuento directo en moneda sobre total de factura. El valor del
descuento se indicará en la propiedad Value.

DiscountRate
Descuento directo en porcentaje expresado en tanto por uno sobre
total de factura (por ejemplo, un descuento del 25% se expresa
como 0.25). El valor del descuento se indicará en la propiedad
Value.

Guía del Integrador 165 Versión 5.1.0


NamedDiscount
Descuento predefinido en Ágora. El código del descuento se indicará
en la propiedad Code.

Offer
Promoción definida en Ágora. El código de promoción se indicará en
la propiedad Code.

El sistema de fidelización podrá decidir si acepta o rechaza la factura. En caso de que se rechace
la factura, Ágora no realizará el cierre de factura. Esto permite que el sistema de fidelización
tenga la última palabra sobre los premios redimidos. Si considera que hay algún problema en la
forma en que se han redimido los premios, puede notificárselo a Ágora y abortar la operación.

Tanto si se acepta la factura como si se rechaza, la respuesta deberá ser tener como estado 200
OK.

En caso de que la factura sea aceptada, el cuerpo de la respuesta será:

{
"Status": "accepted",
"PrinterText": "Has acumulado 20 puntos con tu compra.\n\nSALDO DISPONIBLE: 2.34€"
}

Donde:

Status
Deberá ser el literal accepted para indicar que la factura es aceptada.

PrinterText
Contendrá un texto libre que Ágora imprimirá al final de la factura. Puede ser vacío.

En caso de que la factura sea rechazada, el cuerpo de la respuesta será:

{
"Status": "rejected",
"RejectReason": "Se han redimido más premios de los permitidos este mes"
}

Donde:

Status
Deberá ser el literal rejected para indicar que la factura es rechazada.

Guía del Integrador 166 Versión 5.1.0


RejectReason
Contendrá un texto libre que Ágora mostrará al usuario para indicar el motivo del
rechazo.

En caso de que el identificador de participante no sea válido, el servidor deberá devolver un


código de respuesta 404 Not Found.

Cualquier código de respuesta que esté en el rango 4xx Client Error o 5xx Server Error
será procesado como error por parte de Ágora y se impedirá el cierre de la factura.

La factura se enviará en el momento del cierre. Ágora no permitirá cerrar la factura si no se


consigue realizar el envío con éxito. De esta forma se garantiza que en el sistema de fidelización
quedan redimidos los premios para evitar que se puedan redimir más veces.

Para realizar el envío Ágora tendrá configurado un timeout que evita que el sistema se cuelgue
indefinidamente en caso de que no haya respuesta del sistema de fidelización. En un escenario
de fallo, el usuario siempre podría desasociar el participante del programa de la factura de
Ágora y proceder a un cierre de factura normal, sin acumular puntos y sin redimir premios.

Ágora no puede garantizar que cada mensaje se entregue exactamente una vez porque podría
haber problemas de red al recibir la respuesta del servidor del sistema de fidelización. El
sistema de fidelización deberá mantener un control para detectar reenvíos y evitar duplicar la
acumulación de consumos o la redención de premios.

Guía del Integrador 167 Versión 5.1.0

También podría gustarte