-
Notifications
You must be signed in to change notification settings - Fork 0
Alta de comprobantes
El objetivo principal de esta API es el alta de comprobantes, por lo que el propósito de esta página es el de explicar cómo realizar la integración del mismo.
El endpoint de alta de comprobantes de esta API cuenta con numerosas validaciones junto a sus respectivos mensajes de error, lo cual sirve para rápidamente detectar problemas antes de que la petición sea efectivamente enviada a AFIP. Más allá de eso, la API posibilita que el usuario no tenga que preocuparse por indicarle el número de comprobante, el cual se calcula automáticamente incrementando el valor del último comprobante emitido (en los web services de AFIP se requiere acción manual para esto).
Para dar soporte a varios tipos de facturas, conceptos y tributos, la API dispone de varios endpoints para consultar información que llamamos "datos estáticos". Para poder generar comprobantes, es necesario utilizar cada uno de estos identificadores para determinar, por ejemplo, que se quiere emitir una factura A con servicios como conceptos, con impuestos de IVA, Ingresos Brutos y percepciones.
Existen varios datos estáticos importantes a utilizar durante la generación de un comprobante. Ninguno de los endpoints siguientes tiene parámetros de entrada más allá de la autenticación correspondiente como entidad para consultarlos.
Retorna los diferentes tipos de comprobantes. Es necesario utilizar un identificador de ellos (id
) para el parámetro bill_type_id
en el alta de un comprobante.
GET /v1/bill_types
[
{
"id":"1",
"name":"Factura A"
},
{
"id":"2",
"name":"Nota de Débito A"
},
{
"id":"3",
"name":"Nota de Crédito A"
},
{
"id":"6",
"name":"Factura B"
},
{
"id":"7",
"name":"Nota de Débito B"
},
{
"id":"8",
"name":"Nota de Crédito B"
},
{
"id":"4",
"name":"Recibos A"
},
{
"id":"5",
"name":"Notas de Venta al contado A"
},
{
"id":"9",
"name":"Recibos B"
},
{
"id":"10",
"name":"Notas de Venta al contado B"
},
{
"id":"63",
"name":"Liquidacion A"
},
{
"id":"64",
"name":"Liquidacion B"
},
{
"id":"34",
"name":"Cbtes. A del Anexo I, Apartado A,inc.f),R.G.Nro. 1415"
},
{
"id":"35",
"name":"Cbtes. B del Anexo I,Apartado A,inc. f),R.G. Nro. 1415"
},
{
"id":"39",
"name":"Otros comprobantes A que cumplan con R.G.Nro. 1415"
},
{
"id":"40",
"name":"Otros comprobantes B que cumplan con R.G.Nro. 1415"
},
{
"id":"60",
"name":"Cta de Vta y Liquido prod. A"
},
{
"id":"61",
"name":"Cta de Vta y Liquido prod. B"
},
{
"id":"11",
"name":"Factura C"
},
{
"id":"12",
"name":"Nota de Débito C"
},
{
"id":"13",
"name":"Nota de Crédito C"
},
{
"id":"15",
"name":"Recibo C"
},
{
"id":"49",
"name":"Comprobante de Compra de Bienes Usados a Consumidor Final"
},
{
"id":"51",
"name":"Factura M"
},
{
"id":"52",
"name":"Nota de Débito M"
},
{
"id":"53",
"name":"Nota de Crédito M"
},
{
"id":"54",
"name":"Recibo M"
}
]
Retorna los diferentes tipos de conceptos de un comprobante. Es necesario utilizar un identificador de ellos (id
) para el parámetro concept_type_id
en el alta de un comprobante.
GET /v1/concept_types
[
{
"id":"1",
"name":"Producto"
},
{
"id":"2",
"name":"Servicios"
},
{
"id":"3",
"name":"Productos y Servicios"
}
]
Retorna los diferentes tipos de documentos de un comprobante, y se utiliza para indicar el tipo de documento del receptor del mismo. Es necesario utilizar un identificador de ellos (id
) para el parámetro recipient_type_id
en el alta de un comprobante.
GET /v1/document_types
[
{
"id":"80",
"name":"CUIT"
},
{
"id":"86",
"name":"CUIL"
},
{
"id":"87",
"name":"CDI"
},
{
"id":"89",
"name":"LE"
},
{
"id":"90",
"name":"LC"
},
{
"id":"91",
"name":"CI Extranjera"
},
{
"id":"92",
"name":"en trámite"
},
{
"id":"93",
"name":"Acta Nacimiento"
},
{
"id":"95",
"name":"CI Bs. As. RNP"
},
{
"id":"96",
"name":"DNI"
},
{
"id":"94",
"name":"Pasaporte"
},
{
"id":"0",
"name":"CI Policía Federal"
},
{
"id":"1",
"name":"CI Buenos Aires"
},
{
"id":"2",
"name":"CI Catamarca"
},
{
"id":"3",
"name":"CI Córdoba"
},
{
"id":"4",
"name":"CI Corrientes"
},
{
"id":"5",
"name":"CI Entre Ríos"
},
{
"id":"6",
"name":"CI Jujuy"
},
{
"id":"7",
"name":"CI Mendoza"
},
{
"id":"8",
"name":"CI La Rioja"
},
{
"id":"9",
"name":"CI Salta"
},
{
"id":"10",
"name":"CI San Juan"
},
{
"id":"11",
"name":"CI San Luis"
},
{
"id":"12",
"name":"CI Santa Fe"
},
{
"id":"13",
"name":"CI Santiago del Estero"
},
{
"id":"14",
"name":"CI Tucumán"
},
{
"id":"16",
"name":"CI Chaco"
},
{
"id":"17",
"name":"CI Chubut"
},
{
"id":"18",
"name":"CI Formosa"
},
{
"id":"19",
"name":"CI Misiones"
},
{
"id":"20",
"name":"CI Neuquén"
},
{
"id":"21",
"name":"CI La Pampa"
},
{
"id":"22",
"name":"CI Río Negro"
},
{
"id":"23",
"name":"CI Santa Cruz"
},
{
"id":"24",
"name":"CI Tierra del Fuego"
},
{
"id":"99",
"name":"Doc. (Otro)"
}
]
Retorna los diferentes tipos de IVA para un comprobante. En el parámetro iva
del alta de comprobantes, que es un arreglo, los atributos id
de cada elemento están dados por los identificadores (id
) de la respuesta de este endpoint.
GET /v1/iva_types
[
{
"id":"3",
"name":"0%"
},
{
"id":"4",
"name":"10.5%"
},
{
"id":"5",
"name":"21%"
},
{
"id":"6",
"name":"27%"
},
{
"id":"8",
"name":"5%"
},
{
"id":"9",
"name":"2.5%"
}
]
Retorna los diferentes tipos de tributos para un comprobante. En el parámetro taxes
del alta de comprobantes, que es un arreglo, los atributos id
de cada elemento están dados por los identificadores (id
) de la respuesta de este endpoint.
GET /v1/tax_types
[
{
"id":"1",
"name":"Impuestos nacionales"
},
{
"id":"2",
"name":"Impuestos provinciales"
},
{
"id":"3",
"name":"Impuestos municipales"
},
{
"id":"4",
"name":"Impuestos Internos"
},
{
"id":"99",
"name":"Otro"
},
{
"id":"5",
"name":"IIBB"
},
{
"id":"6",
"name":"Percepción de IVA"
},
{
"id":"7",
"name":"Percepción de IIBB"
},
{
"id":"8",
"name":"Percepciones por Impuestos Municipales"
},
{
"id":"9",
"name":"Otras Percepciones"
},
{
"id":"13",
"name":"Percepción de IVA a no Categorizado"
}
]
Retorna los diferentes puntos de venta registros por la entidad que consulta. Es necesario utilizar un identificador de ellos (id
) para el parámetro sale_point_id
en el alta de un comprobante.
GET /v1/sale_points
[
{
"id": "3",
"name": "0003",
"type": "CAE - Ri Iva",
"enabled": true
}
]
Ya detallados los datos estáticos, lo siguiente es generar un comprobante. Para ello, disponemos de un único endpoint para cualquier tipo de comprobante, en donde los parámetros varían en función del tipo que se quiera emitir.
POST /v1/invoices
{
"external_id":5,
"concept_type_id":3,
"sale_point_id":"0001",
"recipient_type_id":80,
"recipient_number":"20123456789",
"bill_type_id":1,
"service_from":"20200701",
"service_to":"20200731",
"due_date":"20201017",
"net_amount":1505.0,
"untaxed_amount":495.0,
"exempt_amount":0.0,
"tax_amount":250.0,
"iva_amount":316.05,
"total_amount":2566.05,
"taxes":[
{
"id":1,
"net_amount":150,
"total_amount":150,
"rate":2
},
{
"id":2,
"net_amount":100,
"total_amount":100,
"rate":2
}
],
"iva":[
{
"id":5,
"net_amount":1505,
"total_amount":316.05
}
],
"items":[
{
"description":"Servicios de Informática",
"quantity":10,
"unit_price":150.5,
"bonus_percentage":0,
"metric_unit":"horas",
"iva_aliquot_id":97
},
{
"description":"Servicios de hosting",
"quantity":1,
"unit_price":550,
"bonus_percentage":10,
"metric_unit":"unidades",
"iva_aliquot_id":99
}
]
}
{
"concept_type_id":3,
"sale_point_id":"0001",
"recipient_type_id":80,
"recipient_number":"20123456789",
"bill_type_id":3,
"service_from":"20200701",
"service_to":"20200731",
"due_date":"20200831",
"net_amount":1505.0,
"untaxed_amount":495.0,
"exempt_amount":0.0,
"tax_amount":250.0,
"iva_amount":316.05,
"total_amount":2566.05,
"taxes":[
{
"id":1,
"net_amount":150,
"total_amount":150,
"rate":2
},
{
"id":2,
"net_amount":100,
"total_amount":100,
"rate":2
}
],
"iva":[
{
"id":5,
"net_amount":1505,
"total_amount":316.05
}
],
"items":[
{
"description":"Servicios de Informática",
"quantity":10,
"unit_price":150.5,
"bonus_percentage":0,
"metric_unit":"horas",
"iva_aliquot_id":97
},
{
"description":"Servicios de hosting",
"quantity":1,
"unit_price":550,
"bonus_percentage":10,
"metric_unit":"unidades",
"iva_aliquot_id":99
}
],
"associated_invoices":[
{
"bill_type_id":1,
"sale_point_id":"0009",
"number":"00000052",
"date":"20200815"
}
]
}
{
"bill":"0001-00000015",
"bill_number":"00000015",
"sale_point_id":"0001",
"cae":"68306662537038",
"cae_expiracy":"03/08/2018",
"internal_id":25
}
En caso de que los web services de AFIP hayan ocasionado un timeout en la conexión (lo cual no es algo usual pero puede suceder), la API no puede determinar el resultado de la petición así que encola la solicitud y retorna con código de estado HTTP 100 Continue. Por lo tanto, el cliente debe volver a llamar a este endpoint con los mismos valores para recibir el resultado de la operación.
{}
{
"errors":[
"Fecha de vencimiento es anterior a fecha de comprobante"
],
"afip_errors":null
}
{
"errors":null,
"afip_errors":[
"El numero o fecha del comprobante no se corresponde con el proximo a autorizar. Consultar metodo FECompUltimoAutorizado. (error 10016)"
]
}