Condicin de IVA en facturas

RunLLM
RunLLM

Para saber la condición de IVA del receptor, debés consultar el padrón de constancia de inscripción de AFIP, que devuelve los impuestos a los que está inscripto el CUIT. Según el impuesto, podés determinar la condición de IVA (por ejemplo, si tiene "IVA" es Responsable Inscripto, si tiene "MONOTRIBUTO" es Monotributista, etc.) y luego asignar el ID correspondiente al campo CondicionIVAReceptorId en el cuerpo de la factura. Los IDs válidos están listados en la documentación y se obtienen con el método FEParamGetCondicionIvaReceptor.

El web service de padrón no devuelve directamente el ID, por lo que debés mapear el impuesto a la condición e ID correspondiente antes de enviar la factura. Ejemplo de consulta y mapeo en la documentación oficial: Obtener condición frente al IVA de un CUIT vía web service y Solución a error 10242.

¿Te gustaría ver un ejemplo de código para este proceso?

Sources:

mate
mate

@user vos me podrias proporcionar el codigo php que cubra exactamente todos los casos de iva?

RunLLM
RunLLM

Claro. Para cubrir todos los casos, primero consultá el padrón de AFIP para obtener los impuestos del CUIT y luego mapeá esos impuestos a los IDs de condición de IVA requeridos por el campo CondicionIVAReceptorId. No existe un endpoint que devuelva el ID directamente, por lo que el mapeo debe ser manual según la documentación oficial.

Aquí tienes un ejemplo de código PHP que realiza la consulta y el mapeo, siguiendo la guía oficial:

// Consultar padrón de AFIP para obtener los impuestos del CUIT
$padron = $afip->RegisterInscription->GetTaxpayerDetails($cuit_receptor);

// Inicializar el ID de condición de IVA
$condicion_iva_id = null;

// Mapeo manual según los impuestos devueltos
if (isset($padron['datosRegimenGeneral']['impuesto'])) {
    foreach ($padron['datosRegimenGeneral']['impuesto'] as $impuesto) {
        if ($impuesto['descripcionImpuesto'] == 'IVA') {
            $condicion_iva_id = 1; // Responsable Inscripto
        }
        if ($impuesto['descripcionImpuesto'] == 'IVA NO ALCANZADO') {
            $condicion_iva_id = 15; // IVA No Alcanzado
        }
        // Agregar otros casos según corresponda
    }
}
if (isset($padron['datosMonotributo']['impuesto'])) {
    foreach ($padron['datosMonotributo']['impuesto'] as $impuesto) {
        if ($impuesto['descripcionImpuesto'] == 'MONOTRIBUTO') {
            $condicion_iva_id = 6; // Responsable Monotributo
        }
        if ($impuesto['descripcionImpuesto'] == 'MONOTRIBUTO SOCIAL') {
            $condicion_iva_id = 13; // Monotributista Social
        }
        if ($impuesto['descripcionImpuesto'] == 'MONOTRIBUTO TRABAJADOR INDEPENDIENTE PROMOVIDO') {
            $condicion_iva_id = 16; // Monotributo Trabajador Independiente Promovido
        }
        // Agregar otros casos según corresponda
    }
}
// Si no se encuentra, asumir Consumidor Final (5) o manejar según tu lógica
if ($condicion_iva_id === null) {
    $condicion_iva_id = 5; // Consumidor Final
}

// Usar $condicion_iva_id en el campo CondicionIVAReceptorId al crear la factura
$data = array(
    // ... otros campos ...
    'CondicionIVAReceptorId' => $condicion_iva_id,
    // ... otros campos ...
);

Este ejemplo cubre los casos principales. Para más detalles y la lista completa de IDs, revisá la documentación: Obtener condición frente al IVA de un CUIT vía web service y Solución a error 10242.

¿Querés que te explique cómo ampliar el mapeo para todos los casos posibles?

Sources:

mate
mate

@user dame un codigo que abarque todas las condiciones de iva y que devuelva la respuesta. lo quiero probar desde la consola. le mando un cuit y que en la consola devuelva el objeto completo

RunLLM
RunLLM

Mi entendimiento es que podés lograr esto consultando el padrón de inscripción con Afip SDK, mapeando todos los posibles impuestos a los IDs de condición de IVA, y mostrando el resultado completo en consola. El siguiente ejemplo en PHP cubre todas las condiciones documentadas y devuelve el objeto completo:

<?php
include 'ruta/a/src/Afip.php';

$cuit_receptor = $argv[1]; // Pasar el CUIT como argumento de consola
$afip = new Afip(['CUIT' => 20409378472]); // CUIT de testing

$padron = $afip->RegisterInscriptionProof->GetTaxpayerDetails($cuit_receptor);

function obtenerCondicionIVA($padron) {
    $map = [
        'IVA' => 1,
        'MONOTRIBUTO' => 6,
        'MONOTRIBUTO SOCIAL' => 13,
        'MONOTRIBUTO TRABAJADOR INDEPENDIENTE PROMOVIDO' => 16,
        'IVA SUJETO EXENTO' => 4,
        'CONSUMIDOR FINAL' => 5,
        'SUJETO NO CATEGORIZADO' => 7,
        'PROVEEDOR DEL EXTERIOR' => 8,
        'CLIENTE DEL EXTERIOR' => 9,
        'IVA LIBERADO – LEY N° 19.640' => 10,
        'IVA NO ALCANZADO' => 15
    ];
    // Buscar en datosRegimenGeneral
    if (isset($padron['datosRegimenGeneral']['impuesto'])) {
        foreach ($padron['datosRegimenGeneral']['impuesto'] as $imp) {
            if (isset($map[$imp['descripcionImpuesto']])) {
                return $map[$imp['descripcionImpuesto']];
            }
        }
    }
    // Buscar en datosMonotributo
    if (isset($padron['datosMonotributo']['impuesto'])) {
        foreach ($padron['datosMonotributo']['impuesto'] as $imp) {
            if (isset($map[$imp['descripcionImpuesto']])) {
                return $map[$imp['descripcionImpuesto']];
            }
        }
    }
    // Si no se encuentra, asumir Consumidor Final
    return 5;
}

$condicion_iva_id = obtenerCondicionIVA($padron);

$resultado = [
    'cuit' => $cuit_receptor,
    'condicion_iva_id' => $condicion_iva_id,
    'padron' => $padron
];

print_r($resultado);
?>

Ejecutá desde consola:

php tu_script.php 33693450239

Esto te mostrará el objeto completo con el CUIT, el ID de condición de IVA y todos los datos del padrón.
Más detalles y mapeos en: Obtener condición frente al IVA de un CUIT vía web service y Solución a error 10242.

Sources:

mate
mate

@user que significa este mensaje?

Este token no le permite actuar en representacion de la CUIT 27243968149

RunLLM
RunLLM

Ese mensaje significa que el token de autorización que estás usando no tiene permisos para operar en representación del CUIT 27243968149. Esto suele ocurrir si el token fue generado para otro CUIT o si no se realizó correctamente la delegación/autorización del web service para ese CUIT en AFIP/ARCA.

Debés asegurarte de que el token se haya generado específicamente para el CUIT que querés representar y que la delegación/autorización esté correctamente configurada. Más información en la documentación oficial: Solución a error de representación de CUIT.

Sources:

mate
mate

@user se soluciona desde arca esto?

RunLLM
RunLLM

Sí, la solución se gestiona desde ARCA/AFIP. Debés asegurarte de que la delegación y autorización del web service estén correctamente configuradas para el CUIT que querés representar, aceptando la delegación y autorizando el servicio desde el administrador de relaciones de AFIP/ARCA.

Si el problema persiste, puede ser necesario forzar la solicitud de un nuevo Token Authorization (TA) luego de completar la delegación. Más detalles en la guía oficial: Solución a error de representación de CUIT.

Sources:

mate
mate

@user yo soy una empresa con el cuit 123, y le quiero hacer una factura a una persona con un cuit 456, la condicion de iva receptor es del cuit 456 o 123?

RunLLM
RunLLM

La condición de IVA del receptor corresponde al CUIT 456, es decir, al destinatario de la factura. Debés informar en el campo CondicionIVAReceptorId la condición de IVA del cliente (CUIT 456), no la tuya.

Esto es obligatorio según la normativa y la documentación oficial: Solución a error 10242.

Sources:

mate
mate

@user como hago para hacer una factura con iva no gravado, y otra con iva exento

RunLLM
RunLLM

Para hacer una factura con IVA no gravado, debés asignar el importe correspondiente en el campo ImpTotConc (importe neto no gravado) y dejar en cero los campos de IVA. Para una factura con IVA exento, usá el campo ImpOpEx (importe exento de IVA) y también dejá en cero los campos de IVA. En ambos casos, el campo CondicionIVAReceptorId debe reflejar la condición de IVA del receptor.

Ejemplo para IVA no gravado:

$data = array(
    // ...otros campos...
    'ImpTotConc' => 100, // Importe no gravado
    'ImpNeto' => 0,
    'ImpIVA' => 0,
    'ImpOpEx' => 0,
    // ...otros campos...
);

Ejemplo para IVA exento:

$data = array(
    // ...otros campos...
    'ImpOpEx' => 100, // Importe exento
    'ImpNeto' => 0,
    'ImpIVA' => 0,
    'ImpTotConc' => 0,
    // ...otros campos...
);

Más detalles en la documentación: Factura A.

Sources:

mate
mate

y el imp total como debe ser? hace de cuenta que te llega un array con el detalle y un monto por cada detalle, te llegan 3. 1 es exento, y los otros 2 no gravados, como seria el array en ese caso?

@user y el imp total como debe ser? hace de cuenta que te llega un array con el detalle y un monto por cada detalle, te llegan 3. 1 es exento, y los otros 2 no gravados, como seria el array en ese caso?

RunLLM
RunLLM

El campo ImpTotal debe ser la suma de todos los importes: exentos (ImpOpEx) y no gravados (ImpTotConc). Si recibís tres montos, uno exento y dos no gravados, el array debe reflejar esos valores y el total debe ser la suma de los tres.

Ejemplo:

$exento = 100;
$no_gravado1 = 200;
$no_gravado2 = 300;

$data = array(
    // ...otros campos...
    'ImpOpEx' => $exento, // Importe exento
    'ImpTotConc' => $no_gravado1 + $no_gravado2, // Suma de no gravados
    'ImpNeto' => 0,
    'ImpIVA' => 0,
    'ImpTotal' => $exento + $no_gravado1 + $no_gravado2,
    // ...otros campos...
);

Más detalles en la documentación: Factura A.

Sources:

mate
mate

@user a partir de cuando arca rechazara los comprobantes que no tengan la condicion de iva receptor?

RunLLM
RunLLM

A partir del 1 de julio de 2025, ARCA rechazará los comprobantes electrónicos que no incluyan el campo "Condición de IVA del receptor" (CondicionIVAReceptorId). Hasta el 30 de junio de 2025 inclusive, el dato es opcional y no excluyente.

Esto está confirmado en la documentación oficial y mensajes del servicio: Solución a error 10242.

Sources:

mate
mate

@user seguro? yo no lo mando y me figura todo bien

RunLLM
RunLLM

Sí, hasta el 30 de junio de 2025 inclusive, ARCA permite emitir comprobantes sin el campo "Condición de IVA del receptor" y no los rechaza; el campo es opcional hasta esa fecha. A partir del 1 de julio de 2025, será obligatorio y los comprobantes sin ese dato serán rechazados.

Esto está documentado en la normativa y en los mensajes de respuesta del web service: Solución a error 10242.

Sources: