
AR Server - Servicios Impresiones 2G
Introducción
Fiscal Flow ofrece un set de servicios para la gestión de impresoras de 2da generación.
Estas impresoras presenta como características:
- No guardan rollo testigo, la información de los cierres Z es almacenada digitalmente en la impresora.
- Genera archivos que contienen la información de los cierre Z (archivo comprimido que contiene 3 archivos PEM), los cuales deben presentarse semanalmente a la AFIP.
Para las compañías que operen con terminales con impresoras 2G, Fiscal Flow ofrece una serie de servicios para:
- Poder consultar desde la consola de administración los cierres Z de las terminales.
- Gestionar la presentación automática requerida por AFIP.
Servicio: Registrar actividad fiscal 2G (register2g)
Este método se utiliza para informar o notificar de manera diaria al servidor que una terminal 2G ha realizado operaciones en el día actual. Es obligatoria la llamada a este servicio durante el día que la terminal ha operado para que el servidor sepa que debe esperar luego el registro de un cierre diario de dicha terminal para el día en cuestión (agenda diaria). A partir de la primera operación que realice la terminal, esta deberá notificar al servidor mediante el uso de este servicio por lo menos una vez. Si la terminal no ha realizado operación para el día en cuestión, no es necesario invocar a este servicio.
Clique aqui para expandir...
Para el uso del servicio es necesario informar un token que se obtiene a través del servicio "Authenticate".
Es un método REST cuyo contenido interno es JSON. Ejemplo:
| [post] http://[dirección-ip]:[puerto]/api/v1/invoice/register2g |
|---|
POST - REQUEST
x-access-token | Token obtenido a través del servicio "Authenticate" |
Ejemplo:
BODY
| Elemento | Descripción | Tipo de dato | Requerido | Validación |
|
| requestCredential |
|---|
| companyCode | Código de compañía, provisto para la empresa que contrata el servicio | String | Si | 992 |
|
| storeCode | Código de tienda | String
| Si
| 992 |
|
| terminalCode | Código de terminal / punto de venta | String | Si
| 992 |
|
| printerInfo |
| pointOfSale | 2G: Punto de Venta (Centro Emisor) (Número fiscal) | String | Si |
|
|
| fiscalSerial | 2G: Nro serie impresora | String | Si |
|
|
Ejemplo:
{ "requestCredential": { "companyCode": "napse", "storeCode": "43", "terminalCode": "45" }, "printerInfo":{ "pointOfSale":"12345", "fiscalSerial":"11111111" } } |
RESPONSE OK
| Elemento | Detalle | Tipo |
|---|
| ack | Código de respuesta: 0 | Number |
| message | Valor "ok" | String |
Ejemplo:
{ "ack": 0, "message": "ok" } |
NOTA: Si como respuesta a la llamada al servicio se recibe un Response OK con ack:0 no es necesario volver a invocar nuevamente durante el mismo día a este servicio. Si de lo contrario la respuesta desde el servidor es un ack distinto de cero (0) se debe seguir intentando (en diferentes intervalos) hasta poder obtener la respuesta adecuada (ack:0).
Servicio: Consultar agendas pendientes de presentación (pendingSchedule)
Este servicio debe ser invocado por el punto de venta para conocer las agendas diarias y semanales que estén pendientes de ser presentadas. (Ver: Consola de administración, módulo Impresoras 2G, sección Agendas) como así también informa los números Z desde - hasta que pueden eliminarse de la impresora.
Clique aqui para expandir...
El sistema genera automáticamente en estado Pendiente:
- una agenda por día, "diaria".
- una agenda semanal: son 4 agendas por mes:
- Del día 1 al 7
- Del día 8 al 15
- Del día 16 al 23
- Del día 24 al último día del mes, según corresponda.
Las agendas diarias no son requeridas por AFIP, pero sirven cómo método de control, ante la ausencia de rollo de control físico.
Las agendas semanales, son presentandas por Fiscal Flow Server a la AFIP, semanalmente.
Ver: Consola de administración, módulo Impresoras 2G, sección Agendas, para conocer las agendas pendientes y procesadas.
Para el uso del servicio es necesario informar un token que se obtiene a través del servicio "Authenticate".
Es un método REST cuyo contenido interno es JSON. Ejemplo:
| [post] http://[dirección-ip]:[puerto]/api/v1/pendingSchedule |
|---|
POST - REQUEST
BODY
| Elemento | Detalle | Requerido |
|
|---|
| requestCredential |
|---|
| companyCode | Código de compañía, provisto para la empresa que contrata el servicio. | Sí | 990 |
| storeCode | Código de tienda | Sí | 992 |
| terminalCode | Código de terminal / punto de venta. | Sí | 991 |
| printerInfo |
pointOfSale | 2G: Punto de Venta (Centro emisor) | Sí | 993 |
fiscalSerial | 2G: Nro serie impresora | Sí | 994 |
Ejemplo:
{ "requestCredential":{ "companyCode":"napse", "storeCode":"43", "terminalCode":"45" }, "printerInfo":{ "pointOfSale":"12345", "fiscalSerial":"11111111" } } |
RESPONSE OK
| Elementos | Detalle | Tipo |
|---|
| ack | Código de respuesta: 0 |
|
| detail |
|
|
| type | - auditFile: pendiente de envío el archivo de auditoría diario (no es presenta en la AFIP)
- presentationFile: pendiente de envío el archivo de auditoría semanal.
- agendaDeleteJournalFile: informa rango de archivos Z que la impresora deberá marcar para eliminar.
| String |
| periodFrom | Depende de type: - auditFile: fecha de agenda diaria requerida.
- presentationFile: fecha de inicio de agenda semanal requerida.
| String: Formato YYYY-MM-DDTHH:MI:SS.SSSZ |
| periodTo | Depende de type: - auditFile: idem fecha periodFrom
- presentationFile: fecha de fin de agenda semanal requerida.
| String: Formato YYYY-MM-DDTHH:MI:SS.SSSZ |
| force | Se utiliza para forzar que se envíe la agenda indicada como pendiente. En 4690 se lleva el registro de lo enviado y si viene solicitado como pendiente, se ignora, salvo que se informe este flag. | boolean |
| minJournalToDelete | Solo para type = agendaDeleteJournalFile Indica el número desde de agenda que puede ser descartado. | Number |
| maxJournalToDelete | Solo para type = agendaDeleteJournalFile Indica el número hasta de agenda que puede ser descartado. | Number |
Ejemplo:
{ "ack": 0, "detail": [ { "type": "auditFile", "periodFrom": "2020-11-25T00:00:00.000Z", "periodTo": "2020-11-25T00:00:00.000Z", "force": false }, { "type": "presentationFile", "periodFrom": "2020-11-01T00:00:00.000Z", "periodTo": "2020-11-07T00:00:00.000Z" "force": false }, { "type": "agendaDeleteJournalFile", "minJournalToDelete": 100, "maxJournalToDelete": 145, "force": true } ] } |
RESPONSE ERROR
| Elemento | Detalle |
|---|
| ack | |
| message | Descripción del error. |
Ejemplo:
{
"ack": 2018,
"message": "Terminal no existe o es inactiva"
}
Servicio: Notificar archivo de presentación (notifyJournalStatus)
Este servicio debe ser invocado para informar al servidor que se ha podido descargar la agenda de la impresora y esta ha sido subida al servidor mediante nuestro servicio "/api/v1/uploadFiles" o directamente por FTP al directorio que se obtiene en el parámetro de configuración 2gFolder al invocar al servicio "/api/v1/invoice/config".
NOTA: Si no se pudo descargar los archivos de la impresora o no es posible subirlos al servidor invocar a este servicio de igual manera informando el ack: 1 (de error) como se indica debajo. Si esto a posterior es subsanado y se logra subir la agenda invocarlos nuevamente con ack: 0
Clique aqui para expandir...
- Agenda diaria (auditFile):
- Deberá solicitar a la impresora fiscal los z del día correspondiente a la presentación que se está realizando (formato xml)
- Con los archivos recibidos (puede haber mas de un z por día) armar un archivo comprimido (zip).
- Agenda semanal (presentationFile):
- Solicitar a la impresora los archivos a ser presentandos a la AFIP, del período correspondiente.
- Los archivos obtenidos serán 3, con extensión .pem y cuyos nombres comienzan con código (8011, 8012, 8013) y el cuit de la compañía.
- Con los archivos recibidos armar un archivo comprimido (zip).
El agente se encarga de notificar al server la recepción de los archivos si se pudieron descargar correctamente (estado de la agenda "Notificada") así como si hubo un error al obtenerlos de la impresora (estado de la agenda "Error descarga"). Asincrónicamente, va subiendo los archivos a una carpeta de la compañía en el server.
Luego el server va tomando automáticamente los archivos subidos y va marcando las agendas como "En server".
Como último paso, el server va tomando las agendas "En server" y las va procesando.
Desde la consola de administración, módulo Impresoras 2G, se pueden consultar los archivos que se van recibiendo.
Para el uso del servicio es necesario informar un token que se obtiene a través del servicio "Authenticate".
Es un método REST cuyo contenido interno es JSON. Ejemplo:
| [post] http://[dirección-ip]:[puerto]/api/v1/notifyJournalStatus |
|---|
POST - REQUEST
x-access-token | Token obtenido a través del servicio "Authenticate" |
Ejemplo:
BODY
| Elemento | Detalle | Requerido | Tipo |
|
|---|
| requestCredential |
|---|
| companyCode | Código de compañía, provisto para la empresa que contrata el servicio. | Sí | String | 990 |
| storeCode | Código de tienda | Sí | String | 992 |
| terminalCode | Código de terminal / punto de venta. | Sí | String | 991 |
| fileInfo |
|
|
|
|
| path | Path o ruta física donde reside el archivo a ser subido vía FTP por el agente | Sí | String |
|
| nameFile | Nombre del archivo a ser subido vía FTP por el agente. Formato según tipo de archivo: - auditfile:

- presentationfile:

| Sí | String |
|
| ack | Indicador de si se pudo obtener correctamente el archivo de la impresora o no: 0: ok 1: error | Sí | Number |
|
| message | Detalle del error obligatorio, en caso de haber informado ack:1 | No | String |
|
Ejemplo:
Con Error
{ "requestCredential":{ "companyCode":"napse", "storeCode":"43", "terminalCode":"45" }, "fileInfo": { "path":"C:\\synthesis\\fiscal-flow-agent", "nameFile":"faup-aut-napse-43-45-11111111-12345-auditfile-201125-201125.zip", "ack": 1, "message": "ERROR AL DESCARGAR ARCHIVO" } } |
Sin error
{ "requestCredential":{ "companyCode":"napse", "storeCode":"43", "terminalCode":"45" }, "fileInfo": { "path":"C:\\synthesis\\fiscal-flow-agent", "nameFile":"faup-aut-napse-43-45-11111111-12345-auditfile-201125-201125.zip", "ack": 0 } } |
RESPONSE OK
| Elemento | Detalle | Tipo |
|---|
| ack | Valor "0" | Number |
| message | Array vacío | String |
Ejemplo:
{ "ack": 0, "message": [] } |
RESPONSE ERROR
| Elemento | Detalle | Tipo |
|---|
| ack | | Number |
| message | Detalle del error. | String |
Este servicio debe ser invocado por el punto de venta o cliente para informar el último cierre Z que ha sido eliminado de la impresora.
Clique aqui para expandir...
Para el uso del servicio es necesario informar un token que se obtiene a través del servicio "Authenticate".
Es un método REST cuyo contenido interno es JSON. Ejemplo:
| [POST] http://[dirección-ip]:[puerto]/api/v1/notifyLastDeletedJournal |
|---|
POST - REQUEST
BODY
| Elemento | Tipo | Detalle | Requerido |
|---|
| requestCredential |
|---|
| companyCode | String | Código de compañía, provisto para la empresa que contrata el servicio. | Sí |
| storeCode | String | Código de tienda | Sí |
| terminalCode | String | Código de terminal / punto de venta. | Sí |
| printerInfo |
pointOfSale | String | 2G: Punto de Venta (Centro emisor) | Sí |
fiscalSerial | String | 2G: Nro serie impresora | Sí |
| lastDeletedJournalNumber | Number | El ultimo Z que eliminó la impresora fiscal.
| Sí |
Ejemplo:
{ "requestCredential":{ "companyCode":"napse", "storeCode":"43", "terminalCode":"45" }, "printerInfo":{ "pointOfSale":"12345", "fiscalSerial":"11111111", "lastDeletedJournalNumber": 10 } } |
RESPONSE OK
| Elementos | Detalle | Tipo |
|---|
| ack | | String |
| message | Valor "ok" | String |
Ejemplo:
{ "ack": 0, "message": "ok" } |
RESPONSE ERROR
| Elemento | Detalle |
|---|
| ack | |
| message | Descripción del error. |
Ejemplo:
{
"ack": 2018,
"message": "Terminal no existe o es inactiva"
}