Repo de Afip.py https://github.com/AfipSDK/afip.py
Hola @user ! No encuentro en la documentación la forma de enviar el detalle de los items de una factura A. El ejemplo de la API no lo muestra tampoco. ¿Hay algo que se me está pasando por algo? ¿Tenés algún enlace para ver? Gracias por adelantado.
Hola Ariel, no se envian los detalles de la factura a la AFIP, uno las pone despues en el PDF
Genial! Muchas gracias! Abrazo
@Ivan podrías decirme dónde ver los costos de la Api? Implemente un sistema y no me di cuenta que era de pago..
En el paso a produccion https://docs.afipsdk.com/paso-a-paso/ir-a-produccion te pide la creacion de la cuenta en https://app.afipsdk.com/ adentro de la cuenta podes ver el costo
Buenas tardes! un gusto saludar a todos, tengo una consulta, lei que hay cuit de prueba de afip para usar, uno de ellos (en teoria) es el 300000007 o 20-20267565393 que es bajo el entorno de homologacion , es correcto?
Buenos dias @user , tengo otra consulta, para generar un recibo de pago, que funcion o metodo deberia usar? busque en el blog y en la documentacion, pero no lo encontre.Desde ya muchas gracias!
Buenas noches!!! sigo la documentación. Pero cuando hago la parte para pedir datos de los contribuyentes obtengo el siguiente mensaje " error Error al obtener los detalles del contribuyente: {"code":"Internal","message":"Error: soap:Server: No existe persona con ese Id: {"SRValidationException":null}"} el tema es que los id con los que pruebo son el mio y/o de familiares ... existe algún formato de como deba ingresar los id ? creo que los certificados y la key los esta leyendo bien debido a que antes tenía error referidos a ello
les dejo el código " from afip import Afip
tax_id = 111111111 # CUIT a verificar dejo eso de ejemplo cert = open("cert.crt").read() key = open("key.key").read()
afip = Afip({ "CUIT": tax_id, "cert": cert, "key": key })
try: taxpayer_details = afip.RegisterInscriptionProof.getTaxpayerDetails(tax_id) if taxpayer_details: print(f"El CUIT {tax_id} está activo.") else: print(f"No se encontró información para el CUIT {tax_id}.") except Exception as e: print(f"Error: {e}")
Es en desarrollo? Es normal que ahi te diga que no existe, no tiene datos de todos los cuits disponibles
anoche me puse a leer las preguntas frecuentes y justo daba esa respuesta. Probe en porducción y ya me andaba perfecto. Muchas gracias !!!
Buenas noches, alguno sabe como poder imprimir solamente el qr para la facturacion?, de ser posible tambien exportarlo en un formato png o como sea
obrigado
Hola a todos! Como andan? Tengo una consulta en base al web services "constatación de comprobantes". Alguien obtuvo como respuesta que el CAE es inválido al utilizar el mismo? Y si compruebo la misma factura mediante el servicio web (https://servicioscf.afip.gob.ar/publico/comprobantes/cae.aspx) me responde sin inconvenientes que es válida. Como base estoy utilizando el formato que sugiere la documentación oficial (https://docs.afipsdk.com/paso-a-paso/web-services/constatacion-de-comprobantes) en python:
# Obtenemos el TA
ta = ws.getTokenAuthorization()
# Preparamos los datos
data = {
"Auth": {
"Token": ta["token"],
"Sign": ta["sign"],
"Cuit": afip.CUIT
},
"CmpReq": {
"CbteModo": "CAE",
"CuitEmisor": 20000000001,
"PtoVta": 1,
"CbteTipo": 1,
"CbteNro": 2,
"CbteFch": 20101014,
"ImpTotal": 300.8,
"CodAutorizacion": "60428000005029",
"DocTipoReceptor": "80",
"DocNroReceptor": "300000000007"
}
}
Hola! Si, la respuesta se da en producción. Es la API que me da por defecto la documentación con su estructura pero utilizando los datos de mi factura, la cual por web se valida bien
Buen dia... escribi hace un rato desde mi otra cuenta.. Si alguien esta disponible para ayudarnos a solucionar una cosa.. se los agradezco.
Buenas tardes
alguno sabe como enviar un array de iva? es decir, para una factura q con varios items?
@user Tené en cuenta que en el array de iva tenés que mandar el ID, la base imponible y el importe total de todos los items, no por seprado. Únicamente separás si las alícuotas son diferentes.
claro tengo alicuotas diferentes.
Completás el objeto con el ID del iva que corresponda a la otra alícuota.
"Iva": { "AlicIva": [{ "Id": 5, "BaseImp": imp_neto, "Importe": imp_iva, }] } "Iva": { "AlicIva": [{ "Id": 4, "BaseImp": imp_neto, "Importe": imp_iva, }] }
asi?
supongo q deberia ordenar los productos por alicuota y completar la factura segun, imp net y alicuota?
@user Nunca usé python, pero por qué agregás "Aliciva"? Quizá me equivoco, pero con el ID correspondiente al tipo de alícuota que enviás es suficiente. Creo, en el ejemplo de la documentación está así. Por las dudas esperá que lo vea @user, no quiero decir una cosa por otra.
porq estoy desarrollando una app para una empresa que emite facturas a con dif alicuotas
cada item puede tener su alicuota como esta en la docu de afip. No intente con el XMl pero no resulto, por eso estoy tratando de adaptar la api
@user yo veo que está raro el objeto, enviás "Aliciva", la api no pide esa info, además le falta una (coma) y enviás dos veces la lista "iva". Ta raro, yo probaría con algo como esto:
{ "Iva": [ { "Id": 5, "BaseImp": 100, "Importe": 21 }, { "Id": 4, "BaseImp": 200, "Importe": 10.5 } ] }
{ "Iva": [ { "Id": 5, "BaseImp": 100, "Importe": 21 }, { "Id": 4, "BaseImp": 200, "Importe": 10.5 } ] } SI SI LO PENSE POR AHI
Que esta fallando? que me esta faltando ?
Estoy unicamente mandando un cuit en el parametro
@user me podrias ayudar?
Bien, entonces es lo que pensaba. Pense que era una respuesta de error generico. Muchas gracias estare al tanto. Entonces con autorizar ese padron todo deberia funcionar
🫡 ❤️
Si existe el taxid, ya que es el cuit con el que accedo a afip
probe con otros cuits y sucede lo mismo
Solucionado, recien lei que con el certificado de desarrollo solo s pueden usar cuits especificos
Buenas tardes, recien comenzando en el tema, queria saber si alguien la usa en servidores con LINUX?, CENTOS?
Preguntas por alguna razon en particular? Deberia funcionar sin problemas
Hola, lo estoy probando en desarrollo y funciona bien. Gracias, hago unos días de prueba y la idea es pasar a producción, ahora voy a ver la documentación.
Buenas. Hay algún código de ejemplo para generar una factura de exportación en Homologación? Busqué pero no encuentro. Gracias
Buenas! Intentando crear notas de credito B con concepto 1 (Productos) me encuentro con el siguiente error (10016) El numero o fecha del comprobante no se corresponde con el proximo a autorizar. Consultar metodo FECompUltimoAutorizado. este es el json con el que se realiza el request {'CantReg': 1, 'PtoVta': 1, 'CbteTipo': 8, 'Concepto': 1, 'DocTipo': 86, 'DocNro': 33693450239, 'CbteDesde': 504, 'CbteHasta': 504, 'CbteFch': 20250323, 'FchServDesde': None, 'FchServHasta': None, 'FchVtoPago': 20250331, 'ImpTotal': 2420.91, 'ImpTotConc': 0, 'ImpNeto': 2000.75, 'ImpOpEx': 0, 'ImpIVA': 420.16, 'ImpTrib': 0, 'MonId': 'PES', 'MonCotiz': 1, 'CondicionIVAReceptorId': 5, 'Iva': [{'Id': 5, 'BaseImp': 2000.75, 'Importe': 420.16}]}. El ultimo comprobante realizado fue el 503.
Notan algun error en el request json?
En FchServDesde, FchServHasta y FchVtoPago suelo poner: NULL (solo son obligatorios para conceptos 2 y 3)
Incluso con FchVtoPago en NULL, se genera el error. Con el resto de los conceptos (2 y 3) no tengo problema
https://afipsdk.com/blog/factura-electronica-solucion-a-error-10016/ Fijate que la CbteFch sea posterior a la del ultimo comprobante
Gracias Ivan, efectivamente ese era el problema. Estare mas atento al blog
@user buenos dias. Ivan, tengo una consulta tema carta de porte electronico, lo que veo en la pagina web es solo la introduccion a carta de porte, porque veo que dps afip pide mas datos. Afips SDK soporta las presentaciones extra de carta de porte?
2008 La CUIT {0} no está activa en RUCA para el tipo de contribuyente: {1} CPE Automotor Flete corto (274) esto me sale como error
Si si, tenes que hablarles a [email protected] para que te den un set de datos para pruebas
Gracias ivan. Gracias por tu tiempo
Buenas, como va? Una consulta: cuando levanto la instancia de la libreria a veces me tira que tengo que esperar 2 minutos para obtener otro TA. (Yo gestiono muchos CUITs distintos)
afip = Afip({
"CUIT": CUIT,
"cert": cert,
"key": key,
"access_token": "token",
"production": True
})
Siempre que voy a crear un comprobante con un cuit, la instancio nuevamente. Es decir si el CUIT "A" crea 10 facturas, instancio 10 veces la clase Afip.
Hay alguna buena practica para evitar que me suceda lo de no solicitar un TA nuevo antes de los 2 minutos? Pregunto porque me resulta raro que a veces falla y a veces no. Es medio random. Si fuese estricto 2 minutos, fallaria siempre que hago mas de 1 factura consecutiva
De casualidad estas forzando la generacion de un nuevo TA en cada instancia? https://docs.afipsdk.com/recursos/otros-metodos-utiles#forzar-la-solicitud-de-un-nuevo-ta
Si. Deberia cachearlo por 12 hs por cada cuit no ? osea la idea de forzarlo surgio porque nosotros gestionamos muchos cuits distintos mediante delegacion del servicio de facturacion electronica. Entonces cuando viene un cuit nuevo, tengo q forzar otro TA para que detecte que lo puedo gestionar
No, no necesitas forzarlo, se cachea y gestiona solo, el forzarlo anula ese mecanismo por eso estas teniendo ese problema
El TA es independiente del CUIT que le paso ? o es por cert ? tipo si levanto 2 veces con 2 cuits distintos, no deberia tener problema, no ?
Si levantas 2 veces con dos cuit distintos no deberias tener problemas
Buen dia @user , como estas?
Sabes que sigo con el mismo problema: sigo teniendo lo de los 2 minutos del TA.
- Ya elimine los afip.ElectronicBilling.getTokenAuthorization(True)
- Ahora detecto error en last_voucher_id = afip.ElectronicBilling.getLastVoucher(user_selling_point, AfipInvoiceTypes.C.value)
Se podra ver logs en base a mi token? me esta afectando bastante la experiencia. En resumen; levanto la clase AFIP por cada CUIT cada vez que lo uso.
Me recomendas algo para ver por donde puede venir el error? estuve viendo el codigo del SDK pero no tengo visiblidad de lo que sucede cuando se le pega a la api tuya
Escribime a [email protected] con tu correo aver si puedo revisar que sucede
Hola! Cómo están? Soy Contador con conocimientos muy básicos de programación. Quiero hacer un facturador para mi pequeño estudio en base a un archivo de excel, donde lea los datos del emisor y del receptor para confeccionar las facturas. En principio use la base del ejemplo que ponen aquí y logro obtener los certificados y conectarme con ARCA en homologación, pero me falla, el XML que envía para la emisión no reconoce todos los campos, aparentemente por formato. Le dí muchas vueltas pero no logro solucionarlo. Alguien me podrá dar una mano?
Me sale este error:
📤 Ejecutando CAESolicitar...
❌ Error emitiendo factura #503: soap:Client: Server was unable to read request. ---> There is an error in XML document (5, 1201). ---> Input string was not in a correct format.
Que codigo ejecutas para tener ese error?
Ese es el código. Ahora que veo el link que me pasas, no tengo todos los campos. Tal vez sea por eso, no?
Mmm probablemente falta algun campo o algun campo es incorrecto
Voy a probar entonces con los campos del enlace que me pasaste a ver si así va. Mil gracias Ivan!
Hola que tal. soy nuevo aca y estoy intentando hacer una nota de debito pero no esta en la documentacion. y aca va la pregunta: sera que el metodo es el mismo y lo unico que cambia es la variable tipo_de_nota? me pueden confirmar eso? https://docs.afipsdk.com/siguientes-pasos/web-services/factura-electronica/nota-de-credito-a {"NDA": 2, "NDB": 7, "NDC": 12}
Asi es, solo cambia el tipo de comprobante, el resto es similar
Excelente, gracias.
@user me podes confirmar que los ids de alicuotas de iva son estos?
Le pregunte a la IA pero la rta no me termina de convencer.
1 → No gravado 2 → Exento 3 → 0% 4 → 10,5% 5 → 21% 6 → 27% 8 → 5% 9 → 2,5%
Podes obtenerlos directamente con este metodo https://docs.afipsdk.com/siguientes-pasos/web-services/factura-electronica#obtener-tipos-de-alicuotas-disponibles, si son, excepto el 1 y 2, de donde los sacaste?
@user muchas gracias por responder. no, le pregunte a chatgpt y me respondio eso....(claramente no existe) tengo otra consulta, imaginate que tengo que emitir factura A, y tengo productos con iva 0% como la leche. eso en que parte del bloque de data lo tengo que poner? como importe exento o dentro de bloque de alicuotas de iva? "ImpOpEx": importe_exento_iva, <---aca? o
"Iva": [ # Alícuotas asociadas al factura { "Id": 3, # Id del tipo de IVA (3 = 0%) "BaseImp": 1500, <--uso como ejemplo la base imponible "Importe": 0 <-- aca iria siempre 0, verdad? } ]
no termino de entender cuando usar uno u otro. te agradezco por toda la ayuda que me estas dando.
Es un pregunta mas contable pero en ese caso creo que va como IVA 0%
Gracias de nuevo por responder. Tenes idea alguna documentacion que pueda aclararme la duda?
Hola! Estoy en desarrollo, aprendiendo un poco cómo funciona todo.
Quiero obtener el último comprobante de factura C para ver como ir armando una nueva factura, con el ult_comp + 1.
data = { "Auth": { "Token": token, "Sign": sign, "Cuit": cuit }, "FeCompConsReq": { "CbteTipo": 11, "CbteNro": 11363, "PtoVta": 10 } }
try: # Realizamos la llamada al metodo del web service response = ws.executeRequest("FECompConsultar", data)
# Mostramos la respuesta por pantalla
print(response)
except Exception as error: # En caso de error lo mostramos por pantalla print(error)
Quiero obtener los datos del último comprobante (que mirando desde la pág de arca es ese número) y me dice que no existen los datos.
Será porque estoy en desarrollo? Porque también llamé al FECompUltimoAutorizado y me dice que el último es el 0 cuando no tiene sentido
En modo desarrollo te va a decir que no existe, y en produccion solo podes obtener los datos de los comprobantes emitidos via web service
Genial, mil gracias