Incluir items con distintos IVA

RunLLM
RunLLM

Debes sumar los importes netos de los productos según cada alícuota de IVA y armar un array de IVA donde cada objeto representa una alícuota distinta. Por ejemplo, si tienes productos al 21% y al 10,5%, el array debe tener un objeto para cada tipo de IVA, con la base imponible y el importe correspondiente a cada uno. Si hay varios productos con la misma alícuota, se suman en un solo objeto por tipo de IVA. Ejemplo:

"Iva": [
  { "Id": 5, "BaseImp": 100, "Importe": 21 },
  { "Id": 4, "BaseImp": 200, "Importe": 21 }
]

Así, los totales de la factura deben reflejar la suma de todos los productos y sus respectivos IVAs. No se envía el detalle de cada ítem, solo el resumen por tipo de IVA. ¿Te gustaría ver un ejemplo completo de JSON para una factura con varios ítems y diferentes IVAs?

Sources:

Yinho El metralletas
Yinho El metralletas

@user Pero yo no tengo un campo llamado iva, tengo /** * Importe sujeto al IVA (sin icluir IVA) **/ const importe_gravado = 100;

/**
 * Importe exento al IVA
 **/
const importe_exento_iva = 0;

/**
 * Importe de IVA
 **/
const importe_iva = 21;

esos

RunLLM
RunLLM

Los campos importe_gravado, importe_exento_iva e importe_iva son los totales que se declaran en la factura, pero para detallar los diferentes porcentajes de IVA, debes agregar el array Iva en el objeto de datos que envías a la API. Aunque no lo veas en tu código actual, es obligatorio incluirlo para discriminar las alícuotas, por ejemplo:

'Iva': [
  { 'Id': 5, 'BaseImp': 100, 'Importe': 21 },
  { 'Id': 4, 'BaseImp': 200, 'Importe': 21 }
]

El campo Iva debe agregarse junto con los otros campos al armar el JSON de la factura. ¿Te gustaría ver cómo integrarlo en tu estructura actual?

Sources:

Yinho El metralletas
Yinho El metralletas

'ImpTotConc': 0, // Importe neto no gravado

    'ImpTrib'     : 0, //Importe total de tributos

esos van en 0 siempre @user

RunLLM
RunLLM

No necesariamente. 'ImpTotConc' solo va en 0 si no tienes importes netos no gravados; si tienes productos o servicios no alcanzados por IVA, ahí debes sumar ese importe. 'ImpTrib' va en 0 si no hay tributos adicionales (por ejemplo, Ingresos Brutos, tasas municipales, etc.), pero si existen, debes sumarlos aquí.

Ambos campos pueden ser distintos de cero según la composición de la factura. ¿Quieres ejemplos de cuándo se usan valores distintos de cero?

Sources:

Yinho El metralletas
Yinho El metralletas

@user pasame el enum de ivas + el numero ej 5 = 21%

RunLLM
RunLLM

Los IDs de alícuotas de IVA más comunes son:
3 = 0%, 4 = 10,5%, 5 = 21%, 6 = 27%, 8 = 5%, 9 = 2,5%.
También existen: 1 = No gravado, 2 = Exento.

Puedes obtener la lista oficial y actualizada usando el método correspondiente en la documentación de Afip SDK: Obtener tipos de alícuotas disponibles.

Sources:

Yinho El metralletas
Yinho El metralletas

@user preciso hacer una UI para que la persona tercera me autorize a usar su cuit, que datos precisaria ? porque no enteidno la parte donde yo soy el administrador y los demas me dan su autorizacion para facturar

RunLLM
RunLLM

Para que un tercero te autorice a usar su CUIT y puedas facturar en su nombre, necesitas su CUIT y contraseña de ARCA para ejecutar la automatización de delegación. El usuario debe iniciar sesión y autorizarte como delegado del web service; luego tú aceptas la delegación y finalmente autorizas el web service para ese CUIT desde tu cuenta.

En la UI, debes pedir al usuario: CUIT, contraseña y, opcionalmente, un alias para identificar la delegación. No necesitas guardar la contraseña, solo usarla en el momento de la delegación. ¿Te gustaría ver un flujo detallado o ejemplo de pantalla?

Sources:

Yinho El metralletas
Yinho El metralletas

@user o sea que yo tengo que hacer como un inicio de sesion a afip apra que me delegue el servicio.

import Afip from '@afipsdk/afip.js';

const afip = new Afip({ access_token: 'TU_ACCESS_TOKEN' });

// Aqui deben cambiar los datos por los que correspondan. // Esta request de ejemplo incluye todos posibles // valores para ejecutar la automatizacion delegate-web-service, // puede que algun valor sea opcional. const data = { "cuit": "20111111112", "username": "20111111112", "password": "contraseña#segura?", "service": "wsfe", "delegate_to": "20111111112" };

try { // Ejecutamos la automatizacion const response = await afip.CreateAutomation("delegate-web-service", data, true);

// Mostramos la respuesta por consola
console.log(response);

} catch(error){ // En caso de error lo mostramos por consola console.error(error); }

con eso. y que guardo de esa respuesta? o no tengo qeu guardar nada?

RunLLM
RunLLM

Correcto, ese código realiza el inicio de sesión a ARCA con los datos del tercero y ejecuta la delegación. No necesitas guardar nada de la respuesta; solo debes esperar el status "complete" y luego continuar con la aceptación de la delegación y la autorización del web service.

La respuesta solo confirma que la delegación fue creada; no contiene datos que debas almacenar para el futuro. ¿Te gustaría ver el flujo completo de los tres pasos?

Sources:

Yinho El metralletas
Yinho El metralletas

@user una vez que eso dio ok y me delegaron el serviocio, como facturo a nombre de ellos?

RunLLM
RunLLM

Luego de que te delegaron el servicio y aceptaste la delegación, debes autorizar el web service para el CUIT del usuario que te delegó. Al facturar, usas tu certificado, pero en los datos de la factura (por ejemplo, en el campo CUIT/tax_id), debes poner el CUIT del cliente al que representas, es decir, a nombre de quien se emite la factura.

El flujo es: delegación → aceptación → autorización del web service para el CUIT delegado → facturación usando el CUIT del cliente. ¿Te gustaría ver un ejemplo de código para facturar en este contexto?

Sources:

Yinho El metralletas
Yinho El metralletas

@user yo hago que delegue el servicio con cuit y contraseña, me llega el ok. Ahora que tengo que hacer? o sea como es la autorizacion? como deberia hacerlo?

RunLLM
RunLLM

Después de que el usuario delega el servicio y recibes el OK, debes aceptar la delegación usando la automatización "accept-web-service-delegation" con tus datos (tu CUIT, usuario, contraseña, el servicio y el CUIT que te delegó). Luego, debes autorizar el web service para el CUIT delegado, eligiendo como "representado" al CUIT que te delegó el servicio.

El flujo es: 1) Delegación (ya hecho), 2) Aceptar delegación, 3) Autorizar web service para el CUIT delegado. Así quedas habilitado para facturar en nombre de ese CUIT. ¿Te gustaría ver ejemplos de código para estos pasos?

Sources:

Yinho El metralletas
Yinho El metralletas

@user hay algunfa forma de desvincularlo? para pruebas?

RunLLM
RunLLM

Mi entendimiento es que sí, puedes desvincular la delegación eliminando la relación desde el administrador de relaciones de ARCA/AFIP, accediendo con el CUIT que delegó el servicio y quitando la delegación al CUIT administrador. No hay una automatización específica en Afip SDK para esto; debe hacerse manualmente desde la web de ARCA.

¿Te gustaría una guía paso a paso para hacerlo desde la web?

Sources:

Yinho El metralletas
Yinho El metralletas

@user como se que el cliente es responsable inscripto, monotributista u otro? tengo que pedirselo a el o lo puedo obtener de algun lado y otra cosa, tengo que crear algun punto de venta?

RunLLM
RunLLM

No necesitas pedírselo al cliente; puedes obtener la condición frente al IVA consultando el padrón de constancia de inscripción vía web service, usando solo el CUIT. Así sabrás si es responsable inscripto, monotributista, exento, etc. Ejemplo de cómo hacerlo: Guía paso a paso.

Sí, debes crear un punto de venta específico para facturación electrónica por web service, eligiendo la opción según el régimen del contribuyente (monotributo o responsable inscripto). Más info: Crear punto de venta.

Sources:

Yinho El metralletas
Yinho El metralletas

@user cuando hago una factura en nombre de 3eros y ya tengo su delegación etc. Tengo que return new Afip({ CUIT: config.cuit, access_token: config.accessToken, cert: config.cert, key: config.key, production: config.production || false, });

crear esta instancia con el cuit de esa persona?

RunLLM
RunLLM

Sí, debes instanciar Afip con el CUIT de la persona a la que le facturas (el CUIT que te delegó el servicio), aunque el certificado y clave sean tuyos. Así, la factura se emite a nombre de ese tercero usando tu certificado delegado.

Esto es fundamental para que la factura salga correctamente a nombre del cliente y no del administrador/delegado. ¿Te gustaría ver un ejemplo de configuración?

Sources:

Yinho El metralletas
Yinho El metralletas

@user se puede probar en dev la delegacion de web services de un cuit a mi?

RunLLM
RunLLM

Sure thing! I'm looking through the available data to answer your question. Hold on a second... :hourglass_flowing_sand:

Yinho El metralletas
Yinho El metralletas

@user En este SDK no existe CreateAutomation("auth-web-service-dev", data, true). El flujo equivalente es CreateWSAuth(username, password, alias, wsid), que hace el POST a v1/afip/ws-auths en entorno dev. El parámetro service del body (ej. "wsfe") se mapea al wsid de CreateWSAuth.

cambiaron los nombres de los metodos?

RunLLM
RunLLM

Ambos métodos existen y cumplen funciones equivalentes, pero CreateAutomation("auth-web-service-dev", ...) es la forma recomendada y documentada actualmente para automatizaciones, mientras que CreateWSAuth(...) es un método específico de algunas implementaciones del SDK (por ejemplo, en PHP). No es un cambio de nombre, sino dos formas de acceder a la misma automatización; la recomendada es CreateAutomation.

Puedes consultar la documentación oficial para ver ejemplos actualizados: Automatización auth-web-service-dev.

Sources:

Yinho El metralletas
Yinho El metralletas

@user para que quiero los certificados? para emitir factruras? si es asi , como los uso?

RunLLM
RunLLM

Sí, los certificados digitales son obligatorios para emitir facturas electrónicas a través de los web services de ARCA, ya que garantizan la identidad y seguridad de las transacciones. El certificado y su key se usan para firmar digitalmente las solicitudes que envías a ARCA.

Para usarlos, debes agregarlos al crear la instancia de Afip SDK, por ejemplo en PHP:

$afip = new Afip([
  'CUIT' => 20111111112,
  'cert' => file_get_contents('ruta/a/certificado.crt'),
  'key' => file_get_contents('ruta/a/key.key'),
  'access_token' => 'TU_ACCESS_TOKEN'
]);

¿Te gustaría ver el flujo completo de obtención y uso de certificados?

Sources:

Yinho El metralletas
Yinho El metralletas

@user cuando un RI , monotributista u otro le factura a consumidor final, que cuit se pone?

RunLLM
RunLLM

Cuando se factura a consumidor final, en el campo CUIT del receptor se debe poner 0 (cero), independientemente de si el emisor es Responsable Inscripto, Monotributista u otro régimen. El campo DocTipo debe ser 99 (Consumidor Final) y DocNro 0.

Esto es estándar para todas las facturas a consumidor final según la documentación del SDK y la práctica habitual de ARCA/AFIP. ¿Te gustaría ver un ejemplo de estructura de datos para este caso?

Sources:

Yinho El metralletas
Yinho El metralletas

@user tipos de comprobante y el numero

RunLLM
RunLLM

Los tipos de comprobante y su número más comunes son: 1 = Factura A, 6 = Factura B, 11 = Factura C, 3 = Nota de Crédito A, 8 = Nota de Crédito B, 13 = Nota de Crédito C, 201 = Factura de Crédito Electrónica A, 206 = Factura de Crédito Electrónica B, 211 = Factura de Crédito Electrónica C.

Puedes consultar la lista completa y actualizada en la documentación oficial: Tipos de comprobantes disponibles. ¿Te gustaría el listado completo?

Sources:

Yinho El metralletas
Yinho El metralletas

@user (10015) Comprobante C (CbteDesde igual a CbteHasta), DocTipo: 80, DocNro 20332244998 no se encuentra registrado en los padrones de AFIP y no corresponde a una cuit pais.

RunLLM
RunLLM

El error (10015) indica que el DocTipo 80 (CUIT) y el número 20332244998 no están registrados en los padrones de AFIP, o no corresponde a un CUIT válido. Si estás facturando a un consumidor final, debes usar DocTipo 99 y DocNro 0; DocTipo 80 solo se usa para CUITs válidos y activos en el padrón.

Verifica si el CUIT es correcto y está activo, o usa los datos de consumidor final si corresponde. ¿Te gustaría ayuda para validar el CUIT o ejemplos de facturación a consumidor final?

Sources:

Yinho El metralletas
Yinho El metralletas

@user (10015) Comprobante C (CbteDesde igual a CbteHasta), DocTipo: 80, DocNro 34796861 no se encuentra registrado en los padrones de AFIP y no corresponde a una cuit pais

RunLLM
RunLLM

El error (10015) significa que estás usando DocTipo 80 (CUIT) con un número (34796861) que no es un CUIT válido ni está registrado en los padrones de AFIP. Si el receptor es consumidor final, debes usar DocTipo 99 y DocNro 0; DocTipo 80 solo es para CUITs válidos.

Corrige los datos del receptor según corresponda. ¿Te gustaría ver un ejemplo de cómo armar los datos para consumidor final?

Sources:

Yinho El metralletas
Yinho El metralletas

@user de:internal/process/task_queues:95:5)"}]}
2026-03-12T19:49:30.731Z [warn] [[object Object]] Error del cliente: (10059) De enviarse el tag CbtesAsoc debe enviarse Nro mayor a 0 y menor a 99999999

RunLLM
RunLLM

El error (10059) indica que al enviar el tag CbtesAsoc, el campo Nro debe ser mayor a 0 y menor a 99.999.999. Verifica que el número de comprobante asociado (Nro) cumpla con ese rango; si es 0 o mayor a 99.999.999, el web service lo rechaza.

Corrige el valor de Nro en el array CbtesAsoc para que esté dentro del rango permitido. ¿Te gustaría ver un ejemplo de cómo debe armarse este campo?

Sources: