Para mas automatizaciones [email protected]
Automatizaciones
Mis Comprobantes

Mis Comprobantes

Esta automatización sirve para descargar cualquier comprobante emitido o recibido por un CUIT usando el aplicativo "Mis Comprobantes" de ARCA.


Requisitos previos

Para poder usar esta automatización, primero necesitarás:


Nombre

mis-comprobantes

Parametros

cuitstring
CUIT a usar en la página de ARCA.
usernamestring
CUIT para loguearse en la página de ARCA. Normalmente es el mismo CUIT que el parámetro 'cuit', pero si administrás una sociedad, el CUIT que usás para loguearte es tu propio CUIT.
passwordstring
Contraseña para loguearse en la página de ARCA.
filtersobject
Filtros para los comprobantes.
tstring
Comprobantes a obtener (E=Emitidos, R=Recibidos).
fechaEmisionstring
Rango de fechas en que fue emitido el comprobante en formato: dd/mm/yyyy - dd/mm/yyyy
puntosVentainteger[]Opcional
Puntos de venta.
tiposComprobantesinteger[]Opcional
Tipos de comprobante.
comprobanteDesdeintegerOpcional
Número de comprobante inicial (usar junto con comprobanteHasta).
comprobanteHastaintegerOpcional
Número de comprobante final (usar junto con comprobanteDesde).
tipoDocintegerOpcional
Tipo de documento.
nroDocstringOpcional
Número de documento.
codigoAutorizacionstringOpcional
Código de autorización.
Solicitud
LOCAL loHttp, loUrl, loData, loResponse
DECLARE Sleep IN kernel32 INTEGER

* Aqui deben cambiar los datos de params por los que correspondan. 
* Esta request de ejemplo incluye todos posibles 
* valores para ejecutar la automatizacion mis-comprobantes, 
* puede que algun valor sea opcional.
LOCAL loDataObject
loDataObject = CREATEOBJECT("JSONObject")
    loDataObject.set("automation", "mis-comprobantes")
    LOCAL params
    params = CREATEOBJECT("JSONObject")
    loDataObject.set("params", params)
        params.set("cuit", "20111111112")
        params.set("username", "20111111112")
        params.set("password", "contraseña#segura?")
        LOCAL filters
        filters = CREATEOBJECT("JSONObject")
        params.set("filters", filters)
            filters.set("t", "R")
            filters.set("fechaEmision", "01/01/2023 - 31/12/2023")
            LOCAL puntosVenta
            puntosVenta = CREATEOBJECT("JSONArray")
            filters.set("puntosVenta", puntosVenta)
                puntosVenta.add(1)
                puntosVenta.add(6)
            LOCAL tiposComprobantes
            tiposComprobantes = CREATEOBJECT("JSONArray")
            filters.set("tiposComprobantes", tiposComprobantes)
                tiposComprobantes.add(11)
                tiposComprobantes.add(1)
            filters.set("comprobanteDesde", 1)
            filters.set("comprobanteHasta", 100)
            filters.set("tipoDoc", 80)
            filters.set("nroDoc", "20111111112")
            filters.set("codigoAutorizacion", "74112153083444")

* Convertimos el objeto en JSON
loData = json_encode(loDataObject)

* Creamos un cliente HTTP para llamar a la API
loHttp = CREATEOBJECT("Msxml2.XMLHTTP")
loUrl = "https://app.afipsdk.com/api/v1/automations"

* Realizamos la llamada a la API
loHttp.Open("POST", loUrl, .F.)
loHttp.setRequestHeader("Content-Type", "application/json")

* Reemplazar con tu access_token obtenido de https://app.afipsdk.com
LOCAL accessToken
accessToken = "TU_TOKEN_AQUI"
loHttp.setRequestHeader("Authorization", "Bearer " + accessToken)

loHttp.Send(loData)

* En caso de error lo mostramos por pantalla
IF loHttp.Status <> 200
    ? loHttp.responseText
    RETURN
ENDIF

* Convertimos la respuesta en un objeto
loResponse = json_decode(loHttp.responseText)

* Mostramos la respuesta por pantalla
? loHttp.responseText

* Expera maxima de 120 segundos (5 segundos * 24)
lnRetries = 24

DO WHILE lnRetries >= 0
    lnRetries = lnRetries - 1

    * Creamos un cliente HTTP para llamar a la API
    loHttp = CREATEOBJECT("Msxml2.XMLHTTP")
    loUrl = "https://app.afipsdk.com/api/v1/automations/" + loResponse.get("id")

    * Realizamos la llamada a la API
    loHttp.Open("GET", loUrl, .F.)
    loHttp.setRequestHeader("Content-Type", "application/json")
    loHttp.setRequestHeader("Authorization", "Bearer " + accessToken)
    loHttp.Send()

    * En caso de error lo mostramos por pantalla
    IF loHttp.Status <> 200
        ? loHttp.responseText
        RETURN
    ENDIF

    * Convertimos la respuesta en un objeto
    loResponse = json_decode(loHttp.responseText)

    * Checkeamos si se ya finalizo
    IF loResponse.get("status") == "complete"
        * Mostramos la respuesta por pantalla
        ? loHttp.responseText

        EXIT
    ENDIF

    * Esperamos 5 segundos antes de volver a pedir los detalles
    Sleep(5000)
ENDDO
Respuesta
{
    "id": "0c31d74f-d672-4677-a00b-7dc865396c69",
    "status": "complete",
    "data": [
        {
            "Fecha de Emisión": "2023-08-02",
            "Tipo de Comprobante": "11",
            "Punto de Venta": "1",
            "Número Desde": "36",
            "Número Hasta": "36",
            "Cód. Autorización": "73312575323360",
            "Tipo Doc. Receptor": "80",
            "Nro. Doc. Receptor": "30632580082",
            "Denominación Receptor": "EMPRESA SA",
            "Tipo Cambio": "1,00",
            "Moneda": "PES",
            "Imp. Neto Gravado": "0,00",
            "Imp. Neto No Gravado": "0,00",
            "Imp. Op. Exentas": "0,00",
            "Otros Tributos": "0,00",
            "IVA": "0,00",
            "Imp. Total": "4687,20"
        },
        {
            "Fecha de Emisión": "2023-10-09",
            "Tipo de Comprobante": "11",
            "Punto de Venta": "1",
            "Número Desde": "37",
            "Número Hasta": "37",
            "Cód. Autorización": "73412021735441",
            "Tipo Doc. Receptor": "80",
            "Nro. Doc. Receptor": "30710911496",
            "Denominación Receptor": "EMPRESA S.A.",
            "Tipo Cambio": "1,00",
            "Moneda": "PES",
            "Imp. Neto Gravado": "0,00",
            "Imp. Neto No Gravado": "0,00",
            "Imp. Op. Exentas": "0,00",
            "Otros Tributos": "0,00",
            "IVA": "0,00",
            "Imp. Total": "56700,00"
        }
    ]
}