Sí, es posible emitir facturas por cuenta y orden de terceros con Afip SDK. Debes crear el certificado desde el usuario de AFIP del tercero o pedir que te delegue el web service de facturación y luego aceptar la delegación; así podrás emitir facturas a nombre de ese CUIT desde tu sistema, cumpliendo con los requisitos de AFIP/ARCA según esta referencia y este procedimiento de delegación.
¿Te gustaría ver un ejemplo de código o el paso a paso detallado?
Sources:
@user Dame un ejemplo de codigo en python de como emitir una facrtura por cuenta y orden de terceros usando python
@user dame un ejemplo de codigo en python de como emitir una factura por cuenta y orden de terceros usando el Afip SDK
Mi entendimiento es que para emitir una factura por cuenta y orden de terceros con Afip SDK en Python, necesitas: 1) tener el certificado y clave del CUIT del tercero (o la delegación del web service), y 2) instanciar el SDK con esos datos. Luego, usas el método createVoucher con los datos de la factura. El proceso es igual que una factura común, pero usando el CUIT y certificado del tercero, como se indica en la documentación oficial y ejemplo de Python.
Aquí tienes un ejemplo básico:
from afip import Afip
afip = Afip({
"CUIT": XXXXX, # CUIT del tercero
"cert": open("certificado_tercero.crt").read(),
"key": open("clave_tercero.key").read(),
"access_token": "TU_ACCESS_TOKEN",
"production": True
})
data = {
"CantReg": 1,
"PtoVta": 1,
"CbteTipo": 1, # Factura A
"Concepto": 1,
"DocTipo": 80,
"DocNro": 20123456789,
"CbteDesde": 123,
"CbteHasta": 123,
"CbteFch": 20240601,
"ImpTotal": 121,
"ImpTotConc": 0,
"ImpNeto": 100,
"ImpOpEx": 0,
"ImpIVA": 21,
"ImpTrib": 0,
"MonId": "PES",
"MonCotiz": 1,
"CondicionIVAReceptorId": 1,
"Iva": [
{"Id": 5, "BaseImp": 100, "Importe": 21}
]
}
res = afip.ElectronicBilling.createVoucher(data)
print(res["CAE"], res["CAEFchVto"])
¿Te gustaría una explicación paso a paso de cada parte del código?
Sources:
@user Si, inclui como facturar en pesos argentinos y en USD
Para facturar en pesos argentinos (ARS), usa "MonId": "PES" y "MonCotiz": 1. Para facturar en dólares (USD), usa "MonId": "DOL" y obtén la cotización oficial con el método FEParamGetCotizacion, luego asigna ese valor a "MonCotiz". Así lo indica la documentación y la comunidad Afip SDK (ver referencia).
Ejemplo en Python para ambos casos:
from afip import Afip
afip = Afip({
"CUIT": XXXXX,
"cert": open("certificado_tercero.crt").read(),
"key": open("clave_tercero.key").read(),
"access_token": "TU_ACCESS_TOKEN",
"production": True
})
# Factura en pesos argentinos
data_ars = {
"CantReg": 1,
"PtoVta": 1,
"CbteTipo": 1,
"Concepto": 1,
"DocTipo": 80,
"DocNro": 20123456789,
"CbteDesde": 123,
"CbteHasta": 123,
"CbteFch": 20240601,
"ImpTotal": 121,
"ImpTotConc": 0,
"ImpNeto": 100,
"ImpOpEx": 0,
"ImpIVA": 21,
"ImpTrib": 0,
"MonId": "PES",
"MonCotiz": 1,
"CondicionIVAReceptorId": 1,
"Iva": [
{"Id": 5, "BaseImp": 100, "Importe": 21}
]
}
res_ars = afip.ElectronicBilling.createVoucher(data_ars)
print(res_ars["CAE"], res_ars["CAEFchVto"])
# Factura en dólares estadounidenses
cotizacion = afip.ElectronicBilling.executeRequest('FEParamGetCotizacion', {
"MonId": "DOL",
"FchCotiz": "20240601"
})["FEParamGetCotizacionResult"]["MonCotiz"]
data_usd = data_ars.copy()
data_usd["MonId"] = "DOL"
data_usd["MonCotiz"] = cotizacion
res_usd = afip.ElectronicBilling.createVoucher(data_usd)
print(res_usd["CAE"], res_usd["CAEFchVto"])
¿Te gustaría una explicación detallada de cada paso?
Sources: