Para emitir una nota de crédito o débito con Afip SDK, debes usar el método createVoucher y cambiar el campo CbteTipo según el tipo de comprobante: por ejemplo, 3 para Nota de Crédito A, 8 para Nota de Crédito B, 13 para Nota de Crédito C, y el código correspondiente para nota de débito. Los campos principales son: CantReg, PtoVta, CbteTipo, Concepto, DocTipo, DocNro, CbteDesde, CbteHasta, CbteFch, importes (ImpTotal, ImpNeto, ImpIVA, etc.), moneda (MonId, MonCotiz), condición IVA del receptor, y el campo CbtesAsoc para asociar la nota a la factura original. Para notas de crédito/débito, se debe asociar siempre a la factura que se anula o ajusta, usando el campo CbtesAsoc con los datos de la factura original. El resto de los campos se completan igual que una factura, ajustando los importes según corresponda.
Ejemplo: primero emites una factura (por ejemplo, Factura B, CbteTipo: 6), luego para anularla o ajustarla emites una Nota de Crédito B (CbteTipo: 8) asociada a esa factura. El campo CbtesAsoc debe contener el tipo, punto de venta y número de la factura original. Aquí tienes un ejemplo en Python para una Nota de Crédito B:
from datetime import datetime
punto_de_venta = 1
tipo_de_nota = 8 # Nota de Crédito B
last_voucher = afip.ElectronicBilling.getLastVoucher(punto_de_venta, tipo_de_nota)
punto_factura_asociada = 1
tipo_factura_asociada = 6 # Factura B
numero_factura_asociada = 1
concepto = 1
tipo_de_documento = 99
numero_de_documento = 0
numero_de_nota = last_voucher + 1
fecha = int(datetime.today().strftime("%Y%m%d"))
importe_gravado = 100
importe_exento_iva = 0
importe_iva = 21
condicion_iva_receptor = 5
data = {
"CantReg": 1,
"PtoVta": punto_de_venta,
"CbteTipo": tipo_de_nota,
"Concepto": concepto,
"DocTipo": tipo_de_documento,
"DocNro": numero_de_documento,
"CbteDesde": numero_de_nota,
"CbteHasta": numero_de_nota,
"CbteFch": fecha,
"ImpTotal": importe_gravado + importe_iva + importe_exento_iva,
"ImpTotConc": 0,
"ImpNeto": importe_gravado,
"ImpOpEx": importe_exento_iva,
"ImpIVA": importe_iva,
"ImpTrib": 0,
"MonId": "PES",
"MonCotiz": 1,
"CondicionIVAReceptorId": condicion_iva_receptor,
"CbtesAsoc": [
{"Tipo": tipo_factura_asociada, "PtoVta": punto_factura_asociada, "Nro": numero_factura_asociada}
],
"Iva": [
{"Id": 5, "BaseImp": importe_gravado, "Importe": importe_iva}
]
}
res = afip.ElectronicBilling.createVoucher(data)
print({"cae": res["CAE"], "vencimiento": res["CAEFchVto"]})
Para nota de débito, solo cambia el valor de CbteTipo por el correspondiente. ¿Te gustaría ver el ejemplo para nota de débito o para otro tipo de comprobante?
Sources: