Habilitar web service en ARCA

RunLLM
RunLLM

Para habilitar un web service en ARCA, primero debés tener un certificado digital válido. Luego, ingresá al "Administrador de Relaciones de Clave Fiscal" en ARCA, seleccioná "Nueva Relación", elegí el web service que querés autorizar, seleccioná el certificado y confirmá la autorización. Si el servicio fue delegado, en "Representado" seleccioná el CUIT que te delegó el acceso y aceptá la delegación antes de autorizar el servicio.

Este proceso es necesario tanto en testing como en producción, y cada web service requiere su propia autorización. Encontrarás el paso a paso detallado en la documentación oficial de Afip SDK para testing y producción.

¿Te gustaría ver el procedimiento con capturas o ejemplos de código?

Sources:

mate
mate

no lo puedo hacer desde codigo con la instancia de afip creada?

@user no lo puedo hacer desde codigo con la instancia de afip creada?

RunLLM
RunLLM

Sí, podés autorizar un web service desde código usando la instancia de Afip creada. Usá el método CreateWSAuth pasando el CUIT, usuario, contraseña, alias del certificado y el ID del web service. Este proceso puede demorar unos segundos y es válido tanto para testing como para producción, según cómo instancies la librería.

Ejemplo en PHP:

$afip = new Afip(['CUIT' => $tax_id]);
$res = $afip->CreateWSAuth($username, $password, $alias, $wsid);
var_dump($res);

Más detalles y ejemplos en la documentación oficial.

¿Querés ver ejemplos en otro lenguaje o más detalles sobre los parámetros?

Sources:

mate
mate

@user cual es el web service para realizar facturas, recibos, notas de credito, notas de debito, facturas de credito electronica (myipyme), y obtener la condicion del iva del receptor

RunLLM
RunLLM

Para facturas, recibos, notas de crédito y débito, y facturas de crédito electrónica (MiPyME), el web service es wsfe (Facturación Electrónica). Para obtener la condición de IVA del receptor, debés usar ws_sr_constancia_inscripcion (Constancia de Inscripción). Ambos deben ser autorizados previamente.

Podés ver los identificadores y detalles en la documentación oficial y sobre el padrón en esta sección.

¿Querés ejemplos de uso para cada uno?

Sources:

mate
mate

@user dame el codigo php para autorizar esos dos web_services

RunLLM
RunLLM

Claro, aquí tienes el código PHP para autorizar ambos web services (wsfe y ws_sr_constancia_inscripcion) usando Afip SDK:

$tax_id = 'CUIT_A_AUTORIZAR';
$username = 'USUARIO_ARCA';
$password = 'CONTRASEÑA_ARCA';
$alias = 'ALIAS_CERTIFICADO';

// Autorizar wsfe
$afip = new Afip(['CUIT' => $tax_id]);
$res_wsfe = $afip->CreateWSAuth($username, $password, $alias, 'wsfe');
var_dump($res_wsfe);

// Autorizar ws_sr_constancia_inscripcion
$res_constancia = $afip->CreateWSAuth($username, $password, $alias, 'ws_sr_constancia_inscripcion');
var_dump($res_constancia);

Asegúrate de reemplazar los valores de las variables por los correspondientes a tu caso. Más detalles en la documentación oficial.

¿Te gustaría ver cómo hacerlo en ambiente de producción?

Sources:

mate
mate

@user esta bien si quiero autorizar 3 web services juntos, o puede traer algun problema:

$res = $afip->CreateCert($username, $password, $alias);
$res_wsfe = $afip->CreateWSAuth($username, $password, $alias, 'wsfe');
$res_constancia = $afip->CreateWSAuth($username, $password, $alias, 'ws_sr_constancia_inscripcion');
RunLLM
RunLLM

Sí, está bien autorizar varios web services juntos usando el mismo certificado, no genera problemas. Solo asegurate de que el certificado esté correctamente creado antes de autorizar cada web service, y que los parámetros sean correctos para cada uno.

La documentación oficial indica que un certificado puede tener autorizaciones para múltiples web services y CUITs sin inconvenientes. Más detalles en la guía de métodos útiles.

¿Querés recomendaciones para manejar posibles errores o demoras en la autorización?

Sources:

mate
mate

@user me dice que el metodo createCert no existe en Afip::CreateCert:

$res = $afip->CreateCert($username, $password, $alias);
RunLLM
RunLLM

El método correcto en PHP es CreateCert (con mayúscula), y debe estar disponible si usás la versión actualizada de la librería Afip SDK. Si te da error, asegurate de tener la última versión instalada y de estar usando correctamente la instancia de la clase. Si el error persiste, revisá que no haya errores de autoload o de instalación de la librería.

Podés ver el ejemplo oficial en la documentación.

¿Querés ayuda para verificar la instalación o el uso de la librería?

Sources:

mate
mate

@user como hago una nota de credito c con la version mas actualizada de afip sdk

RunLLM
RunLLM

Para emitir una Nota de Crédito C con la versión más actualizada de Afip SDK, usá el método CreateVoucher de ElectronicBilling y completá los campos requeridos, especificando 'CbteTipo' => 13 (Nota de Crédito C) y asociando la factura original en el campo CbtesAsoc.

Ejemplo en PHP:

$punto_de_venta = 1;
$tipo_de_nota = 13; // Nota de Crédito C
$last_voucher = $afip->ElectronicBilling->GetLastVoucher($punto_de_venta, $tipo_de_nota);
$data = array(
    'CantReg' => 1,
    'PtoVta' => $punto_de_venta,
    'CbteTipo' => $tipo_de_nota,
    'Concepto' => 1,
    'DocTipo' => 80,
    'DocNro' => 33693450239,
    'CbteDesde' => $last_voucher + 1,
    'CbteHasta' => $last_voucher + 1,
    'CbteFch' => intval(date('Ymd')),
    'ImpTotal' => 100,
    'ImpTotConc' => 0,
    'ImpNeto' => 100,
    'ImpOpEx' => 0,
    'ImpIVA' => 0,
    'ImpTrib' => 0,
    'MonId' => 'PES',
    'MonCotiz' => 1,
    'CbtesAsoc' => array(
        array(
            'Tipo' => 11, // Factura C
            'PtoVta' => 1,
            'Nro' => 1,
        )
    )
);
$res = $afip->ElectronicBilling->CreateVoucher($data);
var_dump(array('cae' => $res['CAE'], 'vencimiento' => $res['CAEFchVto']));

Más detalles y ejemplos en la documentación oficial.

¿Querés ver cómo hacerlo en otro lenguaje o con otros conceptos?

Sources:

mate
mate

@user pasame los ids de todos los web_services de arca

RunLLM
RunLLM

Aunque no estoy completamente seguro de que la lista esté completa, podría ser que los principales IDs de web services de ARCA sean:

  • wsfe (Facturación Electrónica)
  • wsfecred (Factura de Crédito Electrónica MiPyME)
  • ws_sr_constancia_inscripcion (Constancia de Inscripción)
  • wsct (Comprobantes de Turismo)
  • wsbfe (Factura de Exportación)
  • wscpe (Carta de Porte Electrónica)
  • wsremitocarnico (Remito Cárnico)
  • ws_padron_a10 (Padrón alcance 10)
  • ws_padron_a13 (Padrón alcance 13)

Estos IDs se pueden consultar y ampliar en la documentación oficial de Afip SDK y en la página de catálogo de AFIP.

¿Querés la lista completa con descripciones o ejemplos de uso?

Sources:

mate
mate

@user si hay mas web services pasamelos, sino, no hagas mas nada

RunLLM
RunLLM

No hay una lista más extensa en la documentación oficial de Afip SDK; solo se mencionan los principales web services ya listados anteriormente. Para otros servicios específicos, debés consultar el catálogo oficial de AFIP.

Sources:

mate
mate

@user dame el codigo de produccion para obtener el status de los servidores de arca

RunLLM
RunLLM

Para obtener el estado de los servidores de ARCA en producción con Afip SDK en PHP, usá el siguiente código:

$afip = new Afip(['CUIT' => 'TU_CUIT']);
$server_status = $afip->ElectronicBilling->GetServerStatus();
print_r($server_status);

Asegurate de tener configurado el entorno de producción y el certificado correspondiente. Más detalles en la documentación oficial.

Sources:

mate
mate

@user hay algun metodo para obtener el token de afip sdk?

RunLLM
RunLLM

Sí, el método para obtener el token (TA) en Afip SDK es realizar una solicitud POST al endpoint /api/v1/afip/auth enviando los parámetros environment, tax_id y wsid. El SDK gestiona automáticamente la obtención y renovación del token, pero podés obtenerlo manualmente con este endpoint.

Más detalles y ejemplos en la documentación oficial.

Sources:

mate
mate

@user para cada web_service debo tener un TA distinto? ademas, para ver el status de arca debo hacer uso de los archivos crt y key o no es necesario?

RunLLM
RunLLM

Sí, cada web service requiere su propio TA (Token de Acceso), ya que el parámetro wsid identifica el servicio específico al solicitar el TA. Para consultar el estado de los servidores de ARCA, también es necesario usar los archivos crt y key, ya que la autenticación es obligatoria incluso para el método de status.

Podés ver estos detalles en la documentación oficial y en la sección de estado del servidor.

¿Querés ejemplos de código para ambos casos?

Sources:

mate
mate

@user dame ejemplos de codigo para ambos casos

RunLLM
RunLLM

Claro, aquí tienes ejemplos en PHP para ambos casos:

1. Obtener un TA para un web service específico:

$body = [
    'environment' => 'prod',
    'tax_id' => 'TU_CUIT',
    'wsid' => 'wsfe', // Cambia por el ID del web service
    'cert' => file_get_contents('ruta/al/certificado.crt'),
    'key' => file_get_contents('ruta/al/clave.key')
];
$ch = curl_init('https://app.afipsdk.com/api/v1/afip/auth');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$ta = json_decode($response, true);
echo "Token: " . $ta['token'] . "\nSign: " . $ta['sign'];

2. Consultar el estado del servidor de ARCA (requiere TA y certificados):

$afip = new Afip([
    'CUIT' => 'TU_CUIT',
    'cert' => file_get_contents('ruta/al/certificado.crt'),
    'key' => file_get_contents('ruta/al/clave.key'),
    'production' => true
]);
$status = $afip->ElectronicBilling->GetServerStatus();
print_r($status);

Más detalles en la documentación oficial y en la sección de estado del servidor.

Sources:

mate
mate

@user el access_token seria el TA? dame un ejemplo de codigo php para obtenerlo cada vez que un usuario quiere hacer una factura

RunLLM
RunLLM

No, el access_token no es el TA. El TA (Token de Acceso) es el par token y sign que obtenés al autenticarte con el endpoint /api/v1/afip/auth. El access_token es solo para la API de Afip SDK, mientras que el TA es lo que se usa para operar con los web services de ARCA.

Ejemplo en PHP para obtener el TA cada vez que un usuario quiere hacer una factura:

$body = [
    'environment' => 'prod',
    'tax_id' => 'TU_CUIT',
    'wsid' => 'wsfe',
    'cert' => file_get_contents('ruta/al/certificado.crt'),
    'key' => file_get_contents('ruta/al/clave.key')
];
$ch = curl_init('https://app.afipsdk.com/api/v1/afip/auth');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$ta = json_decode($response, true);
echo "Token: " . $ta['token'] . "\nSign: " . $ta['sign'];

Más detalles en la documentación oficial.

Sources:

mate
mate

@user como hago para obtener el access_token? hay algun metodo?

RunLLM
RunLLM

Para obtener el access_token necesario para operar en producción con Afip SDK, debés ingresar a https://app.afipsdk.com, iniciar sesión y copiar tu access_token desde el panel de usuario. No existe un método automático por código para generarlo; es un proceso manual desde la web.

Este token es obligatorio para todas las operaciones en ambiente de producción, según la documentación oficial.

Sources:

mate
mate

@user que significa este mensaje y como lo puedo resolver?

Uncaught Exception: Debe autorizar el uso del web service. Revise el tutorial en https://docs.afipsdk.com/paso-a-paso/web-services. ns1:coe.notAuthorized

RunLLM
RunLLM

El mensaje significa que el certificado que estás usando no tiene autorización para acceder al web service solicitado. Debés autorizar el web service en ARCA para el CUIT y certificado correspondiente, siguiendo el tutorial indicado en el mensaje.

Encontrarás el paso a paso para autorizar el web service en la documentación oficial.

¿Querés una guía detallada del proceso de autorización?

Sources:

mate
mate

@user pero para autorizarlo debo hacer esto?

    $afip->CreateWSAuth($username, $password, $alias, $service);

o tengo que hacer algo con un TA?

RunLLM
RunLLM

Sí, para autorizar un web service debés usar el método $afip->CreateWSAuth($username, $password, $alias, $service);. No es necesario un TA para autorizar el servicio; el TA se usa después, una vez que el web service ya está autorizado, para operar con él.

El proceso de autorización es independiente y previo a la obtención del TA, como indica la documentación oficial.

Sources:

mate
mate

@user que pasa si una persona ya tiene los archivos crt y key y los vuelve a crear mediante afip sdk?

RunLLM
RunLLM

Mi entendimiento es que si una persona ya tiene los archivos crt y key y los vuelve a crear mediante Afip SDK, los nuevos archivos reemplazarán a los anteriores y solo el nuevo certificado será válido. Si usás el mismo alias, no es necesario volver a autorizar los web services, pero debés reemplazar los archivos en todas las instalaciones donde se usen.

Esto está explicado en la guía oficial y en la documentación sobre certificados.

¿Querés detalles sobre cómo manejar la renovación o el reemplazo en producción?

Sources:

mate
mate

@user o sea que el mensaje:

Uncaught Exception: Debe autorizar el uso del web service. Revise el tutorial en https://docs.afipsdk.com/paso-a-paso/web-services.

como se resuelve? si el metodo que quiero utilizar es este: $afip->RegisterInscriptionProof->GetTaxpayerDetails

RunLLM
RunLLM

Ese mensaje se resuelve autorizando el web service ws_sr_constancia_inscripcion (Constancia de Inscripción) para el CUIT y certificado que estás usando. Debés hacerlo desde código con $afip->CreateWSAuth($username, $password, $alias, 'ws_sr_constancia_inscripcion'); o manualmente en ARCA.

El método RegisterInscriptionProof->GetTaxpayerDetails requiere esa autorización específica, según la documentación oficial.

¿Querés el paso a paso para autorizarlo desde el panel de ARCA o desde código?

Sources:

mate
mate

@user si yo tengo los archivos de una persona, y esa persona cambia manualmente los web services desde arca, tengo que volver a generar los archivos para que se pueda usar?

RunLLM
RunLLM

No, no es necesario volver a generar los archivos crt y key si solo se cambian o agregan autorizaciones de web services desde ARCA. El certificado sigue siendo válido; solo debés asegurarte de que el web service esté correctamente autorizado para ese certificado y CUIT.

Esto está confirmado en la guía oficial.

Sources:

mate
mate

@user comoh ago para autorizar ese web service (el de constancia del padron) en arca manualmente?

RunLLM
RunLLM

Para autorizar manualmente el web service de constancia de padrón (ws_sr_constancia_inscripcion) en ARCA, debés ingresar al portal de ARCA con el CUIT administrador, ir a "Administrador de Relaciones", seleccionar "Nueva Relación", buscar el servicio "ws_sr_constancia_inscripcion" y asociarlo al certificado correspondiente.

El paso a paso detallado está en la documentación oficial.

¿Querés una guía con capturas de pantalla o instrucciones para testing?

Sources:

mate
mate

@user pasame codigo php para hacer una nota de debito B

RunLLM
RunLLM

Para emitir una Nota de Débito B con Afip SDK en PHP, usá el método CreateVoucher de ElectronicBilling y especificá 'CbteTipo' => 9 (Nota de Débito B). Ejemplo:

$punto_de_venta = 1;
$tipo_de_nota = 9; // Nota de Débito B
$last_voucher = $afip->ElectronicBilling->GetLastVoucher($punto_de_venta, $tipo_de_nota);
$data = array(
    'CantReg' => 1,
    'PtoVta' => $punto_de_venta,
    'CbteTipo' => $tipo_de_nota,
    'Concepto' => 1,
    'DocTipo' => 99,
    'DocNro' => 0,
    'CbteDesde' => $last_voucher + 1,
    'CbteHasta' => $last_voucher + 1,
    'CbteFch' => intval(date('Ymd')),
    'ImpTotal' => 121,
    'ImpTotConc' => 0,
    'ImpNeto' => 100,
    'ImpOpEx' => 0,
    'ImpIVA' => 21,
    'ImpTrib' => 0,
    'MonId' => 'PES',
    'MonCotiz' => 1,
    'Iva' => array(
        array(
            'Id' => 5,
            'BaseImp' => 100,
            'Importe' => 21
        )
    ),
);
$res = $afip->ElectronicBilling->CreateVoucher($data);
echo $res['CAE'];
echo $res['CAEFchVto'];

Podés consultar los tipos de comprobantes en la documentación oficial.

¿Querés agregar comprobantes asociados o ver un ejemplo con otros conceptos?

Sources:

mate
mate

@user me sale el cartel de bad request statusCode 400 body: null, por que puede sert?

RunLLM
RunLLM

El error "Bad Request statusCode 400 body: null" suele deberse a datos faltantes, incorrectos o mal formateados en la solicitud, como campos obligatorios ausentes, tipos de datos erróneos o valores inválidos. También puede ocurrir si el CUIT, certificado o autorización del web service no están correctamente configurados.

Revisá que todos los campos requeridos estén completos y correctos, y que el certificado y la autorización del web service sean válidos. Más detalles y causas frecuentes en la documentación oficial.

¿Querés ayuda para depurar el JSON o el código que estás enviando?

Sources:

mate
mate

@user esta es la responsa:

Error al hacer la factura electrónica: {"statusCode":400,"message":"Código de error 400 (Bad Request) en los servidores de ARCA.","body":null}

RunLLM
RunLLM

Ese mensaje indica que la solicitud enviada a ARCA tiene algún error de formato o datos inválidos, pero ARCA no devuelve detalles específicos en el cuerpo de la respuesta. Es común que falte un campo obligatorio, haya un valor incorrecto o el certificado/autorización no sea válido.

Te recomiendo revisar el JSON/campos enviados y utilizar el método para obtener el XML de la última solicitud y respuesta, como se explica en la documentación oficial, para identificar el error exacto.

¿Querés un ejemplo de cómo obtener el XML de la última solicitud para depurar el problema?

Sources:

mate
mate

@user dame el codigo php necesario para hacer una nota de debito B teniendo en cuenta que el monto es de 950000 y el iva exento

RunLLM
RunLLM

Para emitir una Nota de Débito B con monto $950.000 y exento de IVA, usá 'CbteTipo' => 9 y poné 'ImpNeto' => 950000, 'ImpIVA' => 0, y no incluyas el array 'Iva'. Ejemplo:

$punto_de_venta = 1;
$tipo_de_nota = 9; // Nota de Débito B
$last_voucher = $afip->ElectronicBilling->GetLastVoucher($punto_de_venta, $tipo_de_nota);
$data = array(
    'CantReg' => 1,
    'PtoVta' => $punto_de_venta,
    'CbteTipo' => $tipo_de_nota,
    'Concepto' => 1,
    'DocTipo' => 99,
    'DocNro' => 0,
    'CbteDesde' => $last_voucher + 1,
    'CbteHasta' => $last_voucher + 1,
    'CbteFch' => intval(date('Ymd')),
    'ImpTotal' => 950000,
    'ImpTotConc' => 0,
    'ImpNeto' => 950000,
    'ImpOpEx' => 0,
    'ImpIVA' => 0,
    'ImpTrib' => 0,
    'MonId' => 'PES',
    'MonCotiz' => 1
);
$res = $afip->ElectronicBilling->CreateVoucher($data);
echo $res['CAE'];
echo $res['CAEFchVto'];

Más detalles en la documentación oficial.

Sources:

mate
mate

@user siempre la hago con cuit (80) y número de cuit

RunLLM
RunLLM

Sí, podés emitir la Nota de Débito B usando 'DocTipo' => 80 (CUIT) y el número de CUIT correspondiente en 'DocNro'. Es válido y común para operaciones entre responsables inscriptos o empresas.

Ejemplo:

'DocTipo' => 80,
'DocNro' => 20111111112,

Más detalles en la documentación oficial.

¿Querés el ejemplo completo con estos datos?

Sources:

mate
mate

@user claro lo que yo hago al ser exento, es mandarle el total en impopex, por eso me dice bad request? por que no va en impopex y si en impneto?

RunLLM
RunLLM

Correcto, si la operación es exenta de IVA, el monto debe ir en el campo ImpOpEx (importe exento de IVA), no en ImpNeto. Si lo ponés en ImpNeto y el comprobante es exento, ARCA puede rechazar la solicitud con un "Bad Request".

Para operaciones exentas, usá:

'ImpNeto' => 0,
'ImpOpEx' => 950000,
'ImpIVA' => 0,

Esto está detallado en la documentación oficial.

¿Querés el ejemplo completo ajustado para comprobante exento?

Sources:

mate
mate

eso es lo que hago, y no incluyo el objeto iva en el array data, el impopex lo pongo como el imptotal (mismo valor) y me da bad request igual

@user

RunLLM
RunLLM

Si ponés el monto en ImpOpEx, ImpNeto en 0, ImpIVA en 0, y no incluís el array Iva, y aún así recibís "Bad Request", la estructura es correcta según la documentación. El error puede deberse a otro campo faltante, error en el tipo de comprobante, o datos del receptor.

Verificá que el tipo de comprobante (CbteTipo), el tipo de documento (DocTipo), y el resto de los campos sean válidos y estén correctamente formateados. Si todo está bien, obtené el XML de la última solicitud para ver el detalle del error, como indica la documentación oficial.

¿Querés que te ayude a revisar el JSON completo que estás enviando?

Sources:

mate
mate

@user eso es lo que hago, y no incluyo el objeto iva en el array data, el impopex lo pongo como el imptotal (mismo valor) y me da bad request igual

RunLLM
RunLLM

Tu enfoque es correcto: para una operación exenta, ImpOpEx debe ser igual a ImpTotal, ImpNeto e ImpIVA deben ser 0, y no se debe incluir el array Iva. Sin embargo, el error "Bad Request" puede deberse a otros campos obligatorios faltantes, formato incorrecto de datos, o problemas con la autorización/certificado.

Te sugiero revisar que todos los campos requeridos estén presentes y correctamente formateados, y que el CUIT, certificado y autorización del web service sean válidos. Si el error persiste, obtené el XML de la última solicitud y respuesta para ver el detalle del rechazo, como indica la documentación oficial.

¿Querés un ejemplo de cómo obtener el XML para depurar el error?

Sources:

mate
mate

@user dame el ejemplo xml

RunLLM
RunLLM

Para obtener el XML de la última solicitud y respuesta, usá este código en PHP:

$res = $afip->GetLastRequestXML();
print_r($res);

Esto te devolverá un array con las claves request y response que contienen el XML enviado y recibido. Así podrás ver el detalle exacto del error que devuelve ARCA y depurar tu problema, según la documentación oficial.

Sources:

mate
mate

@user que pasa si quiero hacer una nota de credito o debito de una factura del mes pasado? se puede? o por eso tira el error de bad request?

RunLLM
RunLLM

Sí, podés emitir una nota de crédito o débito sobre una factura del mes pasado, siempre que la fecha del comprobante esté dentro del rango permitido (hasta 10 días antes o después de la fecha actual). Si la fecha está fuera de ese rango, ARCA puede rechazar la solicitud y devolver un error como "Bad Request" o uno específico de fecha inválida.

Esto está detallado en la documentación oficial.

¿Querés un ejemplo de cómo setear la fecha correctamente para estos casos?

Sources:

mate
mate

o sea es un recibo B que se emitio el 12 de junio del 2025, a dia de hoy 15 de julio de 2025 se puede emitir la nota o no?

@user o sea es un recibo B que se emitio el 12 de junio del 2025, a dia de hoy 15 de julio de 2025 se puede emitir la nota o no?

RunLLM
RunLLM

No, no podés emitir una nota de crédito o débito hoy (15 de julio de 2025) sobre un recibo B emitido el 12 de junio de 2025, porque ya pasó el rango permitido de hasta 10 días antes o después de la fecha actual. Si intentás hacerlo, ARCA rechazará la solicitud.

Esto está especificado en la documentación oficial.

Sources:

mate
mate

@user quiero que me des el codigo php para obtener el xml de la ultima peticion para ver el error 400 de bad request

RunLLM
RunLLM

Para obtener el XML de la última petición y respuesta en PHP con Afip SDK, usá este código:

$res = $afip->GetLastRequestXML();
print_r($res);

Esto te mostrará el XML de la solicitud y la respuesta, permitiéndote analizar el motivo del error 400, según la documentación oficial.

Sources:

mate
mate

@user la quiero mandar como respuesta a un ajax, como hago?

RunLLM
RunLLM

Podés devolver el XML como respuesta a un AJAX usando json_encode en PHP. Ejemplo:

header('Content-Type: application/json');
$res = $afip->GetLastRequestXML();
echo json_encode($res);

Así el frontend recibirá el XML en formato JSON, listo para procesar, según la documentación oficial.

¿Querés un ejemplo de cómo mostrarlo en el frontend con JavaScript?

Sources:

mate
mate

@user esto me dio al intentar hacer una nota de credito c:

{"request":"<soap:Envelope xmlns:soap="http://www.w3.org\/2003\/05\/soap-envelope\" xmlns:xsi="http://www.w3.org\/2001\/XMLSchema-instance\" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tns="http://ar.gov.afip.dif.FEV1/">soap:Body<FECAESolicitar xmlns="http://ar.gov.afip.dif.FEV1/">ACA_TOKEN=</Sign>20309778198</Cuit></Auth>1</CantReg>3</PtoVta>13</CbteTipo></FeCabReq>2</Concepto>80</DocTipo>27419051115</DocNro>366</CbteDesde>366</CbteHasta>20250716</CbteFch>20250716</FchServDesde>20250716</FchServHasta>20250716</FchVtoPago>430825.69</ImpTotal>0</ImpTotConc>430825.69</ImpNeto>0</ImpOpEx>0</ImpIVA>0</ImpTrib>PES</MonId>1</MonCotiz>ns1:CbteAsocns1:Tipo15</ns1:Tipo>ns1:PtoVta3</ns1:PtoVta>ns1:Nro547</ns1:Nro></ns1:CbteAsoc></CbteAsoc></CbtesAsoc></FECAEDetRequest></FeDetReq></FeCAEReq></FECAESolicitar></soap:Body></soap:Envelope>","response":"\r\n"}

RunLLM
RunLLM

El XML que enviaste para la nota de crédito C tiene un error en la estructura del campo CbtesAsoc: estás anidando etiquetas <CbteAsoc> y <ns1:CbteAsoc>, lo cual no es correcto según el formato esperado por AFIP. Además, la respuesta vacía ("response":"\r\n") indica que el web service rechazó la solicitud por formato inválido.

Debés enviar solo un array simple de comprobantes asociados, sin anidaciones ni prefijos de namespace extra, como muestra la documentación oficial.

¿Querés un ejemplo correcto del bloque CbtesAsoc para tu caso?

Sources:

mate
mate

@user esto es lo que mando para cualquier tipo de nota:

if (in_array($cbte_tipo, [2, 3, 7, 8, 12, 13, 202, 203, 207, 208, 212, 213])) { $data['CbtesAsoc'] = array( 'CbteAsoc' => array( 'Tipo' => $tipo_factura_asociada, 'PtoVta' => $punto_factura_asociada, 'Nro' => $numero_factura_asociada, ) ); }

RunLLM
RunLLM

El error está en la estructura: CbtesAsoc debe ser un array de arrays simples, no un array con la clave 'CbteAsoc'. Debe ser así:

$data['CbtesAsoc'] = array(
  array(
    'Tipo'   => $tipo_factura_asociada,
    'PtoVta' => $punto_factura_asociada,
    'Nro'    => $numero_factura_asociada,
  )
);

Esto está documentado en la guía oficial.

¿Querés ver el ejemplo completo para una nota de crédito o débito?

Sources:

mate
mate

@user como hago con el punto de venta una vez que creo el archivo de facturacion con afip sdk?

RunLLM
RunLLM

Luego de crear el archivo de facturación (certificado), debés dar de alta un punto de venta en AFIP/ARCA para poder emitir comprobantes electrónicos. Esto se realiza desde el servicio "Administración de puntos de venta y domicilios" en la web de AFIP, eligiendo la opción según tu condición fiscal (monotributista o responsable inscripto).

El paso a paso está detallado en la documentación oficial.

¿Querés instrucciones detalladas para un tipo de contribuyente específico?

Sources:

mate
mate

@user cuand doy de alta un certificado con afip sdk, como hago para asociar un punto de venta a dichos certificados?

RunLLM
RunLLM

No es necesario asociar manualmente el punto de venta al certificado. Una vez que das de alta el certificado y lo autorizás para el web service correspondiente, el punto de venta se utiliza al emitir comprobantes, siempre que esté dado de alta en AFIP/ARCA y autorizado para facturación electrónica.

El proceso de alta del punto de venta es independiente y se realiza desde "Administración de puntos de venta y domicilios", como indica la documentación oficial.

¿Querés el paso a paso para dar de alta el punto de venta?

Sources:

mate
mate

@user hagamos de cuenta que un cliente es nuevo, y quiere empezar a facturar, que debe hacer? primero da de alta los archivos desde mi sistema, y despues? tiene que crear un pnuto de venta nuevo en arca? yo puedo usar un mismo archivo para distintos puntos de venta?

RunLLM
RunLLM

Mi entendimiento es que el cliente debe primero generar el certificado digital (archivo) desde tu sistema usando Afip SDK, luego autorizar el web service correspondiente en ARCA, y después dar de alta un punto de venta nuevo en el portal de AFIP/ARCA para facturación electrónica. El mismo certificado puede usarse para varios puntos de venta del mismo CUIT, pero cada punto de venta debe estar dado de alta y autorizado.

Esto está explicado en la documentación oficial y en las preguntas frecuentes.

¿Querés el paso a paso detallado para cada etapa del proceso?

Sources:

mate
mate

@user si un cliente tiene los certificados hechos, y los vuelve a crear, se reemplazan? hay algun problema? cambia algo?

RunLLM
RunLLM

Si un cliente vuelve a crear los certificados con el mismo alias, el nuevo certificado reemplaza al anterior y no es necesario volver a autorizar los web services; solo debe descargar y usar el nuevo archivo. No hay problema en hacerlo, pero es fundamental actualizar el certificado en todos los sistemas donde se utilice.

Esto está explicado en la guía oficial.

Sources:

mate
mate

@user y el punto de venta puede ser el mismo aunque cambien los archivos?

RunLLM
RunLLM

Sí, el punto de venta puede ser el mismo aunque cambies o renueves los archivos de certificado. El punto de venta está asociado al CUIT y no depende del certificado específico, siempre que el nuevo certificado esté autorizado para el web service.

Esto está confirmado en la documentación oficial.

Sources:

mate
mate

@user que significa este mensaje?

Fatal error: Uncaught Exception: (11002) El punto de venta no se encuentra habilitado a usar en el presente WS. Ver metodo FEParamGetPtosVenta

yo di de alta en arca el punto de venta (es para responsable inscripto) y me da ese error

RunLLM
RunLLM

El mensaje "(11002) El punto de venta no se encuentra habilitado a usar en el presente WS" significa que el punto de venta creado no está habilitado para facturación electrónica por web service. Asegurate de haberlo dado de alta como "RECE para aplicativo y Web Service" en ARCA, no solo como punto de venta común.

Si ya lo diste de alta correctamente, puede demorar en impactar en los sistemas de AFIP; esperá unos minutos y volvé a intentar, según la documentación oficial.

Sources:

mate
mate

@user lo tengo como "RECE para aplicativo y Web Service" pero sigue igual, que puede ser?

RunLLM
RunLLM

Si el punto de venta está dado de alta como "RECE para aplicativo y Web Service" y sigue el error, puede deberse a que la habilitación aún no impactó en todos los sistemas de AFIP, lo cual puede demorar un tiempo. También asegurate de estar usando el mismo CUIT y que el certificado esté correctamente autorizado para el web service.

Si el problema persiste después de esperar, revisá que no haya errores en la configuración y consultá el método FEParamGetPtosVenta para verificar los puntos de venta habilitados, como indica la documentación oficial.

Sources:

mate
mate

@user dame el codigo php para usar el metodo FEParamGetPtosVenta

RunLLM
RunLLM

Podría ser que para usar el método FEParamGetPtosVenta en PHP con Afip SDK, solo debas llamar al método correspondiente desde la instancia de facturación electrónica. Ejemplo:

require __DIR__ . '/vendor/autoload.php';
$afip = new Afip(['CUIT' => 20111111112]);
$res = $afip->ElectronicBilling->GetSalesPoints();
print_r($res);

Esto te devuelve los puntos de venta habilitados, según la documentación oficial.

¿Querés más detalles sobre cómo interpretar la respuesta?

Sources:

mate
mate

@user esto me dio:

[{"Nro":6,"EmisionTipo":"CAE - Monotributo","Bloqueado":"N","FchBaja":"NULL"}]

RunLLM
RunLLM

El resultado indica que solo tenés habilitado el punto de venta N°6, pero es de tipo "CAE - Monotributo", no "RECE para aplicativo y Web Service". Por eso no podés usarlo para facturación electrónica de responsable inscripto.

Debés crear un nuevo punto de venta seleccionando "RECE para aplicativo y Web Service" en ARCA, como indica la documentación oficial.

¿Querés el paso a paso para crear el punto de venta correcto?

Sources:

mate
mate

@user afip tira un mensaje de error si esta mal la condicion de iva del receptor id?

RunLLM
RunLLM

Sí, AFIP/ARCA devuelve el error (10242) "El campo Condicion IVA receptor no es un valor valido/es obligatorio" si el campo CondicionIVAReceptorId es incorrecto, inválido o falta en la solicitud. Debés consultar la lista de valores válidos usando el método FEParamGetCondicionIvaReceptor para evitar este error, según la documentación oficial.

¿Querés el listado de IDs válidos o un ejemplo de cómo consultarlos?

Sources:

mate
mate

@user que me devuelve el metodo FEParamGetCondicionIvaReceptor ?

RunLLM
RunLLM

El método FEParamGetCondicionIvaReceptor te devuelve la lista de todas las condiciones frente al IVA posibles, cada una con su ID y descripción, para que puedas informar correctamente el campo CondicionIVAReceptorId al emitir comprobantes. No devuelve la condición de un CUIT específico, solo el catálogo de opciones válidas.

Esto está detallado en la documentación oficial.

¿Querés ver un ejemplo de la respuesta que devuelve este método?

Sources:

mate
mate

@user y si quiero obtener la de un cuit especifico como hago? y que pasa si le mando una erronea? en vez de mandar 1 mando 5

RunLLM
RunLLM

Para obtener la condición frente al IVA de un CUIT específico, debés consultar el padrón de constancia de inscripción y analizar los impuestos asociados al CUIT; no existe un método directo que devuelva el ID de condición IVA listo para usar. Si envías un ID incorrecto (por ejemplo, 5 en vez de 1), AFIP/ARCA puede rechazar la solicitud o la factura puede quedar mal categorizada, generando problemas fiscales, según la documentación oficial y solución a error 10242.

¿Querés un ejemplo de cómo consultar el padrón y mapear el impuesto a la condición IVA?

Sources:

mate
mate

@user dame el codigo php completo para obtener la condicion de iva del receptor. incluí todas las posibilidades posibles y pasame el codigo completo

RunLLM
RunLLM

Para obtener la condición frente al IVA de un CUIT específico, debés consultar el padrón de constancia de inscripción, analizar los impuestos y mapearlos a los IDs de condición IVA válidos. No existe un método directo, por lo que el mapeo debe hacerse manualmente según la respuesta del padrón y la tabla de condiciones.

Aquí tenés un ejemplo PHP completo que cubre todas las posibilidades principales, basado en la documentación oficial y la lista de IDs válidos:

require __DIR__ . '/vendor/autoload.php';

$afip = new Afip(['CUIT' => 20111111112]);
$cuit_receptor = 20111111113; // CUIT del receptor

// Consultar padrón
$persona = $afip->RegisterInscription->getPersona(['idPersona' => $cuit_receptor]);

// Mapeo de impuestos a condición IVA
$condicion_iva_id = null;
if (isset($persona['datosRegimenGeneral']['impuesto'])) {
    foreach ($persona['datosRegimenGeneral']['impuesto'] as $impuesto) {
        if ($impuesto['idImpuesto'] == 30) { // IVA
            $condicion_iva_id = 1; // IVA Responsable Inscripto
            break;
        }
        if ($impuesto['idImpuesto'] == 34) { // IVA NO ALCANZADO
            $condicion_iva_id = 15; // IVA No Alcanzado
            break;
        }
        if ($impuesto['idImpuesto'] == 32) { // IVA SUJETO EXENTO
            $condicion_iva_id = 4; // IVA Sujeto Exento
            break;
        }
        if ($impuesto['idImpuesto'] == 33) { // IVA LIBERADO
            $condicion_iva_id = 10; // IVA Liberado – Ley N° 19.640
            break;
        }
    }
}
if (isset($persona['datosMonotributo']['impuesto'])) {
    foreach ($persona['datosMonotributo']['impuesto'] as $impuesto) {
        if ($impuesto['idImpuesto'] == 20) { // MONOTRIBUTO
            $condicion_iva_id = 6; // Responsable Monotributo
            break;
        }
    }
}

// Si no se encontró, asumir Consumidor Final
if (!$condicion_iva_id) {
    $condicion_iva_id = 5; // Consumidor Final
}

echo "Condición IVA receptor ID: " . $condicion_iva_id . "\n";

Este código cubre: Responsable Inscripto, Monotributo, IVA No Alcanzado, Sujeto Exento, IVA Liberado y Consumidor Final. Si necesitás mapear más casos, podés ampliar el array según la lista oficial de condiciones.

Sources:

mate
mate

@user dame el codigo php para los casos faltantes

RunLLM
RunLLM

Aquí tienes el código PHP ampliado para cubrir todos los casos posibles de condición frente al IVA, según la lista oficial de IDs y descripciones. El mapeo incluye: Responsable Inscripto, Monotributo, Monotributista Social, Trabajador Independiente Promovido, Sujeto Exento, Consumidor Final, Sujeto No Categorizado, Proveedor/Cliente del Exterior, IVA Liberado, IVA No Alcanzado.

require __DIR__ . '/vendor/autoload.php';

$afip = new Afip(['CUIT' => 20111111112]);
$cuit_receptor = 20111111113; // CUIT del receptor

// Consultar padrón
$persona = $afip->RegisterInscription->getPersona(['idPersona' => $cuit_receptor]);

// Mapeo de impuestos a condición IVA
$condicion_iva_id = null;

// IDs de condición IVA según la documentación oficial
$condiciones_iva = [
    1  => 'IVA Responsable Inscripto',
    6  => 'Responsable Monotributo',
    13 => 'Monotributista Social',
    16 => 'Monotributo Trabajador Independiente Promovido',
    4  => 'IVA Sujeto Exento',
    5  => 'Consumidor Final',
    7  => 'Sujeto No Categorizado',
    8  => 'Proveedor del Exterior',
    9  => 'Cliente del Exterior',
    10 => 'IVA Liberado – Ley N° 19.640',
    15 => 'IVA No Alcanzado'
];

// Analizar impuestos del padrón
if (isset($persona['datosRegimenGeneral']['impuesto'])) {
    foreach ($persona['datosRegimenGeneral']['impuesto'] as $impuesto) {
        switch ($impuesto['idImpuesto']) {
            case 30: // IVA
                $condicion_iva_id = 1; // Responsable Inscripto
                break 2;
            case 34: // IVA NO ALCANZADO
                $condicion_iva_id = 15;
                break 2;
            case 32: // IVA SUJETO EXENTO
                $condicion_iva_id = 4;
                break 2;
            case 33: // IVA LIBERADO
                $condicion_iva_id = 10;
                break 2;
        }
    }
}
if (isset($persona['datosMonotributo']['impuesto'])) {
    foreach ($persona['datosMonotributo']['impuesto'] as $impuesto) {
        switch ($impuesto['idImpuesto']) {
            case 20: // MONOTRIBUTO
                $condicion_iva_id = 6;
                break 2;
        }
    }
}

// Casos especiales por actividad o falta de impuestos
if (!$condicion_iva_id) {
    // Monotributista Social o Trabajador Independiente Promovido
    if (isset($persona['datosMonotributo']['categoriaMonotributo'])) {
            $condicion_iva_id = 13;
        } elseif (stripos($persona['datosMonotributo']['categoriaMonotributo'], 'promovido') !== false) {
            $condicion_iva_id = 16;
        }
    }
    // Proveedor o Cliente del Exterior
    if (isset($persona['datosGenerales']['tipoPersona'])) {
        if ($persona['datosGenerales']['tipoPersona'] == 'EXTRANJERO') {
            // Según el caso de uso, elegir 8 o 9
            $condicion_iva_id = 8; // Proveedor del Exterior
            // $condicion_iva_id = 9; // Cliente del Exterior
        }
    }
    // Si no se encontró nada, usar Sujeto No Categorizado o Consumidor Final
    if (!$condicion_iva_id) {
        $condicion_iva_id = 7; // Sujeto No Categorizado
    }
}

// Si sigue sin encontrarse, asumir Consumidor Final
if (!$condicion_iva_id) {
    $condicion_iva_id = 5;
}

echo "Condición IVA receptor ID: " . $condicion_iva_id . " (" . $condiciones_iva[$condicion_iva_id] . ")\n";

Este código cubre todos los casos de la tabla oficial y contempla situaciones especiales como monotributista social, trabajador promovido, sujetos del exterior y no categorizados.

Sources:

mate
mate

@user los web services se activan por cada certificado o por persona?

RunLLM
RunLLM

Los web services se activan por cada certificado, no por persona. Debés autorizar cada certificado para los web services que quieras usar, aunque pertenezcan al mismo CUIT, según la documentación oficial.

¿Querés el paso a paso para autorizar un web service a un certificado?

Sources:

mate
mate

@user si, decime el paso a paso con codigo php

RunLLM
RunLLM
  1. Crear el certificado: Usá Afip SDK para generar el certificado digital para el CUIT deseado.
require __DIR__ . '/vendor/autoload.php';
$afip = new Afip(['CUIT' => 20111111111]);
$username = '20111111111'; // CUIT administrador
$password = 'tu_clave_afip';
$alias = 'mi_certificado';
$res = $afip->CreateCert($username, $password, $alias);
file_put_contents('cert.crt', $res->cert);
file_put_contents('key.key', $res->key);
  1. Autorizar el web service para el certificado: Usá el método CreateWSAuth para autorizar el certificado en el web service (por ejemplo, 'wsfe' para factura electrónica).
$afip = new Afip(['CUIT' => 20111111111]);
$username = '20111111111'; // CUIT administrador
$password = 'tu_clave_afip';
$alias = 'mi_certificado';
$wsid = 'wsfe'; // ID del web service
$res = $afip->CreateWSAuth($username, $password, $alias, $wsid);
print_r($res);

Esto autoriza el web service para ese certificado, según la documentación oficial.

Sources:

mate
mate

@user este es el codigo para encontrar la condicion del iva receptor: function mapCondicionIVAReceptor($persona, $esProveedor = false) { $cond = 0;

// 1) Régimen general if (! $cond && ! empty($persona['datosRegimenGeneral']['impuesto'])) { foreach ($persona['datosRegimenGeneral']['impuesto'] as $impuesto) { switch ($impuesto['idImpuesto']) { case 30: $cond = 1; break 2; // Resp. Inscripto case 34: $cond = 15; break 2; // No Alcanzado case 32: $cond = 4; break 2; // Sujeto Exento case 33: $cond = 10; break 2; // Liberado } } }

// 2) Monotributo if (! $cond && ! empty($persona['datosMonotributo']['impuesto'])) { foreach ($persona['datosMonotributo']['impuesto'] as $impuesto) { if ($impuesto['idImpuesto'] == 20) { $cond = 6; // Responsable Monotributo break; } } }

// 3) Categorías especiales if (! $cond && ! empty($persona['datosMonotributo']['categoriaMonotributo'])) { $cat = $persona['datosMonotributo']['categoriaMonotributo']; if (stripos($cat, 'social') !== false) { $cond = 13; } elseif (stripos($cat, 'promovido') !== false) { $cond = 16; } }

// 4) Extranjero if ( ! $cond && ! empty($persona['datosGenerales']['tipoPersona']) && strtoupper($persona['datosGenerales']['tipoPersona']) === 'EXTRANJERO' ) { $cond = $esProveedor ? 8 : 9; }

// 5) Si sigue sin cond, categorizados if (! $cond) { $cond = 7; // Sujeto no categorizado } // 6) Consumidor Final fallback return $cond ?: 5; }

pero hay un problema con el sujeto no categorizado y el consumidor final, esta mal expresado, como podria manejarlo mejor? con ese codigo nunca seria consumidor final por ejemplo

RunLLM
RunLLM

Correcto, con ese código nunca retorna "Consumidor Final" (ID 5), porque siempre cae antes en "Sujeto No Categorizado" (ID 7) como fallback. Según la documentación oficial, "Consumidor Final" debe usarse solo si el CUIT no existe en padrón o no tiene datos impositivos válidos, y "Sujeto No Categorizado" es para CUITs válidos pero sin categoría impositiva clara.

Para mejorarlo, podés distinguir entre CUIT inexistente (o sin datos) y CUIT existente pero sin categoría, así:

function mapCondicionIVAReceptor($persona, $esProveedor = false)
{
  $cond = 0;

  // 1) Régimen general
  if (!empty($persona['datosRegimenGeneral']['impuesto'])) {
    foreach ($persona['datosRegimenGeneral']['impuesto'] as $impuesto) {
      switch ($impuesto['idImpuesto']) {
        case 30: return 1;  // Resp. Inscripto
        case 34: return 15; // No Alcanzado
        case 32: return 4;  // Sujeto Exento
        case 33: return 10; // Liberado
      }
    }
  }

  // 2) Monotributo
  if (!empty($persona['datosMonotributo']['impuesto'])) {
    foreach ($persona['datosMonotributo']['impuesto'] as $impuesto) {
      if ($impuesto['idImpuesto'] == 20) return 6; // Responsable Monotributo
    }
  }

  // 3) Categorías especiales
  if (!empty($persona['datosMonotributo']['categoriaMonotributo'])) {
    $cat = $persona['datosMonotributo']['categoriaMonotributo'];
    if (stripos($cat, 'social') !== false) return 13;
    if (stripos($cat, 'promovido') !== false) return 16;
  }

  // 4) Extranjero
  if (!empty($persona['datosGenerales']['tipoPersona']) && strtoupper($persona['datosGenerales']['tipoPersona']) === 'EXTRANJERO') {
    return $esProveedor ? 8 : 9;
  }

  // 5) Si el CUIT existe pero no tiene categoría, Sujeto No Categorizado
  if (!empty($persona['datosGenerales'])) {
    return 7;
  }

  // 6) Si el CUIT no existe o no hay datos, Consumidor Final
  return 5;
}

Así, solo retorna "Consumidor Final" si el CUIT no existe o no tiene datos, y "Sujeto No Categorizado" si el CUIT existe pero no tiene impuestos/categoría, como recomienda la guía oficial.

Sources:

mate
mate

@user este objeto que condicion iva tendria?

{"datosGenerales":{"apellido":"ZALAZAR","domicilioFiscal":{"codPostal":"1778","datoAdicional":"CHIRLO Y LA ANGUYA","descripcionProvincia":"BUENOS AIRES","direccion":"EL MARMELERO 1023 Piso:- Dpto:- S:- T:- M:-","idProvincia":1,"localidad":"CIUDAD EVITA","tipoDatoAdicional":"ENTRE LAS CALLES","tipoDomicilio":"FISCAL"},"esSucesion":"NO","estadoClave":"ACTIVO","idPersona":20348490800,"mesCierre":12,"nombre":"CARLOS FACUNDO","tipoClave":"CUIT","tipoPersona":"FISICA"},"metadata":{"fechaHora":"2025-07-17T19:35:51.469Z","servidor":"linux11b"}}

RunLLM
RunLLM

Ese objeto no tiene datos de impuestos ni de monotributo, solo datos generales. Según la lógica recomendada, corresponde asignar la condición "Sujeto No Categorizado" (ID 7), ya que el CUIT existe pero no tiene categoría impositiva clara (fuente).

¿Querés ver el ejemplo de código que determina esto automáticamente?

Sources:

mate
mate

@user hay algun lugar donde pueda chequear en internet si se trata de un sujeto no categorizado?

RunLLM
RunLLM

No existe una web pública oficial donde puedas consultar directamente si un CUIT es "Sujeto No Categorizado". Solo podés obtener esa información consultando el padrón de constancia de inscripción vía web service; si el CUIT existe pero no tiene impuestos ni categoría, se considera "Sujeto No Categorizado" (fuente).

¿Querés un ejemplo de cómo hacer esta consulta con Afip SDK?

Sources:

mate
mate

@user en definitiva, el codigo que armamos entonces funcionaria bien?

RunLLM
RunLLM

Sí, el código propuesto funcionaría correctamente: asigna "Consumidor Final" solo si el CUIT no existe o no tiene datos, y "Sujeto No Categorizado" si el CUIT existe pero no tiene impuestos ni categoría, tal como recomienda la documentación oficial.

¿Querés que revise algún caso particular o ejemplo de uso?

Sources:

mate
mate

@user entonces esta response si es para consumidor final?

{"errorConstancia":{"apellido":"FORTUNA MATEO","error":["La clave no registra Apellido y/o Nombre informados"],"idPersona":20452387965},"metadata":{"fechaHora":"2025-07-18T02:15:40.658Z","servidor":"linux11e"}}

RunLLM
RunLLM

Sí, esa response corresponde a "Consumidor Final" (ID 5), ya que el CUIT no tiene datos impositivos válidos y la consulta devuelve un error en los datos, según la documentación oficial.

¿Querés ver cómo manejar este caso en el código?

Sources:

mate
mate

@user entonces esa respuesta es consumidor final y el codigo funcionaria correctamente?

RunLLM
RunLLM

Sí, esa respuesta corresponde a "Consumidor Final" y el código funcionaría correctamente, ya que detecta la ausencia de datos impositivos y asigna el ID 5 según lo recomendado en la documentación oficial.

¿Querés un ejemplo de cómo capturar este caso en el código?

Sources:

mate
mate

@user me podrias decir por que sale este error: Error AFIP: {"status":"error","data":{"message":"No existe certificado con el alias spot en produccion. Primero debe crear el certificado.","statusCode":400}}

si justamente lo que estoy intentando hacer es crear el certificado? me salio bien con muchos, solo con este me sale el error

RunLLM
RunLLM

El error "No existe certificado con el alias spot en produccion. Primero debe crear el certificado." indica que estás intentando autorizar un web service o realizar una acción que requiere el certificado antes de que el certificado con alias "spot" haya sido efectivamente creado en producción. Es posible que estés llamando a la autorización o a otro método antes de finalizar correctamente la creación del certificado, o que haya un error de sincronización o permisos en la cuenta de AFIP utilizada.

Este problema puede ocurrir si nunca ingresaste al "Administrador de Certificados" en AFIP para aceptar la incorporación del módulo, lo cual es necesario la primera vez, según la documentación y experiencias de la comunidad.

¿Querés el paso a paso para asegurarte de que el certificado se crea correctamente y cómo verificarlo?

Sources:

mate
mate

@user entre en arca y si estan los certificados, pero la api me da error

RunLLM
RunLLM

Si los certificados aparecen en ARCA pero la API te da error diciendo que no existen, puede deberse a que el alias no coincide exactamente (mayúsculas/minúsculas, espacios, etc.) o a que estás usando el entorno incorrecto (producción vs. desarrollo). También puede ser un problema de propagación: a veces tarda unos minutos en estar disponible para la API después de crearlo en ARCA.

Verifica el alias y el entorno, y si el problema persiste, espera unos minutos y vuelve a intentar, tal como recomienda la documentación oficial.

Sources:

mate
mate

como se borran los certificados?

@user como se borran los certificados?

RunLLM
RunLLM

No se pueden borrar o revocar certificados directamente desde ARCA/AFIP; solo podés quitarles las autorizaciones a los web services para que dejen de funcionar. Esto se hace desde el administrador de relaciones de clave fiscal, donde podés dar de baja las relaciones existentes, según la experiencia de la comunidad.

¿Querés el paso a paso para quitar autorizaciones a un certificado?

Sources:

mate
mate

@user el tema es que cuando le paso el usuario y la contraseña, le paso el de una persona normal, pero los certificados son a nombre de otro cuit

RunLLM
RunLLM

Ese es el problema: el usuario y la contraseña deben corresponder al mismo CUIT para el que estás generando o gestionando el certificado. Si usás el usuario de una persona y el certificado es de otro CUIT (por ejemplo, de una empresa), la API de ARCA/AFIP no lo permite y genera errores, como se explica en la documentación oficial.

¿Querés el paso a paso para generar el certificado correctamente según el CUIT?

Sources:

mate
mate

@user donde tengo que ir en arca para habilitar web services

RunLLM
RunLLM

Debés ingresar a ARCA con clave fiscal, ir a "WSASS - Autogestión Certificados" y luego a "Crear autorización a servicio", donde seleccionás el certificado, el CUIT y el web service a habilitar. Finalmente, presionás "Crear autorización de acceso", según la guía oficial.

¿Querés el paso a paso con capturas de pantalla?

Sources:

mate
mate

dale

@user dale

RunLLM
RunLLM

¡Perfecto! Aquí tienes el paso a paso para habilitar un web service en ARCA (AFIP):

1. Ingresar a ARCA

  • Accedé a ARCA con tu clave fiscal.

2. Habilitar la aplicación “WSASS - Autogestión Certificados”

  • Si no la tenés en tu escritorio, agregala desde “Administrador de Relaciones de Clave Fiscal”.
  • Buscá: ARCA > Servicios interactivos > WSASS - Autogestión Certificados Homologación (para testing) o WSASS - Autogestión Certificados Producción (para producción).
  • Confirmá la adhesión.

3. Ingresar a “WSASS - Autogestión Certificados”

  • Desde el escritorio de ARCA, hacé clic en la aplicación.

4. Crear autorización a servicio

  • Seleccioná la opción “Crear autorización a servicio”.
  • En “Nombre simbólico del DN a autorizar”, elegí el certificado que querés autorizar.
  • En “CUIT representado”, ingresá el CUIT que va a usar el web service.
  • En “Servicio al que desea acceder”, seleccioná el web service (por ejemplo, “wsfe” para factura electrónica).
  • Hacé clic en “Crear autorización de acceso”.

5. Verificar la autorización

  • Ingresá en la sección “Autorizaciones” para confirmar que la autorización se creó correctamente.

Guía oficial y capturas:
Autorizar web service de testing
Autorizar web service de producción

¿Necesitás ayuda con algún paso en particular?

mate
mate

@user estoy dentro de servicios iteractivos y en ningun lugar esta el de produccion

RunLLM
RunLLM

Si no ves la opción de producción en "Servicios interactivos", primero debés habilitar la aplicación “Administración de Certificados Digitales” desde el "Administrador de Relaciones de Clave Fiscal". Andá a "Adherir servicio" y seleccioná ARCA > Servicios interactivos > Administración de Certificados Digitales, luego confirmá la adhesión. Así aparecerá la opción de producción en tu escritorio de ARCA, según la guía oficial.

¿Querés el paso a paso para este proceso?

Sources:

mate
mate

@user lo que tengo que habilitar es el web service de constancia de inscripcion, eso lo hago dentro de web services que parte?

RunLLM
RunLLM

Para habilitar el web service de constancia de inscripción, debés ingresar a "Administrador de Relaciones de Clave Fiscal", seleccionar "Nueva Relación", buscar en ARCA > Web Services y elegir "ws_sr_constancia_inscripcion" (Constancia de Inscripción). Luego, seleccionás el certificado y confirmás la autorización, según la guía oficial.

¿Querés el detalle de cada pantalla y campo a completar?

Sources:

mate
mate

@user por que sale este error?

error 10243: campo condición de iva receptor no es válido con el comprobante informado

RunLLM
RunLLM

El error 10243 indica que el valor de "Condición de IVA receptor" no es compatible con el tipo de comprobante que estás intentando emitir. Por ejemplo, ciertos comprobantes solo aceptan determinadas condiciones de IVA (como "Consumidor Final" para facturas tipo B/C y "Responsable Inscripto" para tipo A), según la documentación oficial.

Verificá que el campo CondicionIVAReceptorId coincida con el tipo de comprobante (A, B, C, etc.) que estás emitiendo y usá los IDs correctos para cada caso.

Sources:

mate
mate

@user o sea que si me equivoco de condicion iva receptor me van a alertar? me quedo tranquilo con eso?

RunLLM
RunLLM

Sí, si envías una condición de IVA del receptor incorrecta para el tipo de comprobante, el sistema te devolverá un error (como el 10243) y no autorizará la factura, según la documentación oficial.

Podés quedarte tranquilo: el web service valida la coherencia entre el comprobante y la condición de IVA, y te alertará si hay un error.

Sources:

mate
mate

@user te paso un objeto que me devolvio afip, me decis que condicion de iva tiene?

{"cuit":30711472629,"condicion_iva_id":6,"padron":{"datosGenerales":{"apellido":"PINO","domicilioFiscal":{"codPostal":"2000","descripcionProvincia":"SANTA FE","direccion":"MORENO 1346 Piso:2 Dpto:C","idProvincia":12,"localidad":"ROSARIO SUD","tipoDomicilio":"FISCAL"},"esSucesion":"NO","estadoClave":"ACTIVO","idPersona":27132863216,"mesCierre":12,"nombre":"MARIA ADRIANA","tipoClave":"CUIT","tipoPersona":"FISICA"},"datosMonotributo":{"actividad":[{"descripcionActividad":"JUBILADO","idActividad":7,"nomenclador":883,"orden":2,"periodo":201704},{"descripcionActividad":"SERVICIOS INMOBILIARIOS REALIZADOS POR CUENTA PROPIA, CON BIENES URBANOS PROPIOS O ARRENDADOS N.C.P.","idActividad":681098,"nomenclador":883,"orden":1,"periodo":201704}],"actividadMonotributista":{"descripcionActividad":"SERVICIOS INMOBILIARIOS REALIZADOS POR CUENTA PROPIA, CON BIENES URBANOS PROPIOS O ARRENDADOS N.C.P.","idActividad":681098,"nomenclador":883,"orden":1,"periodo":201704},"categoriaMonotributo":{"descripcionCategoria":"A LOCACIONES DE SERVICIOS","idCategoria":8,"idImpuesto":20,"periodo":202108},"impuesto":[{"descripcionImpuesto":"MONOTRIBUTO","estadoImpuesto":"AC","idImpuesto":20,"motivo":"INSCRIPCI\u00d3N NO TRAMITADA EN AGENCIA","periodo":201704}]},"metadata":{"fechaHora":"2025-08-08T18:48:21.177Z","servidor":"linux11d"}}}

RunLLM
RunLLM

La condición de IVA de ese objeto es "Responsable Monotributo" (ID 6), ya que el campo "condicion_iva_id":6 y en el padrón figura el impuesto con "idImpuesto":20, que corresponde a monotributo, según la documentación oficial.

¿Querés ver cómo se determina esto en el código?

Sources:

mate
mate

@user le quise hacer a ese cuit una factura b y me salio el mensaje de que la condicion de iva no corresponde para el tipo de comprobante, pero la hice desde arca con ese cuit poniendo consumidor final y salio bien, que hago?

RunLLM
RunLLM

Si el CUIT es "Responsable Monotributo" (ID 6), no corresponde emitirle una factura B como "Consumidor Final" (ID 5); debe figurar como monotributista. El web service rechaza la combinación incorrecta, pero ARCA puede permitirlo manualmente, aunque no es lo correcto según la normativa (fuente).

Debés emitir la factura B con la condición de IVA real del receptor (ID 6 para monotributo). Si el sistema rechaza la operación, es porque la validación es más estricta que la carga manual en ARCA, y eso es lo esperado.

Sources:

mate
mate

@user y que factura o comprobante le puedo hacer a ese cuit?

RunLLM
RunLLM

A un CUIT "Responsable Monotributo" (ID 6) debés emitirle una factura B, indicando en el campo CondicionIVAReceptorId el valor 6 (monotributo), según la documentación oficial.

¿Querés ver un ejemplo de cómo armar el comprobante correctamente?

Sources:

mate
mate

@user esta es la funcion php que tengo para obtener la condicion de iva receptor por el cuit: function fetchReceptorAFIP($afip, $cuitReceptor) { $persona = $afip->RegisterInscriptionProof->GetTaxpayerDetails($cuitReceptor); return json_decode(json_encode($persona), true); }

como hago para usar el FEPARAMgetcondicionivareceptor?

asi lo uso en el codigo: function mapCondicionIVAReceptor($persona, $esProveedor = false) { $cond = 0;

// 1) Régimen general if (! $cond && ! empty($persona['datosRegimenGeneral']['impuesto'])) { foreach ($persona['datosRegimenGeneral']['impuesto'] as $impuesto) { switch ($impuesto['idImpuesto']) { case 30: return 1; // Resp. Inscripto case 34: return 15; // No Alcanzado case 32: return 4; // Sujeto Exento case 33: return 10; // Liberado } } }

// 2) Monotributo if (! $cond && ! empty($persona['datosMonotributo']['impuesto'])) { foreach ($persona['datosMonotributo']['impuesto'] as $impuesto) { if ($impuesto['idImpuesto'] == 20) { return 6; // Responsable Monotributo } } }

// 3) Categorías especiales if (! $cond && ! empty($persona['datosMonotributo']['categoriaMonotributo'])) { $cat = $persona['datosMonotributo']['categoriaMonotributo']; if (stripos($cat, 'social') !== false) { return 13; } elseif (stripos($cat, 'promovido') !== false) { return 16; } }

// 4) Extranjero if ( ! $cond && ! empty($persona['datosGenerales']['tipoPersona']) && strtoupper($persona['datosGenerales']['tipoPersona']) === 'EXTRANJERO' ) { return $esProveedor ? 8 : 9; }

if (!empty($persona['datosGenerales'])) { return 7; }

// 6) Consumidor Final fallback return 5; }

RunLLM
RunLLM

El método FEParamGetCondicionIvaReceptor no sirve para obtener la condición de IVA de un CUIT específico, sino para obtener la lista de posibles condiciones de IVA y sus IDs, que luego usás en tu mapeo. Tu función mapCondicionIVAReceptor está bien: toma los datos del padrón y los traduce al ID correcto según la lógica recomendada (fuente).

Si querés usar FEParamGetCondicionIvaReceptor, sería solo para obtener la lista de IDs y descripciones, por ejemplo:

$tax_types = $afip->ElectronicBilling->ExecuteRequest('FEParamGetCondicionIvaReceptor');

Pero no te devuelve la condición de un CUIT puntual. Para eso, seguí usando tu función con los datos del padrón.

¿Querés ver cómo mostrar la lista de condiciones con FEParamGetCondicionIvaReceptor?

Sources:

mate
mate

@user pero en el codigo que te pase decia condicion_iva_receptor = 6, eso es lo que le paso en el cuerpo y me sigue saliendo el mensaje de que no corresponde la condicion de iva para el tipo de comprobante, es una factura B

RunLLM
RunLLM

Si estás enviando CondicionIVAReceptorId = 6 (Responsable Monotributo) en una factura B y recibís el error de que la condición de IVA no corresponde, puede deberse a que el tipo de documento (DocTipo) o algún otro campo no coincide con lo esperado para ese tipo de receptor. Para monotributistas, el tipo de documento debe ser CUIT (80), no Consumidor Final (99), según la documentación oficial.

Verificá que estés enviando DocTipo = 80 y el número de CUIT correcto junto con CondicionIVAReceptorId = 6 en la factura B.

Sources:

mate
mate

@user que esta mal aca, por que no sale esta factura?

{"CantReg":1,"PtoVta":"6","CbteTipo":"6","Concepto":"2","DocTipo":"80","DocNro":"27132863216","CbteDesde":1230,"CbteHasta":1230,"CbteFch":20250808,"FchServDesde":20250808,"FchServHasta":20250808,"FchVtoPago":20250808,"ImpTotal":1,"ImpTotConc":0,"ImpNeto":0.83,"ImpOpEx":0,"ImpIVA":0.17,"ImpTrib":0,"MonId":"PES","MonCotiz":1,"CondicionIVAReceptorId":6,"Iva":[{"Id":5,"BaseImp":0.83,"Importe":0.17}]}

RunLLM
RunLLM

El error más probable es que el importe neto (ImpNeto) y el importe de IVA (ImpIVA) no suman exactamente el importe total (ImpTotal). En facturas electrónicas, ImpTotal debe ser igual a la suma de ImpNeto + ImpIVA + otros campos, y los decimales pueden causar rechazo si no coinciden exactamente, según la documentación oficial.

¿Querés que te muestre cómo ajustar los importes para que la suma sea exacta?

Sources:

mate
mate

@user pero si sale, el unico tema es la condicion de iva receptor, cuando ejecuto esa factura el erorr que tengo es de la condicion de iva receptor que no corresponde con el tipo de comprobante

RunLLM
RunLLM

Si el error es solo por la condición de IVA del receptor, asegurate de que el tipo de comprobante (Factura B, CbteTipo: 6) y la condición de IVA (CondicionIVAReceptorId: 6, Responsable Monotributo) sean compatibles. Para Factura B, podés usar "Responsable Monotributo" solo si el receptor realmente es monotributista y el tipo de documento es CUIT (DocTipo: 80), como indica la documentación oficial.

Si todo eso está correcto y sigue el error, puede ser que el padrón de AFIP/ARCA tenga desactualizada la condición de IVA del receptor, o que el CUIT esté mal ingresado. Verificá la condición de IVA del CUIT en el padrón antes de emitir la factura.

Sources:

mate
mate

@user pero te estoy diciendo que le estoy mandando esto: {"CantReg":1,"PtoVta":"6","CbteTipo":"6","Concepto":"2","DocTipo":"80","DocNro":"27132863216","CbteDesde":1230,"CbteHasta":1230,"CbteFch":20250808,"FchServDesde":20250808,"FchServHasta":20250808,"FchVtoPago":20250808,"ImpTotal":1,"ImpTotConc":0,"ImpNeto":0.83,"ImpOpEx":0,"ImpIVA":0.17,"ImpTrib":0,"MonId":"PES","MonCotiz":1,"CondicionIVAReceptorId":6,"Iva":[{"Id":5,"BaseImp":0.83,"Importe":0.17}]}

RunLLM
RunLLM

Mi entendimiento es que, según la documentación, si estás enviando una factura B (CbteTipo: 6) a un CUIT monotributista (CondicionIVAReceptorId: 6) con tipo de documento CUIT (DocTipo: 80), debería ser válido. Si el error persiste, es probable que el padrón de AFIP/ARCA no reconozca al CUIT como monotributista en ese momento, o que haya una inconsistencia temporal en el padrón, lo cual puede ocurrir y genera el rechazo por condición de IVA (fuente).

Te sugiero consultar el padrón en tiempo real para ese CUIT y verificar que efectivamente figura como monotributista. Si el padrón lo muestra correctamente y el error sigue, puede ser un problema de sincronización o cache en AFIP/ARCA.

Sources:

mate
mate

@user como hago para consultar el padron en tiempo real

RunLLM
RunLLM

Para consultar el padrón en tiempo real, usá el método GetTaxpayerDetails de la clase RegisterInscriptionProof en tu SDK (por ejemplo, $afip->RegisterInscriptionProof->GetTaxpayerDetails($cuit) en PHP). Esto te devuelve los datos actualizados del contribuyente, incluyendo la condición frente al IVA, según la guía oficial.

¿Querés un ejemplo de código para PHP, Python u otro lenguaje?

Sources:

mate
mate

@user puse en ese metodo el cuit de la persona a la que le quiero hacer la factura y me dio esto:

{"cuit":27132863216,"condicion_iva_id":6,"padron":{"datosGenerales":{"apellido":"PINO","domicilioFiscal":{"codPostal":"2000","descripcionProvincia":"SANTA FE","direccion":"MORENO 1346 Piso:2 Dpto:C","idProvincia":12,"localidad":"ROSARIO SUD","tipoDomicilio":"FISCAL"},"esSucesion":"NO","estadoClave":"ACTIVO","idPersona":27132863216,"mesCierre":12,"nombre":"MARIA ADRIANA","tipoClave":"CUIT","tipoPersona":"FISICA"},"datosMonotributo":{"actividad":[{"descripcionActividad":"JUBILADO","idActividad":7,"nomenclador":883,"orden":2,"periodo":201704},{"descripcionActividad":"SERVICIOS INMOBILIARIOS REALIZADOS POR CUENTA PROPIA, CON BIENES URBANOS PROPIOS O ARRENDADOS N.C.P.","idActividad":681098,"nomenclador":883,"orden":1,"periodo":201704}],"actividadMonotributista":{"descripcionActividad":"SERVICIOS INMOBILIARIOS REALIZADOS POR CUENTA PROPIA, CON BIENES URBANOS PROPIOS O ARRENDADOS N.C.P.","idActividad":681098,"nomenclador":883,"orden":1,"periodo":201704},"categoriaMonotributo":{"descripcionCategoria":"A LOCACIONES DE SERVICIOS","idCategoria":8,"idImpuesto":20,"periodo":202108},"impuesto":[{"descripcionImpuesto":"MONOTRIBUTO","estadoImpuesto":"AC","idImpuesto":20,"motivo":"INSCRIPCI\u00d3N NO TRAMITADA EN AGENCIA","periodo":201704}]},"metadata":{"fechaHora":"2025-08-08T18:48:21.177Z","servidor":"linux11d"}}}

RunLLM
RunLLM

Ese resultado confirma que el CUIT 27132863216 es "Responsable Monotributo" (condicion_iva_id: 6 y "idImpuesto": 20 en el padrón), por lo que deberías poder emitirle una factura B con CondicionIVAReceptorId: 6, según la guía oficial.

Si el web service sigue rechazando la factura por condición de IVA, el problema no está en los datos del padrón, sino posiblemente en la configuración del comprobante o una validación interna de AFIP/ARCA.

Sources:

mate
mate

@user no tiene nada que ver eso que dice "inscripcion no tramitada en agencia"?

RunLLM
RunLLM

Parece que el mensaje "INSCRIPCIÓN NO TRAMITADA EN AGENCIA" en el campo motivo no afecta la condición de IVA para emitir la factura, siempre que el impuesto esté activo (estadoImpuesto: "AC") y figure como monotributista (idImpuesto: 20), según la guía oficial.

¿Querés más detalle sobre el significado de ese campo y su impacto en la facturación?

Sources:

mate
mate

@user no hay nada en esta response que afecte a la hora de hacerle una factura b? en arca le hice la factura b poniendo que es consumidor final en vez de monotributista y salio bien.

{"cuit":27132863216,"condicion_iva_id":6,"padron":{"datosGenerales":{"apellido":"PINO","domicilioFiscal":{"codPostal":"2000","descripcionProvincia":"SANTA FE","direccion":"MORENO 1346 Piso:2 Dpto:C","idProvincia":12,"localidad":"ROSARIO SUD","tipoDomicilio":"FISCAL"},"esSucesion":"NO","estadoClave":"ACTIVO","idPersona":27132863216,"mesCierre":12,"nombre":"MARIA ADRIANA","tipoClave":"CUIT","tipoPersona":"FISICA"},"datosMonotributo":{"actividad":[{"descripcionActividad":"JUBILADO","idActividad":7,"nomenclador":883,"orden":2,"periodo":201704},{"descripcionActividad":"SERVICIOS INMOBILIARIOS REALIZADOS POR CUENTA PROPIA, CON BIENES URBANOS PROPIOS O ARRENDADOS N.C.P.","idActividad":681098,"nomenclador":883,"orden":1,"periodo":201704}],"actividadMonotributista":{"descripcionActividad":"SERVICIOS INMOBILIARIOS REALIZADOS POR CUENTA PROPIA, CON BIENES URBANOS PROPIOS O ARRENDADOS N.C.P.","idActividad":681098,"nomenclador":883,"orden":1,"periodo":201704},"categoriaMonotributo":{"descripcionCategoria":"A LOCACIONES DE SERVICIOS","idCategoria":8,"idImpuesto":20,"periodo":202108},"impuesto":[{"descripcionImpuesto":"MONOTRIBUTO","estadoImpuesto":"AC","idImpuesto":20,"motivo":"INSCRIPCI\u00d3N NO TRAMITADA EN AGENCIA","periodo":201704}]},"metadata":{"fechaHora":"2025-08-08T18:48:21.177Z","servidor":"linux11d"}}}

RunLLM
RunLLM

No, en esa response no hay nada que impida emitirle una factura B; el CUIT figura como monotributista activo (condicion_iva_id: 6, estadoImpuesto: "AC", idImpuesto: 20). Sin embargo, según la normativa y la validación del web service, debés indicar la condición real del receptor (monotributista) y no "Consumidor Final", aunque ARCA manualmente lo permita (fuente).

Emitir la factura como "Consumidor Final" es un atajo que puede funcionar en la web de ARCA, pero no es correcto ni aceptado por el web service, que exige coherencia entre el CUIT y la condición de IVA.

Sources:

mate
mate

@user que condicion frente al iva es este?

{"cuit":27344165764,"condicion_iva_id":6,"padron":{"datosGenerales":{"apellido":"SANCHEZ","domicilioFiscal":{"codPostal":"1614","descripcionProvincia":"BUENOS AIRES","direccion":"EVA PERON 3820","idProvincia":1,"localidad":"VILLA DE MAYO","tipoDomicilio":"FISCAL"},"esSucesion":"NO","estadoClave":"ACTIVO","idPersona":27344165764,"mesCierre":12,"nombre":"MARIA FLORENCIA","tipoClave":"CUIT","tipoPersona":"FISICA"},"datosMonotributo":{"actividad":[{"descripcionActividad":"ACTIVIDADES PROFESIONALES, CIENT\u00cdFICAS Y T\u00c9CNICAS N.C.P.","idActividad":749009,"nomenclador":883,"orden":1,"periodo":201804}],"actividadMonotributista":{"descripcionActividad":"ACTIVIDADES PROFESIONALES, CIENT\u00cdFICAS Y T\u00c9CNICAS N.C.P.","idActividad":749009,"nomenclador":883,"orden":1,"periodo":201804},"categoriaMonotributo":{"descripcionCategoria":"A LOCACIONES DE SERVICIOS","idCategoria":8,"idImpuesto":20,"periodo":202408},"impuesto":[{"descripcionImpuesto":"MONOTRIBUTO","estadoImpuesto":"AC","idImpuesto":20,"motivo":"INSCRIPCI\u00d3N NO TRAMITADA EN AGENCIA","periodo":201804}]},"datosRegimenGeneral":{"actividad":[{"descripcionActividad":"ACTIVIDADES PROFESIONALES, CIENT\u00cdFICAS Y T\u00c9CNICAS N.C.P.","idActividad":749009,"nomenclador":883,"orden":1,"periodo":201804}],"impuesto":[{"descripcionImpuesto":"CONTRIBUCION MUNICIPAL ARBA","estadoImpuesto":"NA","idImpuesto":5096,"motivo":"JURISDICCI\u00d3N NO ADHERIDA","periodo":202109},{"descripcionImpuesto":"REG. SIMPLIFICADO IIBB ARBA","estadoImpuesto":"AC","idImpuesto":5095,"motivo":"PRESENTACI\u00d3N ESPONT\u00c1NEA","periodo":202302}]},"metadata":{"fechaHora":"2025-08-08T19:23:47.351Z","servidor":"linux11"}}}

RunLLM
RunLLM

La condición frente al IVA de ese CUIT es "Responsable Monotributo" (ID 6), ya que "condicion_iva_id":6 y en el padrón figura el impuesto "MONOTRIBUTO" activo ("estadoImpuesto":"AC", "idImpuesto":20), según la guía oficial.

¿Querés el ejemplo de cómo mapearlo en código?

Sources:

mate
mate

@user no tiene nada que ver el monto? o sea determinado monto tengo que mandar el documento en 0 o algo por el estilo? porque me esta pasando en todos los casos que el receptor de la factura me dice RESPONSABLE MONOTRIBUTO le mando condicion_iva_receptor en 6 y me tira el error de la condicion de iva receptor no es valida para el tipo de comprobante, no habra algo en comun que estoy haciendo mal?

RunLLM
RunLLM

El monto solo afecta si el receptor es "Consumidor Final" (ID 5): si el importe supera cierto límite, debés informar el documento real, no 0. Pero para "Responsable Monotributo" (ID 6), siempre debés enviar el tipo de documento CUIT (80) y el número de CUIT real, sin importar el monto, según la documentación oficial.

Si en todos los casos te rechaza con "Condición de IVA receptor no es válida", revisá que:

  • El campo DocTipo sea 80 (CUIT).
  • El campo DocNro sea el CUIT real del receptor.
  • El campo CondicionIVAReceptorId sea 6.
  • El comprobante sea tipo B (CbteTipo: 6).

¿Querés que te ayude a revisar un ejemplo de tu JSON para ver si hay un error de formato?

Sources:

mate
mate

@user dame el codigo php para listar las condiciones de iva receptor y mostrarlas

RunLLM
RunLLM

Podés listar las condiciones de IVA receptor usando el método FEParamGetCondicionIvaReceptor así:

$tax_types = $afip->ElectronicBilling->ExecuteRequest('FEParamGetCondicionIvaReceptor');
foreach ($tax_types as $condicion) {
    echo $condicion['Id'] . ' - ' . $condicion['Desc'] . "<br>";
}

Esto te mostrará el ID y la descripción de cada condición de IVA disponible, según la documentación oficial.

Sources:

Mauro
Mauro

Hola !! Tuve el mismo problema. Lo resolvi agregando el servicio "Administración de Certificados Digitales" al CUIT correspondiente dentro de la pagina de ARCA. Saludos 🙌