armandolazarte / afip-sdk
SDK moderno para servicios web de AFIP - Argentina
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/armandolazarte/afip-sdk
Requires
- php: ^8.2
- ext-openssl: *
- ext-simplexml: *
- ext-soap: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.87.1
- mockery/mockery: ^1.6.12
- pestphp/pest: ^4.0.4
- phpstan/phpstan: ^2.1.22
- rector/rector: ^2.1.4
README
SDK moderno y completamente refactorizado para interactuar con los servicios web de AFIP (Argentina) usando PHP 8.2+.
🚀 Características
- ✅ PHP 8.2+ con tipos estrictos
- ✅ Clases readonly e inmutables
- ✅ ComprobanteBuilder con API fluida
- ✅ AfipConfiguracionBuilder con API fluida
- ✅ Manejo robusto de excepciones
- ✅ Nombres en español (métodos, variables, constantes)
- ✅ PSR-4 autoloading
- ✅ Configuración por objetos
- ✅ Interfaces fluidas y fáciles de usar
📦 Instalación
composer require armandolazarte/afip-sdk
🏗️ Estructura del Proyecto
src/
├── Afip.php # Clase principal
├── ServicioWebAfip.php # Clase base para servicios
├── Configuracion/
│ └── AfipConfiguracion.php # Configuración del SDK
├── Autenticacion/
│ └── TokenAutorizacion.php # Manejo de tokens
├── Excepciones/
│ ├── AfipExcepcion.php # Excepción base
│ ├── CertificadoExcepcion.php # Errores de certificados
│ ├── ConfiguracionExcepcion.php # Errores de configuración
│ ├── FirmaDigitalExcepcion.php # Errores de firma digital
│ ├── NegocioExcepcion.php # Errores de lógica AFIP
│ ├── ServicioExcepcion.php # Errores de servicios
│ ├── SoapExcepcion.php # Errores de comunicación SOAP
│ ├── TokenExcepcion.php # Errores de autenticación
│ └── WsdlExcepcion.php # Errores de WSDL
├── Recursos/ # 📦 WSDL del SDK (automático)
│ ├── wsaa.wsdl
│ ├── wsfe.wsdl
│ └── ...otros wsdl
├── Servicios/
│ ├── FacturacionElectronica.php # Facturación electrónica
│ ├── PadronAlcanceCinco.php # Padrón alcance 5
│ ├── PadronAlcanceCuatro.php # Padrón alcance 4
│ ├── PadronAlcanceDiez.php # Padrón alcance 10
│ ├── PadronAlcanceTrece.php # Padrón alcance 13
│ └── ComprobanteInscripcion.php # Comprobante inscripción
├── DTO/ # Data Transfer Objects
│ ├── Comprobante.php
│ └── RespuestaComprobante.php
├── Builders/ # Pattern Builder para DTOs
│ ├── ComprobanteBuilder.php # Builder fluido para comprobantes
│ └── AfipConfiguracionBuilder.php # Builder fluido para configuraciones
├── Constantes/
│ └── AfipConstantes.php # Todas las constantes AFIP
└── Utilidades/
├── AfipUtilidad.php # Utilidades generales
└── TokensUtilidad.php # Utilidades para tokens
🎯 Uso Básico
Configuración
use AfipSDK\Afip; use AfipSDK\Configuracion\AfipConfiguracion; use AfipSDK\Builders\AfipConfiguracionBuilder; // NUEVA API Fluida con Builder (Recomendada) - Ambiente de testing $configuracion = AfipConfiguracionBuilder::testing() ->conCuit(20123456789) ->conCertificado('certificado.pem') ->conClavePrivada('clave_privada.pem') ->conFraseClave('mi_frase_secreta') ->conCarpetaCertificados(__DIR__ . '/certificados/') ->conCarpetaTokens(__DIR__ . '/tokens/') ->construir(); // NUEVA API Fluida con Builder - Ambiente de producción $configuracion = AfipConfiguracionBuilder::produccion() ->conCuit(20123456789) ->conCertificado('cert_prod.pem') ->conClavePrivada('key_prod.pem') ->conFraseClave('frase_super_secreta') ->sinExcepciones() // Método conveniente ->construir(); // API Tradicional AfipConfiguracion (también soportada) $configuracion = AfipConfiguracion::testing() ->conCuit(20123456789) ->conCertificado('certificado.pem') ->conClavePrivada('clave_privada.pem') ->conFraseClave('mi_frase_secreta'); // Constructor directo (también soportado) $configuracion = AfipConfiguracion::testing(20123456789, [ 'certificado' => 'certificado.pem', 'clavePrivada' => 'clave_privada.pem', 'fraseClave' => 'mi_frase_secreta', 'carpetaTokens' => __DIR__ . '/tokens/' ]); $afip = new Afip($configuracion);
🏗️ ComprobanteBuilder - API Fluida
El SDK incluye un ComprobanteBuilder que permite crear comprobantes de forma fluida y con validaciones automáticas.
Características del Builder
- ✅ API fluida fácil de leer
- ✅ Cálculos automáticos de totales
- ✅ Validaciones en tiempo de construcción
- ✅ Mapeo automático de códigos AFIP
- ✅ Soporte para todos los tipos de comprobante
Uso Básico del Builder
use AfipSDK\Builders\ComprobanteBuilder; use AfipSDK\Constantes\AfipConstantes; // Factura C simple $factura = ComprobanteBuilder::factura('C', 1, AfipConstantes::TIPOS_DOCUMENTO['DNI'], 12345678) ->conImporteNeto(1000.00) ->construir(); // Factura A con IVA múltiple $facturaCompleja = ComprobanteBuilder::factura('A', 1, AfipConstantes::TIPOS_DOCUMENTO['CUIT'], 30202020204) ->conImporteNeto(20000.00) ->conImporteExento(1000.00) ->agregarIva(21.0, 15000.00) // IVA 21% sobre $15000 ->agregarIva(10.5, 5000.00) // IVA 10.5% sobre $5000 ->agregarTributo(2, 'Ingresos Brutos', 20000.00, 3.0) ->conMoneda('USD', 350.00) ->configurarComoServicio('20250101', '20250131', '20250228') ->construir(); // Crear en AFIP $respuesta = $facturacion->crearSiguienteComprobante($facturaCompleja->paraAfip());
Métodos Avanzados del Builder
Descuentos y Recargos
$facturaConDescuento = ComprobanteBuilder::factura('A', 1, 80, 30202020204) ->conImporteNeto(10000.00) ->agregarIva(21.0, 10000.00) ->conDescuento(5.0, 10000.00) // 5% descuento = $500 ->construir(); $facturaConRecargo = ComprobanteBuilder::factura('A', 1, 80, 30202020204) ->conImporteNeto(8000.00) ->agregarIva(21.0, 8000.00) ->conRecargo(3.0, 8000.00) // 3% recargo financiero = $240 ->construir();
Percepciones e Impuestos
$facturaConPercepciones = ComprobanteBuilder::factura('A', 1, 80, 30202020204) ->conImporteNeto(15000.00) ->agregarIva(21.0, 15000.00) ->agregarTributo(2, 'Ingresos Brutos', 15000.00, 3.0) ->agregarPercepcion(1, 'Percepción IVA', 15000.00, 2.0) ->agregarPercepcion(2, 'Percepción Ganancias', 15000.00, 1.5) ->construir();
Facturas de Crédito Electrónica (FCE)
$facturaCredito = ComprobanteBuilder::factura('A', 1, 80, 30202020204) ->conImporteNeto(20000.00) ->agregarIva(21.0, 20000.00) ->comoFacturaCredito('0123456789012345678901', 'EMPRESA.ALIAS') ->configurarComoServicio('20250101', '20250131', '20250228') ->construir();
Notas de Crédito
$notaCredito = ComprobanteBuilder::notaCredito('A', 1, 80, 30202020204) ->conImporteNeto(5000.00) ->agregarIva(21.0, 5000.00) ->conComprobanteAsociado(1, 1, 123) // Factura asociada ->construir();
Exportación
$facturaExportacion = ComprobanteBuilder::factura('A', 1, 80, 30202020204) ->conImporteNeto(25000.00) ->agregarIva(0.0, 25000.00) // Exportaciones IVA 0% ->paraExportacion('1', 'PE-2025-001') ->conTransporte('Marítimo', 'Buque MV Exportador') ->construir();
Métodos Disponibles en ComprobanteBuilder
| Método | Descripción |
|---|---|
factura($tipo, $ptoVta, $docTipo, $docNro) |
Crear builder para factura |
notaCredito($tipo, $ptoVta, $docTipo, $docNro) |
Crear builder para nota de crédito |
conImporteNeto($importe) |
Establecer importe neto gravado |
conImporteExento($importe) |
Establecer importe exento |
conImporteNoGravado($importe) |
Establecer importe no gravado |
agregarIva($porcentaje, $baseImponible, $importe?) |
Agregar alícuota de IVA |
agregarTributo($id, $desc, $baseImp, $porcentaje?) |
Agregar tributo (Ing. Brutos, etc.) |
agregarPercepcion($id, $desc, $baseImp, $porc?) |
Agregar percepción |
conDescuento($porcentaje, $baseImporte) |
Aplicar descuento |
conRecargo($porcentaje, $baseImporte) |
Aplicar recargo financiero |
conFecha($fecha) |
Establecer fecha específica |
conMoneda($monedaId, $cotizacion) |
Configurar moneda extranjera |
configurarComoServicio($desde, $hasta, $vto?) |
Configurar como servicio |
configurarComoProductosYServicios($desde, $hasta) |
Configurar como productos y servicios |
conCondicionIva($condicion) |
Sobrescribir condición IVA del receptor |
conComprobanteAsociado($tipo, $ptoVta, $nro) |
Asociar comprobante (notas) |
paraExportacion($tipo, $permiso?) |
Configurar para exportación |
conTransporte($tipo, $detalle) |
Agregar información de transporte |
comoFacturaCredito($cbu, $alias?) |
Convertir a FCE |
agregarDatoOpcional($id, $valor) |
Agregar dato opcional válido de AFIP |
validarAntesDeConstruir($validar) |
Habilitar/deshabilitar validaciones automáticas |
construir() |
Construir el objeto Comprobante final |
Facturación Electrónica
// Obtener servicio de facturación $facturacion = $afip->FacturacionElectronica; // Crear comprobante $datosComprobante = [ 'CbteTipo' => 11, // Factura C 'PtoVta' => 1, 'Concepto' => 1, // Productos 'DocTipo' => 80, // CUIT 'DocNro' => 20123456789, 'CbteFch' => date('Ymd'), 'ImpTotal' => 121.00, 'ImpTotConc' => 0.00, 'ImpNeto' => 100.00, 'ImpOpEx' => 0.00, 'ImpIVA' => 21.00, 'ImpTrib' => 0.00, 'MonId' => 'PES', 'MonCotiz' => 1, 'Iva' => [ [ 'Id' => 5, // 21% 'BaseImp' => 100.00, 'Importe' => 21.00 ] ] ]; $respuesta = $facturacion->crearSiguienteComprobante($datosComprobante); echo "CAE: " . $respuesta['CAE'] . "\n"; echo "Número: " . $respuesta['numeroComprobante'] . "\n"; echo "Vencimiento: " . $respuesta['CAEFchVto'] . "\n"; // Consultar último comprobante $ultimo = $facturacion->obtenerUltimoComprobante(1, 11); // Obtener información de comprobante $info = $facturacion->obtenerInformacionComprobante($ultimo, 1, 11);
Padrón de Contribuyentes
// Obtener servicio de padrón $padron = $afip->PadronAlcanceCinco; // Consultar contribuyente $contribuyente = $padron->obtenerDatosContribuyente(20123456789); if ($contribuyente) { echo "Razón Social: " . $contribuyente->razonSocial . "\n"; echo "Estado: " . $contribuyente->estadoClave . "\n"; } // Consultar múltiples contribuyentes $contribuyentes = $padron->obtenerDatosContribuyentes([ 20123456789, 20987654321, 20555666777 ]);
📋 Información del SDK
🏗️ AfipConfiguracionBuilder - API Fluida para Configuración
El SDK incluye un AfipConfiguracionBuilder que permite crear configuraciones AFIP de forma fluida con validaciones automáticas.
Características del AfipConfiguracionBuilder
- ✅ API fluida autodocumentada
- ✅ Validaciones en tiempo de construcción
- ✅ Factory methods para testing y producción
- ✅ Métodos de conveniencia como
sinExcepciones() - ✅ Compatible 100% con AfipConfiguracion original
Uso Básico del AfipConfiguracionBuilder
use AfipSDK\Builders\AfipConfiguracionBuilder; // Configuración básica para testing $configuracion = AfipConfiguracionBuilder::testing() ->conCuit(20123456789) ->conCertificado('certificado.pem') ->conClavePrivada('clave.key') ->conFraseClave('mi_passphrase') ->construir(); // Configuración completa para producción $configuracion = AfipConfiguracionBuilder::produccion() ->conCuit(20123456789) ->conCertificado('cert_prod.pem') ->conClavePrivada('key_prod.key') ->conFraseClave('passphrase_ultra_segura') ->conCarpetaCertificados('/etc/ssl/afip/') ->conCarpetaTokens('/var/cache/afip_tokens/') ->conCarpetaRecursos('/opt/afip-sdk/recursos/') ->sinExcepciones() // Método de conveniencia ->construir(); // Configuración mínima $configuracion = AfipConfiguracionBuilder::testing() ->conCuit(20123456789) ->conCertificado('cert.pem') ->conClavePrivada('key.pem') ->construir();
Métodos Avanzados del AfipConfiguracionBuilder
Reutilización y Factory Pattern
// Crear configuración base reutilizable $builderBase = AfipConfiguracionBuilder::testing() ->conCarpetaCertificados('/certificados/') ->conCarpetaTokens('/tokens/'); // Cliente A $configClienteA = $builderBase ->conCuit(20111111111) ->conCertificado('cliente_a.pem') ->conClavePrivada('cliente_a.key') ->construir(); // Cliente B $configClienteB = $builderBase ->conCuit(20222222222) ->conCertificado('cliente_b.pem') ->conClavePrivada('cliente_b.key') ->construir(); // Factory personalizado function crearConfiguracionCliente(int $cuit, string $nombre): AfipConfiguracion { return AfipConfiguracionBuilder::testing() ->conCuit($cuit) ->conCertificado($nombre . '_cert.pem') ->conClavePrivada($nombre . '_key.pem') ->conCarpetaCertificados("/clientes/{$nombre}/certificados/") ->conCarpetaTokens("/clientes/{$nombre}/tokens/") ->construir(); }
Configuraciones Condicionales
$ambiente = $_ENV['AFIP_AMBIENTE'] ?? 'testing'; $configuracion = ($ambiente === 'produccion' ? AfipConfiguracionBuilder::produccion() : AfipConfiguracionBuilder::testing()) ->conCuit(20123456789) ->conCertificado($ambiente === 'produccion' ? 'prod.pem' : 'test.pem') ->conClavePrivada($ambiente === 'produccion' ? 'prod.key' : 'test.key') ->construir();
Métodos Disponibles en AfipConfiguracionBuilder
| Método | Descripción |
|---|---|
testing() |
Factory method para ambiente de testing |
produccion() |
Factory method para ambiente de producción |
conCuit(int $cuit) |
Establece el CUIT del contribuyente |
conCertificado(string $archivo) |
Establece el archivo de certificado |
conClavePrivada(string $archivo) |
Establece el archivo de clave privada |
conFraseClave(string $frase) |
Establece la passphrase de la clave |
conCarpetaCertificados(string $ruta) |
Establece la carpeta de certificados |
conCarpetaTokens(string $ruta) |
Establece la carpeta de tokens |
conCarpetaRecursos(string $ruta) |
Establece la carpeta de recursos |
conExcepciones(bool $habilitar) |
Habilita/deshabilita excepciones |
sinExcepciones() |
Método de conveniencia para deshabilitar excepciones |
construir() |
Construye el objeto AfipConfiguracion final |
Compatibilidad con AfipConfiguracion Original
El AfipConfiguracionBuilder es completamente compatible con la clase AfipConfiguracion original:
// AMBAS FORMAS crean exactamente la MISMA clase $configOriginal = AfipConfiguracion::testing(20123456789, [ 'certificado' => 'cert.pem', 'clavePrivada' => 'key.pem' ]); $configBuilder = AfipConfiguracionBuilder::testing() ->conCuit(20123456789) ->conCertificado('cert.pem') ->conClavePrivada('key.pem') ->construir(); // Ambas son instancias de AfipConfiguracion echo $configOriginal::class; // AfipSDK\Configuracion\AfipConfiguracion echo $configBuilder::class; // AfipSDK\Configuracion\AfipConfiguracion // El código existente NO necesita cambios $afip = new Afip($configOriginal); // Funciona $afip = new Afip($configBuilder); // También funciona
Obtener Versión
// Obtener solo la versión $version = $afip->obtenerVersion(); echo "Versión: " . $version; // Ej: "1.0.0" // Obtener información completa del SDK $info = $afip->obtenerInformacionSdk(); print_r($info); /* Array ( [version] => 1.0.0 [nombre] => AFIP SDK [descripcion] => SDK moderno para servicios web de AFIP - Argentina [servicios_disponibles] => Array ( [0] => FacturacionElectronica [1] => PadronAlcanceCuatro [2] => PadronAlcanceCinco [3] => ComprobanteInscripcion [4] => PadronAlcanceDiez [5] => PadronAlcanceTrece ) [ambiente] => testing [cuit] => 20123456789 ) */ // Acceso directo a la constante echo Afip::VERSION; // "1.0.0"
🔧 Servicios Disponibles
| Servicio | Clase Descripción |
| ----------------------- | ------------------------ | ------------------------------------ |
| Facturación Electrónica | FacturacionElectronica | Emisión de comprobantes electrónicos |
| Padrón Alcance 4 | PadronAlcanceCuatro | Consulta básica de contribuyentes |
| Padrón Alcance 5 | PadronAlcanceCinco | Consulta avanzada de contribuyentes |
| Padrón Alcance 10 | PadronAlcanceDiez | Consulta con datos fiscales |
| Padrón Alcance 13 | PadronAlcanceTrece | Consulta por documento |
| Comprobante Inscripción | ComprobanteInscripción | Constancia de inscripción |
🛡️ Manejo de Excepciones
El SDK incluye excepciones específicas para diferentes tipos de errores:
Excepciones Específicas
use AfipSDK\Excepciones\ConfiguracionExcepcion; use AfipSDK\Excepciones\CertificadoExcepcion; use AfipSDK\Excepciones\WsdlExcepcion; use AfipSDK\Excepciones\TokenExcepcion; use AfipSDK\Excepciones\FirmaDigitalExcepcion; use AfipSDK\Excepciones\SoapExcepcion; use AfipSDK\Excepciones\ServicioExcepcion; use AfipSDK\Excepciones\NegocioExcepcion; use AfipSDK\Excepciones\AfipExcepcion; try { $comprobante = $facturacion->crearSiguienteComprobante($datos); } catch (ConfiguracionExcepcion $e) { echo "Error de configuración: " . $e->getMessage(); } catch (CertificadoExcepcion $e) { echo "Error de certificado: " . $e->getMessage(); } catch (TokenExcepcion $e) { echo "Error de autenticación: " . $e->getMessage(); } catch (NegocioExcepcion $e) { echo "Error de AFIP: " . $e->getMessage(); } catch (AfipExcepcion $e) { echo "Error general AFIP: " . $e->getMessage(); } catch (Exception $e) { echo "Error inesperado: " . $e->getMessage(); }
Tipos de Excepciones
| Excepción | Descripción |
|---|---|
ConfiguracionExcepcion |
Errores de configuración del SDK |
CertificadoExcepcion |
Problemas con certificados y claves privadas |
WsdlExcepcion |
Errores al cargar archivos WSDL |
TokenExcepcion |
Problemas de autenticación y tokens |
FirmaDigitalExcepcion |
Errores en el proceso de firma digital |
SoapExcepcion |
Errores de comunicación SOAP |
ServicioExcepcion |
Servicios no implementados o inválidos |
NegocioExcepcion |
Errores específicos de reglas de AFIP |
AfipExcepcion |
Excepción base (catch-all) |
⚙️ Configuración Avanzada
Servicios Web Genéricos
El SDK incluye la clase ServicioWebGenerico para trabajar con servicios AFIP no implementados específicamente:
// Crear un servicio genérico $configuracionServicio = [ 'WSDL' => 'https://ejemplo.com/servicio.wsdl', 'URL' => 'https://ejemplo.com/servicio', 'WSDL_PRUEBA' => 'https://testing.com/servicio.wsdl', 'URL_PRUEBA' => 'https://testing.com/servicio' ]; $servicio = $afip->servicioWeb('MiServicioCustom', $configuracionServicio); // Llamar a métodos del servicio $resultado = $servicio->llamarMetodo('ConsultarDatos', $parametros);
Configuración de Carpetas
$configuracion = AfipConfiguracion::testing( cuit: 20123456789, opciones: [ 'carpetaRecursos' => '/ruta/completa/recursos/', 'carpetaTokens' => '/ruta/completa/tokens/', 'certificado' => 'mi_cert.pem', 'clavePrivada' => 'mi_key.pem' ] );
🪧 Ejemplos Prácticos
En la carpeta ejemplos/ encontrarás más de 30 ejemplos prácticos organizados por categorías:
🔰 Básicos (basicos/)
configuracion-basica.php- Setup inicial del SDKuso.php- Flujo completo típico de facturaciónmanejo_excepciones.php- Manejo de errores específicos
💰 Facturación (facturacion/)
factura-a.php,factura-b.php,factura-c.php- Tipos de facturasfacturacion-con-dto.php- Usando DTOs simplificadosfacturacion-manual.php- Control total con arraysconsulta-comprobante.php- Consultar comprobantes emitidos
🏗️ Builder (facturacion/builder/)
facturacion.php- Ejemplos básicos con ComprobanteBuilderfacturacion-avanzada.php- Métodos avanzados del Buildercasos-especiales.php- Casos especiales y edge casestest-simple.php- Tests de descuentos y recargosverificacion-metodos.php- Verificación completa de métodosdebug.php- Debug y estructura de datos
📝 Notas de Crédito (facturacion/notas-credito/)
nota-credito-a.php,nota-credito-b.php,nota-credito-c.phpnota-credito.php- Ejemplo general de notas
🔍 Consultas (consultas/)
consultas-padron.php- Padrón múltiples alcancespadron-alcance-5.php- Padrón Alcance 5 específicopuntos_venta.php- Gestión de puntos de venta
📊 Tipos (consultas/tipos/)
tipos_comprobante.php,tipos_documento.php,tipos_moneda.phptipos_alicuota_iva.php,tipos_tributo.php- Códigos AFIP
⚙️ Configuración (configuracion/)
builder_basico.php- Uso básico del AfipConfiguracionBuilderbuilder_avanzado.php- Métodos avanzados y encadenamiento fluidobuilder_casos_uso.php- Casos de uso específicos (múltiples clientes, factories, etc.)comparativa.php- Comparación entre AfipConfiguracion y AfipConfiguracionBuilder
🔧 Servicios (servicios/)
comprobante-inscripcion.php- Constancias de inscripciónmonitoreo-servicios.php- Estado de servicios AFIPservicio_generico.php- Servicios personalizadoscotizacion_monedas.php- Consulta de cotizaciones
🚀 Avanzados (avanzados/)
configuracion-avanzada.php- Configuración para producciónutilidades-validaciones.php- Validaciones y cálculosmanejo_tokens.php- Gestión avanzada de tokens
📊 Reportes (reportes/)
guardado-json.php- Persistencia en JSONinformacion_adicional_util.php- Utilidades adicionales
🧪 Testing
# Ejecutar tests unitarios composer test:unit # Ejecutar todas las validaciones de calidad composer quality # Formateo de código composer lint # Análisis estático composer test:types # Refactoring automático composer refactor # Modernizar código (lint + refactor + types + tests) composer modernize
📋 Requisitos
- PHP 8.2 o superior
- Extensión SOAP
- Extensión OpenSSL
- Extensión SimpleXML
- Certificados válidos de AFIP
🤝 Contribuciones
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Crea un Pull Request
📄 Licencia
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
🔗 Enlaces Útiles
Documentación General
Facturación Electrónica
Padrón de Contribuyentes
- Manual Padrón Alcance 4
- Datos de Prueba Padrón A4
- Manual Padrón Alcance 5
- Manual Padrón Alcance 10
- Manual Padrón Alcance 13
Comprobante de Inscripción
🆘 Soporte
Si encuentras algún problema o tienes preguntas:
- Abre un Issue
- Consulta la Documentación
- Contacta al autor: armando_lazarte@hotmail.com
⚠️ Importante: Este SDK está diseñado específicamente para uso en Argentina con los servicios web oficiales de AFIP. Asegúrate de tener los certificados y permisos necesarios antes de usar en producción.