Facturacin por cuenta de terceros

RunLLM
RunLLM

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:

chelo154
chelo154

@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

RunLLM
RunLLM

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:

chelo154
chelo154

@user Si, inclui como facturar en pesos argentinos y en USD

RunLLM
RunLLM

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: