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.


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

HEADER

x-access-token
Token obtenido a través del servicio "Authenticate"

Ejemplo:

"x-access-token": token

BODY

ElementoDescripciónTipo de datoRequeridoValidación
requestCredential
companyCodeCódigo de compañía, provisto para la empresa que contrata el servicioStringSi

992


storeCodeCódigo de tiendaString
Si
992
terminalCodeCódigo de terminal / punto de ventaStringSi
992
printerInfo
pointOfSale2G: Punto de Venta (Centro Emisor) (Número fiscal)StringSi

fiscalSerial2G: Nro serie impresoraStringSi

Ejemplo:

{
   "requestCredential": {
        "companyCode""napse",
        "storeCode""43",
        "terminalCode""45"
   },
   "printerInfo":{
      "pointOfSale":"12345",
      "fiscalSerial":"11111111"
   }
}

RESPONSE OK

ElementoDetalleTipo
ack

Código de respuesta: 0

Number
messageValor "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. 

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

ElementoDetalleRequerido
requestCredential 
companyCode Código de compañía, provisto para la empresa que contrata el servicio.990
storeCode Código de tienda992
terminalCode Código de terminal / punto de venta.991
printerInfo

pointOfSale

2G: Punto de Venta (Centro emisor)993

fiscalSerial

2G: Nro serie impresora994

Ejemplo:

{
  "requestCredential":{
      "companyCode":"napse",
      "storeCode":"43",
      "terminalCode":"45"
   },
   "printerInfo":{
      "pointOfSale":"12345",
      "fiscalSerial":"11111111"
   }
}

RESPONSE OK

ElementosDetalleTipo
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

ElementoDetalle
ack

Código de error:

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


  • 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

HEADER

x-access-token
Token obtenido a través del servicio "Authenticate"

Ejemplo:

"x-access-token": token

BODY

ElementoDetalleRequeridoTipo
requestCredential 
companyCodeCódigo de compañía, provisto para la empresa que contrata el servicio.String990
storeCodeCódigo de tiendaString992
terminalCodeCódigo de terminal / punto de venta.String991
fileInfo



path

Path o ruta física donde reside el archivo a ser subido vía FTP por el agente

String
nameFile

Nombre del archivo a ser subido vía FTP por el agente.

Formato según tipo de archivo:

  • auditfile:



  • presentationfile:
String
ack

Indicador de si se pudo obtener correctamente el archivo de la impresora o no:

0: ok

1: error

Number
messageDetalle del error obligatorio, en caso de haber informado ack:1NoString

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

ElementoDetalleTipo
ack
Valor "0"
Number
messageArray vacíoString


Ejemplo:

{
    "ack"0,
    "message": []
}

RESPONSE ERROR

ElementoDetalleTipo
ackNumber
messageDetalle del error.String

Servicio: Informar último cierre Z eliminado (notifyLastDeletedJournal)

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.

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

ElementoTipoDetalleRequerido
requestCredential 
companyCode StringCódigo de compañía, provisto para la empresa que contrata el servicio.
storeCode StringCódigo de tienda
terminalCode StringCódigo de terminal / punto de venta.
printerInfo

pointOfSale

String2G: Punto de Venta (Centro emisor)

fiscalSerial

String2G: Nro serie impresora
lastDeletedJournalNumber Number

El ultimo Z que eliminó la impresora fiscal.

Ejemplo:

{
  "requestCredential":{
      "companyCode":"napse",
      "storeCode":"43",
      "terminalCode":"45"
   },
   "printerInfo":{
      "pointOfSale":"12345",
      "fiscalSerial":"11111111",
       "lastDeletedJournalNumber": 10
   }
}

RESPONSE OK

ElementosDetalleTipo
ack

Código de respuesta: 0

String
messageValor "ok"String

Ejemplo:

{
    "ack"0,
    "message""ok"
}

RESPONSE ERROR

ElementoDetalle
ack

Código de error:

message

Descripción del error.

Ejemplo:

{
    "ack"2018,
    "message""Terminal no existe o es inactiva"
}


  • Sem rótulos