Manual de Uso PyAfipWs Interfase y herramientaspara servicios web AFIP (Factura Electroacutenica yotros)
Documentacioacuten Componentes y Herramientas Generalesbull PyAfipWs Interfase simil OCX con otros lenguajes (VB VFP Cobol ) Costos yCondiciones
diams
Manual Documentacioacuten Informacioacuten Importante Certificados Errores Frecuentesdiams Herramienta universal archivos de intercambio TXT Cobol DBF dBaseFoxPro JSONPHPJava
diams
PyFEPDF Generador de Factura Electroacutenica en formato PDFdiams Factura Electroacutenica - Servicios Web AFIPbull
Mercado Interno Factura Electroacutenica ABCM WSFEv1+(RG2485306736683749400441094367)
diams
Matrix (codificacioacuten productos) Factura Electroacutenica AB con detalle (RG29043536)diams Bienes de Capital Bonos Fiscales Electroacutenicos - Factura Electroacutenica A (RG2557)diams Exportacioacuten Factura Electroacutenica E Exportadores (RG2758 RG3689 RG4401)diams Turismo Comprobantes Factura Electroacutenica T WSCT CAECAEA (RG3971)diams FE Cred (FCE) Factura Electroacutenica Creacutedito MiPyMEs (RG4367) Nuevodiams Coacutedigo de Autorizacioacuten Electroacutenico Anticipado CAEAdiams
Agropecuario - Servicios web AFIPbull Coacutedigo Trazabilidad de Granos Transporte de granos WSCTGv4 (RG2806 RG3113RG3493)
diams
Liquidacioacuten y Certificacioacuten de Granos WSLPGv117 F C1116 A B RT (RG3419 RG3690RG3691)
diams
Liquidacioacuten de Tabaco Verde WSLTVv13 iexclActualizadodiams Liquidacioacuten Uacutenica Mensual Lecheriacutea WSLUMv13diams Liquidacioacuten Sector Pecuario Hacienda Compra directa Carne WSLSPv13diams Remito Electroacutenico Caacuternico WSRemCarne (RG425618 y RG430318)diams Remito Electroacutenica Harinero WSRemHarina - (RG 451919)diams Remito Electroacutenico Azuacutecar y Derivados WSRemAzucar - (RG 451919) iexclNuevodiams Carta de Porte WSCPE - (RG 501721) iexclNuevodiams
Otros webservices y utilidades AFIPbull Constatacioacuten de Comprobantes CAI CAE CAEA (WSCDC)diams Padron Contribuyentes AFIP Constancia de Inscripcioacuten RG18172005 WS-SR-Padrondiams Consulta de Operaciones Cambiarias Compra de Divisas (WSCOC)diams SIRE_CertificadoRetencionElectronica Certificado de retencioacuten electroacutenica del Impuesto alValor Agregado (SIRE-WS) RG452319
diams
Webservices provinciales ARBA (Prov BsAs) AGIP (CABA) API (StaFe) DGR(Coacuterdoba)
bull
Remito Electroacutenico COT Coacutedigo de Operaciones de Translado (ARBA API AGIP DGR)diams Ingresos Brutos Consulta de aliacutecuotas WS DFE IIBB ARBAdiams
SNT Sistema Nacional de Trazabilidad ANMAT SEDRONAR SENASAbull Trazabilidad de Medicamentos ANMAT Disposicioacuten 36832011diams Trazabilidad de Productos Meacutedicos ANMAT Disposicioacuten 23032014 y 217514diams Trazabilidad de Precursores Quiacutemicos RENPRE SEDRONAR Resolucioacuten 90012diams Trazabilidad de Productos Fitosanitarios SENASA Resolucioacuten 36913diams
Manual de Uso PyAfipWs Interfase y herramientas para servicios web AFIP (Factura Electroacutenica y otros)1
Aplicativos Geneacutericos y Herramientas Avanzadasbull PyRece Aplicativo visual simil SIAP - RECE (CSV PDF Email)diams FEpy Herramienta universal unificada e integradadiams FacturaLibre Aplicacion online (web2py)diams PyFactura Aplicativo visual y simple (gui2py) para CAE y PDF factura electroacutenicadiams LibPyAfipWs Biblioteca DLL para lenguajes C C++ y similaresdiams Factura Electroacutenica en Python Informacioacuten Teacutecnica (SOAP XML PDF DBF etc)diams
Emisioacuten y almacenamiento electroacutenico de comprobantes originales AFIP - Argentina Resolucioacuten General136102 226507 228907 248508 RG257009 255709 275810 290410 306711 341912 353613357113 RG366814 RG368914 RG374915 RG377915 RG4109-E17 RG436718 RG440119
2008-2019 copy Mariano Reingart Febrero de 2019
Iacutendice
Importante leer primero antes de comenzar
Historial de Cambios
Para el detalle completo de los ajustes modificaciones y mejoras al coacutedigo fuente ver Versiones Publicacadasy Conjuntos de Cambios (Sitio del Proyecto en GitHub)
Julio 2021
Implementacioacuten de coacutedigo QR a partir del 01032021 seguacuten RG48922020 Procedimiento Reacutegimenespecial de emisioacuten y almacenamiento electroacutenico de comprobantes originales RG Ndeg 4291Implementacioacuten del coacutedigo QR
bull
Julio 2020
AFIP anuncia la desafectacioacuten de protocolos TLS antiguos (v10 y 11) a partir del 2772020 seguacutencronograma Se actualizan libreriacuteas a tal efecto
bull
Junio 2020
RG454019 Procedimiento Facturacioacuten Emisioacuten de notas de creacutedito yo deacutebito Se agregan meacutetodosWSFEv1AgregarPeriodoComprobantesAsociadosWSMTXCAAgregarPeriodoComprobantesAsociados
bull
Febrero 2019
RG436718 Factura de Creacutedito Electroacutenica MiPyMEs FEv213 FCE Se agrega fecha en meacutetodoWSFEv1AgregarCmpAsoc y datos opcionales CBU
bull
RG440119 WSFEXv150 Se agrega meacutetodo WSFEXv1GetParamMonConCotizacion y ejemploRECEX1 monctz para consultar cotizacioacuten moneda aduana por fecha
bull
Aplicativos Geneacutericos y Herramientas Avanzadas 2
Agosto 2018
RG 4109-E Bienes Muebles Registrables Se agrega meacutetodo WSFEv1AgregarComprador y formatointercambio texto dbf
bull
Febrero 2018
Se incluye la nueva Autoridad Certificante -CA- que utilizaacute AFIPbull
Agosto 2017
Se agrega RG 4109-E COMPG_v2_10 Venta de Bienes Muebles Registrables Se agrega meacutetodoAgregarComprador y formato Registro Compradores TXT CompradoresDBF y pseudocoacutedigo deejemplo WSFEv1
bull
Marzo 2017
Se agrega documentacioacuten sobre Actualizaciones (Service Pack 2) WSFEv29 (Cuit en CbteAsoc yRG 4004-E Alquileres Impuesto a las Ganancias) y Release v05 (WSMTX)
bull
Nuevo campo CUIT en meacutetodo AgregarCmpAsoc para WSFEv1 y WSMTXbull
Febrero 2017
Documentacioacuten sobre Instaladores Firmados Digitalmente (Editor Comprobado)bull
Septiembre 2016
Se agrega documentacioacuten sobre Actualizaciones (Service Pack 1)bull
Agosto 2016 (hasta revisioacuten interna 739)
Se agregan comentarios sobre Eventos y COMPGv28 para maacutes info ver Novedades WSFEv1bull Se documentan meacutetodos para solicitud de muacuteltiples CAE por enviobull Se agregan mensajes de errores frecuentes y posibles soluciones (Protocolo SSLCERTIFICATE_VERIFY_FAILED fallas soap service unavailable tag not found IO errorsincronizar relojes etc)
bull
Se ajusta cambio de generacioacuten de claves con longitud de 2048 bits por cambio en AFIPbull Se ajustan links por desafectacioacuten de Google Code (histoacuterico)bull Se agregan aclaraciones sobre obtencioacuten de CAE reproceso (incluyendo ejemplo avanzado para VFPy VBNET) cache etc
bull
Se agrega documentacioacuten sobre meacutetodos para certificados automatizacioacuten de generacioacuten y anaacutelisis(por ej vencimiento)
bull
Se agrega datos opcionales RG 3779 RG 3668bull
Junio 2015 (hasta revisioacuten interna 638)
Se agrega Aclaraciones Generales PDF (IVA leyendas RG2845 Art 27 Comprobante Autorizadoetc)
bull
Se agrega logotipo AFIP al PDF y otras modificaciones a la plantilla de facturas electroacutenicasbull Se agrega atributos auxiliares y ejemplos de campos personalizables a generacioacuten de PDFbull Se unifico formato intercambio PDF y se agrega descripcioacuten de cada campobull
Historial de Cambios 3
Se agrega video explicativo WSASS y actualiza instructivo certificadosbull Se actualizan paraacutemetros WSAA SignTRA (passphrase y contenido archivos)bull Se agregan ejemplos simples de reutilizacioacuten de TA para VFP y VBbull Se ajustan links al coacutedigo fuente hacia repositorio GitHub por baja de GoogleCodebull Se agregan ejemplos de RECE1 y PYFEPDFbull Se ajusta descripcioacuten obtencioacuten de CAE WSFEv1bull Se agregan errores internos de AFIPbull Se realizan correcciones menores de tipeo (motivos_obs base_imp)bull Se actualiza infomacioacuten para Factura C Exentos (RG3749)bull
Abril 2015 (hasta revisioacuten interna 504)
Se agrega metodo WSFEv1EstablecerCampoFacturabull Se ajusta formato de intercambio WSMTXCAbull Se ajustan instaladoresbull Se agregan maacutes errores frecuentes de AFIPbull
Octubre 2014 (hasta revisioacuten interna 479)
Se agrega informacioacuten y ejemplo datos opcionales RG 3668 WSFEv1bull Se agrega campos opcionales RG3668 al formato de RECE1bull Se ajusta manejo de errores (ejemplo VFP y simplificacion)bull Se agregan errores internos de AFIP (shared pool ora account locked) punto de venta y temasmenores
bull
Diciembre 2013 (hasta revisioacuten interna 389)
Se ajusta tabla comparativa (RG3536 y RG3571)bull Se agregan errores internos de AFIP ORA-12535bull Se ajusta formato RECE1 y temas menores (estilo)bull
Abril 2013 (hasta revisioacuten interna 343)
Se agrega ejemplo WSAA sobre reuso del ticket de accesobull Se agrega ejemplo WSAA sobre verificacioacuten de canal segurobull Se actualiza info sobre autoridades certificantebull Se actualiza info sobre renovacioacuten de certificadosbull Se ajusta links WSBFEbull Cambios menoresbull
NoviembreDiciembre 2011 (hasta revisioacuten interna 319)
Se ajusta seccioacuten WSFEXv1 Versioacuten 1bull Se agrega secciones Ajustes de WSFEX a WSFEXv1 y RECEX vs RECEX1bull Se ajusta ejemplo WSFEX (WSFEXv1)bull Se actualiza Mensajes XML con instrucciones para enviar campos vacios o nulosbull Cambios menores (coealreadyAuthenticated)bull
Julio 2011 (hasta revisioacuten interna 281)
Se agrega seccioacuten Version 1 (WSFEXv1) a WSFEX y se ajusta al nuevo webservicebull
Historial de Cambios 4
Se agrega seccion PyI25 Generador de Coacutedigos de Barrasbull Se agrega seccioacuten PyEmail Envio de correo electroacutenicobull Se agrega seccioacuten Nuevas Validaciones a WSFEv1bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
AbrilMayo 2011 (hasta revisioacuten interna 221)
Se agrega seccioacuten Manejo de Excepcionesbull Se agrega seccioacuten Verificacioacuten del Canal de Comunicacioacuten Segurobull Se agrega seccioacuten Tabla Comparativa Webservicesbull Se agrega seccioacuten Reutilizacioacuten de Ticket de Acceso a WSAAbull Se agrega seccioacuten Obtencioacuten de atributos avanzados a WSAA y WSFEv1bull Se agrega seccioacuten Factura C Monotributo a WSFEv1bull Se actualiza secciones WSAA (meacutetodos atributos errores)bull Se actualiza secciones WSFEv1 (meacutetodos atributos errores)bull Se actualiza secciones WSFEX (meacutetodos atributos errores)bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
FebreroMarzo 2011 (hasta revisioacuten interna 155)
Se agrega seccioacuten WSMTXCA (objeto meacutetodos atributos ejemplo errores) y RECEMbull Se agrega seccioacuten Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)bull Se actualiza seccioacuten WSFEv1 y RECE1bull Se agrega seccioacuten PyFEPDF (interfaz COM herramient CLI archivos de texto tablas DBFconfiguracioacuten y disentildeador visual)
bull
Se ajusta seccioacuten Interfase por archivos de texto siacutemil SIAP - RECE (configuracioacuten tablas DBF)bull
Ver historial completo desde revisioacuten 1 -2009- (solo usuarios autorizados)
Funcionamiento del campo ID
Importante El ID no aplica a los nuevos webservices (WSFEv1 ni WSMTXCA) igualmente se aconseja leery seguir las siguientes recomendaciones Si bien los nuevos webservices tampoco tienen reprocesamiento lainterfaz lo realiza internamente verificando los datos enviados y recibidos (ver informacioacuten adicional en cadawebservice)
El ID es el Identificador del requerimiento requerido por AFIP un nuacutemero interno de secuencia controladopor el emisor que permite identificar de manera uacutenica cada operacioacuten de autorizacioacuten (solicitud de CAE)Este dato es de vital importancia para poder recuperar un CAE frente a problemas de comunicacioacuten o fallasdel hardwaresoftware Sin el eacutes imposible recuperar un CAE y se puede llegar a bloquear todo el circuito defacturacioacuten electroacutenica en los servidores de AFIP Por ello es recomendable que sea un dato propio delsistema de facturacioacuten almacenado en un soporte permanente (base de datos en el disco riacutegido o similares)
El ID debe ser uacutenico para cada comprobante autorizado y debe cambiar si hubo rechazo previo Los ID nodeben reutilizarse salvo para realizar reprocesos (recuperar un CAE ya emitido) La AFIP almacena lastransacciones seguacuten su ID a mismo ID mismo resultado y CAE (independientemente de los otros datos de laoperacioacuten de transaccioacuten)
En el caso de fallas los webservices poseen meacutetodos para recuperar el uacuteltimo ID informado (por ej verUltNro o GetLastID)
Funcionamiento del campo ID 5
Si bien los ejemplos (incluyendo los oficiales) utilizan generalmente el uacuteltimo ID + 1 esto es solo para ilustrarel meacutetodo en general no es recomendable su uso en produccioacuten ademaacutes de requerir comunicacioacuten extra (noes obligatorio llamar al meacutetodo uacuteltimo ID) ya que puede generar inconvenientes en caso de muacuteltiples equipossolicitando autorizacioacuten simultaacuteneamente fallas de comunicacioacuten o problemas de almacenamiento Seriacutearecomendable por ej que el ID sea un campo autonumeacuterico autoincremental o serial secuencial queacompantildee a la factura
El ID es arbitrario y no tiene relacioacuten con el nordm de factura La uacutenica condicioacuten es que debe ser uacutenico pero noes necesario que sea creciente o secuencial
Validez de Comprobantes Electronicos emitidos
El uso incorrecto de los servicios web (no respetando el funcionamiento de los campos en especial el IDreproceso motivos de observacioacuten y errores) puede ocasionar comportamientos erraacuteticos (facturas noautorizadas o autorizadas con otros datos) Se recomienda revisar el funcionamiento general de su sistema enproduccioacuten utilizando las validaciones que prevee la AFIP
Consulta interactiva de CAE httpsservicioswebafipgobargenericoscomprobantescaeaspxbull Consulta interactiva de CAE Anticipado httpsservicioswebafipgobargenericoscomprobantescaeaaspx
bull
Por Clave Fiscal servicio Verificacioacuten de validez de comprobantes emitidos (solo receptores)bull Por servicio web para Facturas E A y B (Bono Fiscal) Meacutetodo Recuperar comprobante (para facturasde exportacioacuten solo emisores)
bull
Para maacutes informacioacuten y automatizacioacuten del proceso ver servicio web Constatacioacuten de ComprobantesWSCDC
Mensajes XML
Los mensajes XML contienen la comunicacioacuten transmitida entre el sistema y la AFIP en el formato deintercambio de los servicios web
Atributo XmlRequest (requerimientoxml) incluye credenciales de acceso y la solicitud remota(meacutetodo a utilizar paraacutemetros etc)
bull
Atributo XmlResponse (respuestaxml) incluye los datos devueltos por el proceso remotoincluyendo mensajes de error (si corresponde)
bull
Almacenar estos archivos es de vital importancia para el registro de las operaciones realizadas por webservicey su eventual verificacioacuten depuracioacuten o solucioacuten de inconvenientes La informacioacuten contenida en estosarchivos es solo relevante a los desarrolladores no es necesario que sean enviados al usuario final
Dependiendo de la interfaz se pueden recuperar estos mensajes en forma de cadenas de texto para su posterioralmacenamiento o generar los archivos correspondientes
Para maacutes informacioacuten ver atributos XmlRequest y XmlResponse o paraacutemetros xml --trace
Guardar WSFEv1XmlRequest y WSFEv1XmlResponse (ver Manejo de Excepciones para unarutina completa)
bull
RECE1EXE xml --trace generaraacute los archivos con la extensioacuten xml en el directorio de laherramienta (ver Paraacutemetros para maacutes informacioacuten)
bull
Validez de Comprobantes Electronicos emitidos 6
Nota de Seguridad los mensajes pueden incluir datos sensibles (credenciales de acceso a AFIP token ysign) que pueden ser vaacutelidos por varias horas auacuten despueacutes de efectuada la comunicacioacuten En caso compartirestos archivos (por ej en el foro puacuteblico de consultas) se deberiacutean tomar las medidas necesarias para evitarinconvenientes (recortar el campo sign es suficiente para que no se puedan reutilizar las credenciales deacceso)
Importante En ciertos casos para determinados webservices AFIP solicita tag vacios (por ejpermiso_existente en WSFEXv1) por lo que se ha ajustado en la biblioteca de comunicacioacuten SOAP(versioacuten 127 y superiores) para manejar tres escenarios
Enviar un dato por ej permiso_existente = Sltpermiso_existentegtSltpermiso_existentegt
bull
Enviar un tag vacio completando con string vacio por ej permiso_existente = ltpermiso_existentegtltpermiso_existentegt
bull
No enviar un tag (valor NULL NIL None Void etc) por ej permiso_existente = NULL(no genera XML)
bull
En caso de no seguir las especificaciones de AFIP el webservice retornaraacute un mensaje de error del tipoServer was unable to read request ---gt There is an gt error in XMLdocument (5 1353) ---gt Input string was not in a correct format dondeindica revisar el XmlRequest liacutenea 5 columna 1353 (en este caso puntual) para corregir el dato enviado
Documentacioacuten Oficial AFIP
Recomendamos revisar y seguir los lineamientos y normativa de AFIP
httpwwwafipgovarfebull httpwwwafipgovarwsbull
Recordamos que la interfaz y bibliotecas (PyAfipWs) no realizan ninguacuten tipo de chequeo o validacioacutenadicional (ya que esta tarea la realizan los servidores de AFIP) y tampoco convierte entre distintos tipos dedatos (salvo conversioacuten trivial a cadenas -strings- para ser enviadas por XML) por lo que es responsabilidadde la aplicacioacuten principal cumplir con las especificaciones y legislacioacuten vigente referidas a los servicios webde AFIP proporcionando los datos correctos que correspondan
Modos Homologacioacuten y Produccioacuten
Por disentildeo el instalador para Windows publicado de la interfaz COM (pyafipwspy) y herramientas por liacuteneade comando (recepy recexpy recebpy rece1py) funcionaraacute inicialmente solo en modo homologacioacuten(testing) ya que su objetivo es simplemente facilitar las pruebas para que los usuarios que no concen Pythonpuedan evaluar el producto antes de interiorizarse en el lenguaje yo contratar el soporte comercial
Con los instaladores de evaluacioacuten en modo de homologacioacuten (pruebas) se ignoraraacute las URLsproporcionadas a CallWSAA Conectar o especificadas en receini En ese caso para activar modo produccioacuten(definitivo) es necesario ajustar el coacutedigo fuente ver instrucciones de Instalacioacuten desde Coacutedigo Fuente( video explicativo) Ofrecemos soporte comercial contemplando el acceso al instalador compilado ampajustado para produccioacuten para los clientes que asiacute lo requieran Ver Costos y Condiciones
Mensajes XML 7
Configuracioacuten para Produccioacuten
Para entrar en el ambiente de produccioacuten de AFIP ademaacutes de utilizar el instalador correcto (no el deevaluacioacuten ver arriba) se debe usar las URLWSDL correspondientes para cada webservice (modohomologacioacuten deshabilitado)
WSAA httpswsaaafipgovarwsservicesLoginCmswsdlbull WSFE httpsservicios1afipgovarwsfeserviceasmx -obsoleto desde 2011 por AFIP-bull WSFEv1 httpsservicios1afipgovarwsfev1serviceasmxWSDLbull WSFEXv1 httpsservicios1afipgovarwsfexv1serviceasmxWSDLbull WSMTXCA httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAServicewsdlbull WSBFEv1 httpsservicios1afipgovarwsbfev1serviceasmxWSDLbull
Ejemplo en el receini
[WSAA]CERT=reingartcrtPRIVATEKEY=reingartkeyURL=httpswsaaafipgovarwsservicesLoginCmsCACERT=confafip_ca_infocrt
[WSFEv1]CUIT=20267565393ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
Ejemplo en Visual Basic o similar (segundo paraacutemetro del meacutetodo Conectar)
Certificado = reingartcrt certificado de produccioacutenClavePrivada = reingartkey clave privada de produccioacutencms = WSAASignTRA(WSAACreateTRA(wsfe) Certificado ClavePrivada)
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlok = WSAAConectar(cache wsaa_url)ta = WSAALoginCMS(cms)
wsfev1_url = httpsservicios1afipgovarwsfev1serviceasmxWSDLok = WSFEv1Conectar(cache wsfev1_wsdl)
WSFEv1Cuit = 20267565393 CUIT del emisor (segun certificado)
Luego de configurar las opciones para produccioacuten se puede verificar el correcto funcionamiento de lascredenciales y URL utilizando los meacutetodos auxiliares por ej consultando los puntos de venta habilitados
parametros RECE1 ptosventabull meacutetodo ParamGetPtosVentabull
Aclaracioacuten No es obligatorio usar el instalador ni realizar compilacioacuten se puede bajar revisar modificar yejecutar directamente el coacutedigo fuente Python publicado en modo homologacioacuten o produccioacuten
Configuracioacuten para Produccioacuten 8
Importante Los CAE obtenidos en modo homologacioacuten no tienen validez fiscal
Advertencia Teoacutericamente no deberiacutea ser posible conectarse a produccioacuten con certificados de homologacioacuten(y viceversa) pero en la praacutectica han sucedido casos (obteniendo CAE de homologacioacuten sin validez fiscal)por lo que recomendamos extremar las medidas de seguridad y control (verificando certificados yconfiguracioacuten de URL de servidores) para generar las facturas en el ambiente correcto Ver Verificar ValidezCAE y Comprobacioacuten WSAA
Manejo de Excepciones
Las versiones recientes de WSAA (202) WSFEv1 (110) WSMTXCA (101) y WSFEX (126123) incluyenmejoras y unificaciograven en el manejo de excepcioneserrores (atributos LanzarExcepciones Excepciony Traceback) permitiendo un control maacutes simple de los Unexpected Python Error (errores noesperados que informa Python el lenguaje de programacioacuten de la interfaz generalmente por problemas deconexioacuten o tipos de datos invaacutelidos) sobre todo para lenguajes que no soportar mensajes de Error COM(previniendo mensajes por errores no controlados como Error fatal coacutedigo de excepcion=C0000005 y elcierre del programa)
Dependiendo de cada caso (en especial para lenguajes de programacioacuten legados) es conveniente deshabilitarlos errores no manejados (LanzarExcepciones = False) y controlar manualmente las excepciones y el valorretornado luego de llamar a cada meacutetodo
Ejemplo para Visual Basic
Dim ta as Variant
WSAALanzarExcepciones = Falseta = WSAALoginCMS(cms)If WSAAExcepcion ltgt Then
muestro al usuario solo el mensaje de error no la traza MsgBox WSAAExcepcion vbCritical Excepcioacuten
Exit SubEnd If
Mismo ejemplo para Visual Fox Pro
WSAALanzarExcepciones = Fta = WSAALoginCMS(cms)IF LEN(WSAAExcepcion) gt 0 THEN WSAATraceback MESSAGEBOX(WSAAExcepcion 5 + 48 Excepcion) CANCELENDIF
Tambieacuten se puede verificar que la respuesta del meacutetodo (en este caso en la variable ta notar que es del tipoVariant) no sea nula en ese caso se ha producido una excepcioacuten y el mensaje deberiacutea estar en el atributoExcepcion con su traza en Traceback
Nota dependiendo de la version los atributos Excepcion y Traceback pueden estar disponibles solo luego deocurrido el error (utilizar las ulitmas versiones para poder consultar estos atributos en cualquier momento)
Es recomendable que se muestre al usuario solo la Excepcioacuten (la traza es informacioacuten teacutecnica que no tieneutilizad para el operador) y para facilitar la depuracioacuten en todos los casos es uacutetil guardar los Mensajes XML
Manejo de Excepciones 9
y excepcioacuten ya que a veces los lenguajes de programacioacuten cortan el mensaje y se dificulta saber el motivo delerror Ademaacutes es recomendable siempre verificar que los objetos hayan sido creados (para no generar nuevoserrores) y que estos sean compatibles con la versioacuten que manejamos (si tenemos varias instalaciones distintaspara no solicitar atributos inexistentes)
Por ej para VB (cambiar WSAA por el webservice que corresponda)
verifico que el objeto haya sido creadoIf Not WSAA Is Nothing Then
verifico que la versioacuten del objeto sea compatibleIf WSAAVersion gt= 102a Then creo el archivo guardo alliacute todos los atributos para depuracioacuten
fd = FreeFile Open cerrortxt For Append As fd Print fd WSAAExcepcion Print fd WSAATraceback Print fd WSAAXmlRequest Print fd WSAAXmlResponse Close fd
End IfEnd If
Ejemplo para VFP (cambiar WSAA por el webservice que corresponda)
-- Depuracioacuten (grabar a un archivo los datos de prueba)gnErrFile = FCREATE(cerrortxt) =FWRITE(gnErrFile WSAAToken + CHR(13))=FWRITE(gnErrFile WSAASign + CHR(13)) =FWRITE(gnErrFile WSAAXmlRequest + CHR(13))=FWRITE(gnErrFile WSAAXmlResponse + CHR(13))=FWRITE(gnErrFile WSAAExcepcion + CHR(13))=FWRITE(gnErrFile WSAATraceback + CHR(13))=FCLOSE(gnErrFile)
Error Handler
Importante este meacutetodo no es estrictamente necesario si su programa ya tiene incorporado el manejo deerrores seguacuten el lenguaje de programacioacuten que utilicie (especialmente si utiliza el control de excepcionesmencionado en la seccioacuten anterior)
Todas estas consideraciones no quitan que se deba tener previsto el controlador de errores habitual dellenguaje para capturar los errores graves (por ej al no poder crear el objeto enviar un tipo de dato incorrectoo llamar un meacutetodoatributo inexistente) ya sea utilizando
Visual Basic ON ERROR GOTO bull Visual Fox Pro ON ERROR DO bull o bloques TRY EXCEPT CATCH o similaresbull
Lo mismo aplica a WSFEv1 WSMTXCA y WSFEX Para maacutes informacioacuten ver los ejemplos actualizados
Para VB
On Error GoTo ManejoError
Crear objeto interface (WSAA WSFEv1 etc)
Error Handler 10
Set WSAA = CreateObject(WSAA) llamar a los meacutetodos de WSAA
Exit Sub
ManejoError
Si hubo error (tradicional no controlado)
Mostrar mensajes de Depuracioacuten en ventana de inmediatoIf Not WSAA Is Nothing Then
If WSAAVersion gt= 102a Then DebugPrint WSAAExcepcion DebugPrint WSAATraceback DebugPrint WSAAXmlRequest DebugPrint WSAAXmlResponse
End IfEnd IfIf Not WSFEv1 Is Nothing Then
If WSFEv1Version gt= 110a Then DebugPrint WSFEv1Excepcion DebugPrint WSFEv1Traceback DebugPrint WSFEv1XmlRequest DebugPrint WSFEv1XmlResponse DebugPrint WSFEv1DebugLog()
End IfEnd If
Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipSelect Case MsgBox(ErrDescription vbCritical + vbRetryCancel Error amp ErrNumber - vbObjectError amp en amp ErrSource)
Case vbRetry DebugAssert False
ResumeCase vbCancel
DebugPrint ErrDescriptionEnd Select
Para VFP (con procedimiento para captura de errores automaacutetica)
ON ERROR DO errhand2-- Crear objeto interface Web Service de Factura ElectroacutenicaWSFE = CREATEOBJECT(WSFEv1) -- llamar a los meacutetodos de WSFE
-- Procedimiento para manejar errores WSFEPROCEDURE errhand2 --PARAMETER merror mess mess1 mprog mlineno
-- Depuracioacuten (mostrar los mensajes de error en la ventana principal)
WSFEv1XmlRequest WSFEv1XmlResponse WSFEv1Excepcion WSFEv1Traceback
Error number + LTRIM(STR(ERROR()))
Error Handler 11
Error message + MESSAGE() Line of code with error + MESSAGE(1) Line number of error + LTRIM(STR(LINENO())) Program with error + PROGRAM()
-- Preguntar Aceptar o cancelar ch = MESSAGEBOX(WSFEExcepcion 5 + 48 Error) IF ch = 2 ampamp Cancelar ON ERROR CLEAR EVENTS CLOSE ALL RELEASE ALL CLEAR ALL CANCEL ENDIF ENDPROC
Es posible seguir utilizando para las versiones anteriores o por compatibilidad hacia atraacutes LanzarExcepciones= Verdadero (predeterminado) en dicho caso se generaraacute un Error COM que deberaacute ser capturado por laaplicacioacuten y el mensaje estaraacute en ErrDescription (para VB) o MESSAGE() (para VFP)
Time-Out
En casos de falla de los servidores de AFIP la respuesta se puede demorar por lo que se puede configurar elparametro timeout (tiempo de espera) en el meacutetodo Conectar(cache wsdl proxy wrappercacert timeout) para controlar el periacuteodo y minimizar los bloqueos
De manera predeterminada el tiempo de espera en las uacuteltimas versiones es de 30 segundos pero se puedenpasar otros valores como 300 para que espere hasta 5 minutos (si los servidores de AFIP estaacuten muycongestionados) o reducir a 15 o 10 para esperar un tiempo maacutes reducido y dar una respuesta raacutepida alusuario (ver en ese caso Reproceso Automaacutetico para reintentarconsultar en caso de fallas en AFIP)
Es recomendable establecer la propiedad LanzarExcepciones a Falso y comprobar el valor deExcepcion (ver arriba) que generalmente informaraacute el error del sistema operativo por timeout Varioswebservices de AFIP tienen un meacutetodo Dummy que se pueden combinar con el timeout para detectar si elservidor de AFIP esta funcionando correctamente o no (justamente ese meacutetodo tambieacuten puede fallar desdeAFIP y es necesario controlar el tiempo de espera para un chequeo raacutepido)
Ver Errores de Conectividad y Errores internos de AFIP para mayor informacioacuten sobre los problemasfrecuentes con la comunicacioacuten hacia los servidores de AFIP
Importante Si no se utiliza los paraacutemetros cache proxy wrapper y cacert deberiacutean ser pasados como stringvacio (no saltear) Para poder utilizar estos paraacutemetros se deberiacutea usar una versioacuten actualizada de loscomponentes (2015)
Verificacioacuten del Canal de Comunicacioacuten Seguro
Por nueva Especificacioacuten Teacutecnica WSAA 122(Requerimientos de canal seguro comunicacioacuten para los CEE WSAA y WSN) se debe verificar la identidaddel servidor de AFIP (transformando lo que antes era una sugerencia (no documentada) en una verificacioacutenobligatoria de comprobar el certificado y URL del servidor)
Time-Out 12
Para ello los meacutetodos Conectar reciben dos paraacutemetros adicionales (actualmente solo para uacuteltimasversiones de desarrollo de WSAA 204 y WSFEv1 112 o superiror)
wrapper libreriacutea http con soporte avanzado de ssl (por el momento pycurl)bull cacert ruta al certificado de la autoridad certificante a verificar geotrustcrt ocomodocrt Puede utilizar el archivo con ambos certificados afip_ca_infocrt que lomantenemos actualizado con todos los certificados requeridos
bull
IMPORTANTE es recomendable empezar a utilizar el archivo geneacuterico de entidades certificantes pasandocacert=True o cacert=default De este modo si AFIP cambia el certificado o se vence algunaCA es probable que el nuevo certificado esteacute en el archivo generico por lo que no habriacutea que modificar elcoacutedigo y agregarlo manualmente (siempre que se este utilizando una versioacuten actualizada del proyecto)
Como solucioacuten provisoria se pueden descargar cacertpem desde el siguiente link httpscurlhaxxsedocscaextracthtml Esos son los certificados de Firefox (Mozilla) que contiene todos loscertificados existentes Se deberiacutea reemplazar por el archivo afip_ca_infocrt
Ejemplo en Visual Basic
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlwrapper = pycurl para situaciones especiales o versiones anteriores (instalador lt 27)proxy = formato usuarioclaveservidorpuertocacert = WSAAInstallDir + confafip_ca_infocrt Indicar ruta completa (directorio conf instalador gt 27)WSAAConectar(cache wsaa_url proxy wrapper cacert)
Ejemplo en RECEINI (solo se agrega los paraacutemetros de configuracioacuten CACERT y WRAPPER el resto seusa normalmente)
[WSAA]URL=httpswsaaafipgovarwsservicesLoginCmswsdlCACERT=confafip_ca_infocrtWRAPPER=pycurl
Nota De realizar la verificacioacuten debe agregar los paraacutemetros a todas las secciones que se conecten con loswebservices [WSAA] [WSFEv1] [WSLPG] etc y usar un instalador actualizado
Para verificar la Autoridad Certificante (CACERT) se recomienda probar el uacuteltimo ejemplo interactivo(cambiando httplib2 por pycurl para validar el nuevo certificado de wsaa) Para maacutes informacioacuten ver EjemploInteractivo de Autenticacioacuten (requiere instalacioacuten)
De encontrarse alguna inconsistencia el meacutetodo Conectar devolveraacute falso y en Excepcioacuten estaraacute el motivo deerror
No verifica el certificado (60 SSL certificate problem verify that the CAcert is OK Details error14090086SSLroutinesSSL3_GET_SERVER_CERTIFICATEcertificate verify failed)
bull
No verifica URL (51 SSL certificate subject namewsaahomoafipgovar does not match target host namewsaahomoafipgobar)
bull
El archivo de autoridades certificantes (paraacutemetro cacert) es incorrecto SSLError [Errno185090050] _sslc344 error0B084002x509 certificate
bull
Verificacioacuten del Canal de Comunicacioacuten Seguro 13
routinesX509_load_cert_crl_filesystem lib error (77 )SSLHandshakeError [ SSL CERTIFICATE_VERIFY_FAILED ] certifiacutecateverify failed (_sslc581 ) o WindowsError [Error 2] El sistema nopuede encontrar el archivo especificado IOError [Errno 2] No suchfile or directory (usar alternativamente confafip_ca_infocrt)
Se utiliza una libreriacutea de transporte distinta (pycurl) y posiblemente sea reemplazada en el futuro por lo querecomendamos dejar parametrizado este tema para evitar inconvenientes (pudiendo usar cualquier libreriacutea httpyo deshabilitar la comprobacioacuten de autoridad certificante al no pasarle los nuevos paraacutemetros a Conectarpara mantener compatibilidad con versiones anteriores yo en caso de que AFIP instale un certificadoincompatible en sus servidores)
Tabla comparativa Webservices
A continuacioacuten se presenta un resumen de webservices herramientas atributos y meacutetodos soportados
Caracteriacutestica WSFE v0 WSFE v1 v11 v2 v26 WSBFE v0 y v1 WSFEX v0 y v1 WSMTXCA
Normativa AFIP RG2485RG2485 RG2926 RG2959RG2975 RG3067 RG3571RG3668 RG3749 RG3779
RG2557 RG2758 RG3066RG3689 RG2904 RG2926 RG3536
Reacutegimen Mercado Internooriginal
Mercado interno (sin informardetalle)
Bono Fiscal - Bienes deCapital Exportacioacuten Mercado Interno (informar detalle
codificacioacuten de artiacuteculos)Clases de Facturas A B C M A B C M A B E A B
Sujetos comprendidos RI (obsoleto desde172011)
Responsables InscriptosExentos y MonotributoReacutegimen General
ResponsablesInscriptos inscriptos enla Secretariacutea deComercio
Exportadores inscriptosen los RegistrosEspeciales Aduaneros(V1 obligatorio desde31122011)
Responsables Inscriptos Notificadospor Juez Administrativo AFIP
Objeto COM(Windows) WSFE WSFEv1 WSBFE o WSBFEv1 WSFEX o WSFEXv1 WSMTXCA
Biblioteca COM(Windows) wsfedll wsfev1dll pyafipwsdll o
wsbfev1dllpyafipwsdll owsfexv1dll wsmtxdll
Modulo Python(Linux) wsfepy wsfev1py wsbfepy o wsbfev1py wsfexpy o wsfexv1py wsmtxpy
Herramienta siacutemilSIAPRECE(WindowsLinux)
receexe recepy rece1exe rece1py recebexe recebpy recexexe recexpy recemexe recempy
Informacioacuten General PyAfipWs Proyecto Version 1 Bonos FiscalesElectroacutenicos
Factura ElectroacutenicaExportacioacuten Proyecto Matrix
DocumentacioacutenTeacutecnica (Manual) WSFE WSFEv1 WSBFE WSFEX WSMTXCA
Nombre de servicioparaWSAACreateTRA
wsfe wsfe wsbfe wsfex wsmtxca
Meacutetodo Solicitud deAutorizacioacuten CAE oinformacioacuten deCAEA
Aut (CAE) CAESolicitar CAEARegInformativo
Authorize (CAE) Authorize (CAE) AutorizarComprobante InformarComprobanteCAEA
Tabla comparativa Webservices 14
Meacutetodos para CAEA(anticipado)
CAEASolicitarCAEAConsultar
SolicitarCAEAConsultarCAEAEntreFechasConsultarCAEA (emulado)
Campo ID(identificador uacutenico) en Aut en Authorize en Authorize
Reproceso siacute (realizado por AFIP) automaacutetico (emulado en lainterfaz) siacute (realizado por AFIP) siacute (realizado por AFIP) automaacutetico (emulado en la interfaz)
Campoproductosservicios presta_serv=SN concepto=123 tipo_expo=123 concepto=123
Campomonedacotizacioacuten moneda_id moneda_ctz imp_moneda_id
imp_moneda_ctz moneda_id moneda_ctz moneda_id moneda_ctz
MeacutetodoCrearFactura oAut
id presta_servtipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_totalimp_tot_concimp_neto impto_liqimpto_liq_rniimp_op_exfecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta
concepto tipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_total imp_tot_concimp_neto imp_iva imp_tribimp_op_ex fecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz
tipo_doc nro_doczona tipo_cbtepunto_vta cbte_nrofecha_cbte imp_totalimp_neto impto_liqimp_tot_concimpto_liq_rniimp_op_ex imp_percimp_iibbimp_perc_munimp_internosimp_moneda_idImp_moneda_ctz
tipo_cbte punto_vtacbte_nro fecha_cbteimp_total tipo_expopermiso_existentedst_cmp clientecuit_pais_clientedomicilio_clienteid_impositivomoneda_id moneda_ctzobs_comerciales obsforma_pago incotermsidioma_cbteincoterms_dsfecha_pago)
concepto tipo_doc nro_doctipo_cbte punto_vta cbt_desdecbt_hasta imp_total imp_tot_concimp_neto imp_subtotal imp_tribimp_op_ex fecha_cbtefecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz obs
MeacutetodoAgregarItem(detalle de artiacuteculo)
ncm sec ds qtyumed precio bonifiva_id imp_total
codigo ds qty umedprecio imp_total bonif
u_mtx cod_mtx codigo ds qtyumed precio bonif cod_ivaimp_iva imp_subtotal
MeacutetodoAgregarCbteAsoc(comprobantesasociados)
tipo_cbte pto_vta nro_cbteCUIT fecha
tipo_cbte pto_vtanro_cbte cuit_cbte tipo_cbte pto_vta nro_cbte fecha
MeacutetodoAgregarPermiso(permisos deembarque)
permiso_id pais_dst
MeacutetodoAgregarIVA(subtotales de aliacutecuotade iva)
iva_id base_imp importe iva_id base_imp importe
MeacutetodoAgregarTributo(otros impuestos)
tributo_id ds base_imp alicimporte tributo_id ds base_imp alic importe
Meacutetodo para consultarpuntos de ventahabilitados
ParamGetPtosVentaConsultarPuntosVentaCAEConsultarPuntosVentaCAEA
Meacutetodo pararecuperar un
CompConsultar GetCMP GetCMP ConsultarComprobante
Tabla comparativa Webservices 15
comprobanteMeacutetodo para obteneruacutetlimo nordmcomprobante
RecuperaLastCMP CompUltimoAutorizado GetLastCMP GetLastCMP CompUltimoAutorizado
Meacutetodos para obtenertablas de paraacutemetros
ParamGetTiposCbteParamGetTiposConceptoParamGetTiposDocParamGetTiposIvaParamGetTiposMonedasParamGetTiposOpcionalParamGetTiposTributosParamGetCotizacionParamGetPtosVenta
GetParamMonGetParamTipoCbteGetParamUMedGetParamTipoIVAGetParamNCM
GetParamMonGetParamTipoCbteGetParamTipoExpoGetParamIdiomasGetParamUMedGetParamIncotermsGetParamDstPaisGetParamDstCUITGetParamCtz
ConsultarComprobanteConsultarTiposComprobanteConsultarTiposDocumentoConsultarAlicuotasIVAConsultarCondicionesIVAConsultarMonedasConsultarUnidadesMedidaConsultarTiposTributoConsultarCotizacionMoneda
SEUO
Notas Generales
Convencioacuten de nombres si bien por transparencia se tratoacute de utilizar los nombres de los meacutetodosdefinidos en las especificaciones teacutecnicas se han cambiado los nombres de paraacutemetros y meacutetodosauxiliares para simplificar y unificar las interfaces manteniendo cierta coherencia entre los distintoswebservices por lo que algunas denominaciones internas pueden variar respecto a lasespecificaciones teacutecnicas de AFIP
bull
Esta tabla contiene un resumen de las consideraciones generales revisar la normativa vigenteespecificaciones y documentacioacuten teacutecnica actualizada para contemplar los casos particulares Ademaacutesse respetan las descripciones de servicios (WSDL) por ej si bien AFIP publica la especificacioacutenteacutecnica RG 2485 - Manual para el desarrollador V25 el webservice sigue siendo WSFEv1 ver RG 2485 - WSFEV1 - Manual para el desarrollador V26 RG 2904 - WSMTXCA - Manual para elDesarrollador - V02 RG 2758 - wsfex - Manual del desarrollador - V011 WSBFEV1 BonosFiscales Electroacutenicos Manual para el desarrollador V11
bull
Todas las facturas generadas en PDF o formatos similares pueden incluir el detalle de las operaciones(artiacuteculos coacutedigos descripcioacuten precio unitario etc) independientemente de lo que obligue ainformar AFIP en cada webservice No se podriacutea optar por utilizar el WSMTXCA (con detalleRG2904) si no ha recibido notificacioacuten por juez administrativo de AFIP en general corresponde elWSFEv1 (sin detalle RG2485 etal) para la mayoriacutea de los contribuyentes Para emitir facturas conCAEA (coacutedigo de autorizacioacuten electroacutenico anticipado) se deben cumplir ciertas condiciones(cantidad miacutenima de facturas por mes) en general solo aplicable a Auto-Impresores y GrandesContribuyentes
bull
La numeracioacuten de los comprobantes comienza de 1 por cada punto de venta y tipo de comprobante(no se comparten talonarios como con la facturacioacuten tradicional) Incluso cada webservicegeneralmente requiere dar de alta un punto de venta exclusivo No se puede continuar la numeracioacutenprevia ni de otro webservice
bull
La fecha de los comprobantes no puede ser anterior al uacuteltimo emitido pero generalmente se puedeautorizar facturas con fecha entre 5 a 10 diacuteas en el pasado o en el futuro por contingencias(dependiendo del webservice y si es servicios o productos) Ver meacutetodo de consultas y recupero decomprobantes No se podraacute emitir comprobantes antes de la fecha indicada en el formulario deEmpadronamiento (por ej si se eligioacute el inicio en Julio2015 no se pueden emitir facturas con fechade junio)
bull
En caso de inoperatividad del servidor de AFIP se deberiacutea emitir facturas tradicionales y presentar unformulario multinota en la agencia indicando las facturas realizadas manualmente y dejandoconstancia del motivo Para maacutes informacioacuten ver RG2485 Art 33
bull
Notas Generales 16
Se debe confirmar los temas de normativaslegislacioacuten con un Contador Puacuteblico Nacional debidamentehabilitado y con experiencia en el tema
Disclaimer - Aviso Legal
Toda informacioacuten es proporcionada a Titulo Informativo El programa es software libre liberado bajo licenciaGPLv3 y se entrega como estaacute sin garantiacuteas expliacutecitas ni implicitas de ninguacuten tipo incluyendo sin limitacioacutenpeacuterdida de ganancias interrupcioacuten de negocios peacuterdida de programas u otros datos en sistemas decomputacioacuten o cualquier otro reclamo Al usarlo acepta hacerlo bajo su propia responsabilidad conociendo lanormativa y reglamentaciones existentes
Instalacioacuten
Descargas
Bajar y Ejecutar el instalador
Importante ver Actualizaciones para novedades importantes instaladores y cambios recientes
Recomendado Instalador unificado (conteniendo la interfaz para todos los servicios web para homologacioacuten-solo evaluacioacutenpruebas-)
Windows 32 bits
PyAfipWs-272171-32bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSFEv1 WSMTXCAWSFEXv1WSBFEv1 WSCT WSFECred WSCDC WSCOC PyFEPDF PYI25 y PYEMAILWS_SR_Padron COT IIBB Arba Granos -WSLPG y WSCTG- Pecuarios- WSLSP WSLUMWSLTV Trazabilidad Medicamentos Trazabilidad de Productos Meacutedicos Trazabilidad dePrecursores Quiacutenicos Trazabilidad de Productos Agroquiacutemicos Fitosanitarios Trazabilidad deProductos Veterinarios) Recomendado para desarrolloevaluacioacuten
bull
PyAfipWs-271949-32bit+wsaa_211c+wsfev1_119a-typelibexe Instalador de desarrolloactualizado -para referenciar viacutea libreriacutea de tipos- (TypeLib) Soacutelo incluye WSAA y WSFEv1
bull
Windows 64 bits
PyAfipWs-271872-64bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSBFE WSFEv1 WSFEXv1WSMTXCA PyFEPDF PYI25 y PYEMAIL Granos -WSLPG y WSCTGv3- COT IIBB ArbaTrazabilidad Medicamentos y Agroquimicos) Recomendado para desarrolloevaluacioacuten
bull
Consultar por otros webservices y sistemas operativos
IMPORTANTE Los instaladores publicados son solo para evaluacioacuten por lo que pueden no estaractualizados con los uacuteltimos ajustes en los servidores yo ejemplos Ver instructivo Instalacioacuten Codigo Fuente( video explicativo) o consultar por soporte comercial
Los ejemplos completos del uso de la interfase en Visual Basic Visual Foxpro y otros lenguajes se puededescargar desde
Disclaimer - Aviso Legal 17
GitHub (repositorio actualizado) o Google Code (histoacuterico)bull
Para guias iniciales ver base de datos con ejemplos completos de WSFEv1 y WSFEX (implementacioacuten dereferencia)
factura_electronicamdb MS Access 2000 o sup programado en VBAbull pyafipwsmdb MS Access 97 programado en VBA (nuevo con FCE)bull pyafipws2kmdb MS Access 2000 o sup programado en VBA (versioacuten anterior)bull
IMPORTANTE las uacuteltimas versiones incorporan nuevas funcionalidades y deben ser testeadas con susistema antes de ser instaladas en produccioacuten De encontrar problemas de instalacioacuten (por causas del sistemaoperativo o similar) que impidan crear el objeto o conectarse al webservice se recomienda utilizar lasversiones anteriores o registrar manualmente los componentes de forma autoacutenoma con --register VerInstalacioacuten Manual para maacutes detalles Recordamos que este tipo de incidentes pueden ser consultados con elsoporte comercial o soporte comunitario ver Maacutes Informacioacuten
Incidencias Conocidas Dado que existen varias versiones dependiendo de que sistema operativo se utiliceen general no deberiacutea haber problemas de instalacioacuten pero puede haber cuestiones de permisos de acceso poliacuteticas de seguridad en algunos entornos Windows (por ej Permission Denied) En esos casosrecomendamos instalarlo como Administrador o darle permisos de modificacioacuten (Propiedades Solapa deSeguridad) al usuario del sistema operativo en la carpeta del componente (generalmente CArchivos deprogramaPyAfipWs o Program Files) Ver Permisos en Windows para mayor informacioacuten
Se recomienda desinstalar cualquier versioacuten anterior y borrar la carpeta de instalacioacuten para evitar archivostemporales residentes o temas similares
Instalacioacuten Manual Avanzada
Para la interfaz COM cada webservice tiene su DLL o EXE que puede ser instalado manualmente (norecomendado en general ya que no verifica si el archivo esta en uso no desinstala automaacuteticamente la versioacutenanterior entre otros temas que pudieran surgir)
Instalacioacuten manual pyafipwsexe --register o utlizar regsvr32 pyafipwsdllbull Desinstalacioacuten manual pyafipwsexe --unregister o utlizar regsvr32 upyafipwsdll
bull
El proceso es similar para instalar la interfaz a otros webservices (cambiando pyafipws por wsfev1wsfexv1 etc seguacuten corresponda por ej wsfexv1exe --register) Tambieacuten se puede registrardirectamente con python python wsaapy --register
Ambos comandos de instalacioacuten son similares pero instalan la interfaz de manera distinta
Embebida (InProcServer) registrando la biblioteca DLL con regsvr32 cuando se invoque a lainterfaz se carga en el mismo proceso del programa principal
bull
Independiente (LocalServer) ejecutando el programa EXE con --register cuando se invoque a lainterfaz se crea un nuevo proceso externo al programa principal (se veraacute el ejecutable por ej en eladministrador de tareas)
bull
NOTA solo es necesario registrar el EXE o la DLL (no ambas) En general es conveniente registrar las DLLpara que se cargue como una libreriacutea compartida embebida (InProcServer) y evitar temas de
Descargas 18
permisosfirewall ya que el EXE registra un proceso independiente (LocalServer) con sus implicancias(pueden surgir temas de permisosfirewall en ciertos sistemas operativos pero se ejecuta independientementeeliminando inconvenientes de dependencias y errores de carga)
Instalacioacuten Silenciosa (Desatendida)
Si bien el instalador muestra un asistente para la instalacioacuten (seleccioacuten del idioma licencia y directorioprogreso) es posible instalarlo sin intervencioacuten del usuario en segundo plano sin mostrar pantalla algunacon
instalador-PyAfipWs-125c-homoexe S D=CPyAfipWS
Las opciones son
S indica instalacioacuten silenciosabull D indica el directorio de instalacioacutenbull
Guiacutea de Instalacioacuten
La interfase se instala automaacuteticamente en CArchivos de Programa en el directorio elegido en elsegundo paso de instalacioacuten como se describe a continuacioacuten
Firma Digital (Editor Comprobado)
Como paso previo de seguridad al ejecutar el instalador verificar que el mismo haya sido firmado pornosotros debiendo aparecer
Editor Comprobado Sistemas Agiles (Mariano Reingart)bull
Consultar en caso de no comprobarse (o mencionar Editor Desconocido) ya que no seriacutea un instaladorcompilado originalmente por nosotros sin alteraciones
Paso 1 Seleccionar idioma
Idiomas disponibles I
Spanish espantildeol (predeterminado)bull English ingleacutesbull
Paso 2 Licencia
Para utilizar el software debe leer y aceptar la licencia
Paso 3 Direcorio de instalacioacuten
De manera predeterminada la interfaz se instalaraacute en una carpeta bajo el directorio estaacutendard de windows (porej CArchivos de Programa o CProgram Files) Se recomienda instalarla directamente en
Instalacioacuten Manual Avanzada 19
el directorio raiz (por ejCPYAFIPWS) para simplificar el acceso a las herramientas por linea de comandos
Paso 3 Finalizar instalacioacuten
Por uacuteltimo el instalador realizaraacute la instalacioacuten
Desinstalar versiones anterioresbull Crear el directorio de destinobull Extraer y copiar los archivosbull Crear desinstaladorbull Copiar configuracioacuten (RECEINI si corresponde)bull Registrar DLLbull
Puede ver el avance y estado final presionando el botoacuten Ver Detalles
Referenciar TypeLib
Ciertos instaladores (-typelib) incluyen una libreriacutea de tipos que es posible referenciar por ej en VB
Importante En general no es necesario referenciar el componente Invocando CreateObject deberiacuteafuncionar y devolveriacutea el objeto dinaacutemico en la mayoriacutea de los lenguajes de programacioacuten (VB VFP etc)
Maacutes informacioacuten
Soporte Comercial (asesoramiento inicial sin cargo de cortesiacutea -limitado y sin compromisos-)Web httpwwwsistemasagilescomartracwikiPyAfipWsdiams Por email facturaelectronicasistemasagilescomardiams Telefoacutenicamente (011) 4450-0716 y (011) 15-3048-921diams
bull
Soporte comunitario (gratuito)Sitio del proyecto httpwwwpyafipwscomardiams Grupo de noticiasdiscusiones httpgroupsgooglecomgrouppyafipwsdiams Coacutedigo Fuente httpsgithubcomreingartpyafipws (actual) y httpcodegooglecomppyafipws (histoacuterico)
diams
Incidencias httpsgithubcomreingartpyafipwsissuesdiams
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA)
Este servicio es necesario para acceder al resto de los servicios de negocios (ej Factura Electroacutenica) ofrecidospor la AFIP
Se debe generar un Ticket de Requerimiento de Acceso (TRA) firmarlo criptograacuteficamente (generando unmensaje CMS) que es enviacutea al servicio web para obtener un Ticket de Acceso (TA)
Esta interfase crea el mensaje en XML lo firma criptograacuteficamente y lo codifica en base-64 como lo requierela AFIP por lo que en general no es necesario realizar ninguno de estos pasos
Paso 3 Direcorio de instalacioacuten 20
Para maacutes informacioacuten oficial ver especificaciones teacutecnicas del WSAA y Arquitectura WS en el sitio de laAFIP
Importante es requerido tramitar los certificados para poder operar este webservice Para maacutes informacioacutenver Instructivos sobre Certificados
Objeto
El objeto COM se crea invocando a CreateObject(WSAA)bull
Meacutetodos
CreateTRA(service ttl) recibe el nombre del servicio (wsfe wsbfe wsfex wsctg etc) y eltiempo de vida (en segundos por defecto 2400) y devuelve un ticket de requerimiento de acceso(string con formato xml) Se puede revisar o modificar el xml devuelto (en general no es necesario)
bull
SignTRA(tra certificado clave_ privada passphrase) recibe el ticket derequerimiento de acceso (string con formato xml creado previamente) y las ubicaciones delcertificado y clave privada (o el contenido de los mismos) Firma el ticket y devuelve el mensaje CMS(string con formato xml) Importante El paraacutemetro opcional passphrase permite protejer la claveprivada por contrasentildea (Disponible a partir de la versioacuten 208) Tambieacuten se puede pasar el contenidode los archivos (como string) en certificado y clave_ privada (pudiendo ser guardados enla base de datos u otro tipo de almacenamiento)
bull
CallWSAA(cms url_webservice) Recibe el mensaje CMS (string con formato xml) y laURL del webservice Se conecta con el servidor remoto ejecuta el meacutetodo remoto LoginCMS ydevuelve el Ticket de Acceso (TA string con formato xml) generado por la AFIP Si no se especifiacutecaurl se utiliza servidores de homologacioacuten
bull
Conectar(cache url_webservice_wsdl proxy wrapper cacert) Nuevo Establece la conexioacuten con el servidor remoto recibe el directorio de archivos temporales la URL delWSDL (descripcioacuten del webservice) y proxy en formato usuarioclaveservidorpuerto Si no seespecifiacuteca url se utiliza servidores de homologacioacuten Parametros adicionales optativos wrapper es lalibreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor (CA)
bull
LoginCMS(cms) Nuevo Recibe el mensaje CMS (string con formato xml) ejecuta el meacutetodoremoto LoginCMS y devuelve el Ticket de Acceso (TA string con formato xml) generado por laAFIP Debe conectarse previamente con Conectar Establece los atributos Token Sign
bull
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido por defecto el ticket deacceso)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Expirado(fecha) Nuevo recibe una fecha (por defecto la fecha de expiracioacuten del uacuteltimo ticketde acceso generado) y verifica contra el reloj del equipo si dicha fecha ha expirado (en cuyo casodevuelve verdadero)
bull
Autenticar(service crt key [wsdl proxy wrapper cacert cachedebug]) Nuevo Meacutetodo unificado para obtener el ticket de acceso Almacena temporalmente elticket de acceso en un archivo en el directorio cache (debe tener permisos de escritura en esedirectorio) y automaacuteticamente lo reutiliza o solicita uno nuevo en caso de que no haya vencidoDisponible a partir de la versioacuten 207
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA) 21
Se recomienda comenzar a utilizar Conectar y LoginCMS en reemplazo de CallWSAA ya que los nuevosmeacutetodos tienen mejor manejo de errores pueden reutilizar la conexioacuten etc
Meacutetodos para Certificados
Los meacutetodos adicionales para el manejo de certificado permiten automatizar el procesamiento y generarpedidos de certificado directamente con este componente sin necesidad de utilizar comandos externosNuevo Disponible a partir de la versioacuten 210
AnalizarCertificado(crt) Carga un certificado digital y extrae los campos maacutesimportantes (establece propiedades Identidad Caducidad Emisor)
bull
CrearClavePrivada(self filename=privadakey key_length=2048pub_exponent=0x10001 passphrase=) Crea una clave privada (private key) necesariapara generar un certificado Queda referenciada internamente para poder crear el CSR (ver siguientemeacutetodo) por lo que las dos operaciones deben hacerse en la misma instancia Puede utilizarse unacontrasentildea (passphrase) para mayor seguridad (especialmente si la clave privada va a alojarse enuna carpeta compartida)
bull
CrearPedidoCertificado(self cuit= empresa=nombre=pyafipwsfilename=empresacsr) Crear un certificate signing request(X509 CSR) - pedido de certificado a gestionar por Clave Fiscal de AFIP para obtener el crt Se debeindicar el CUIT del representante nombre de la empresa (tal cual aparece en la constancia deinscripcioacuten) nombre de fantasia alias del certificado (identificando punto de venta sistema defacturacioacuten etc) y nombre del archivo a generar (recomendable ruta absoluta a una carpeta conpermisos de escritura)
bull
wsaaAnalizarCertificado(reingartcrt)print wsaaIdentidadprint wsaaCaducidad (Fecha de vencimiento)print wsaaEmisorprint wsaaCertX509
Por linea de comando puede ejecutarse el moacutedulo wsaapy con el meacutetodo --analizar
WSAA_cliexe --analizar reingartcrt reingartkey
Atributos
Token el el coacutedigo de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Sign el la firma de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Version versioacuten de la interfase (ej 16)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Identidad Caducidad Emisor CertX509 Nuevo campos del certificado analizado(actualizacioacuten 210 o posterior)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Meacutetodos 22
Ejemplo
Dim WSAA As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA)service = wsfe servicio a accederttl = 2400 tiempo de vida en segundostra = WSAACreateTRA(service ttl) Especificar la ubicacion de los archivos certificado y clavesPath = CurDir() + Certificado = reingartcrt certificado es el firmado por la afipClavePrivada = reingartkey clave privada usada para crear el cert
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
WSAALanzarExcepciones = False revisar Excepcion para controlar errores
Llamar al web service para autenticar anteriormente ta = WSAACallWSAA(cms httpswsaaafipgovarwsservicesLoginCms) Hologacioacuten ahora cache = Directorio para archivos temporales (dejar en blanco para usar predeterminado)wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl homologacioacutenproxy = usar usuarioclaveservidorpuertook = WSAAConectar(cache wsdl proxy)ta = WSAALoginCMS(cms) otener ticket de acceso
If WSAAExcepcion ltgt Then MsgBox WSAAExcepcion vbCritical ExcepcioacutenEnd If
Obtener Token y Sign de autorizacioacutenToken = WSAATokenSign = WSAASign
El Ticket de Acceso contiene el Token (coacutedigo) y Sign (firma) son los elementos que se utilizan en los otrosservicios web para lograr acceso a los mismos
Estos datos se pueden usar por un periacuteodo de tiempo (40 minutos modificable ver Reutilizacioacuten de Ticket deAcceso) siendo necesario volver a invocar el WSAA solo al finalizar este periacuteodo para obtener nuevos Tokeny Sign
Errores
El WSAA informa errores alfanumeacutericos (ErrNumber vbObjectError = 0) debiendo verificar la descripcioacuten(ErrDescription) Entre ellos los maacutes comunes son
cmscertexpired cmscertinvalid cmscertuntrusted El certificado no fue firmado por la AFIPexpiroacute es invaacutelido no se confiacutea en su emisor o no coincide la fuente Se debe revisar o emitircorrectamente los certificados Ver traacutemite de Generacioacuten
bull
xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid El tiempo degeneracioacutenexpiracioacuten es invaacutelido Debe sincronizar relojes con el servidor de la AFIP En Windows
bull
Ejemplo 23
propiedades del reloj habilitar Hora de Internet ingresar timeafipgovarwsnunavailable wsaaunavailable servicio no disponible momentaacuteneamentebull coenotAuthorized Computador no autorizado a acceder los servicios de AFIP Ver traacutemite deAsociacioacuten
bull
cmscertuntrusted Certificado no emitido por AC de confianza Revisar URL para ambiente correcto(produccioacutenhomologacioacuten) y Comprobacioacuten de Autenticacioacuten
bull
wsnnotFound Servicio informado inexistente se debe crear el ticket para un servicio vaacutelido (wsfewsfex etc)
bull
coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (verreutilizacioacuten del ticket de acceso abajo)
bull
Para maacutes errores frecuentes ver Falla SOAP WSAA
Reutilizacioacuten de Ticket de Acceso
Ante problemas de timeout y java socket read failed al intentar solicitar ticket de acceso (WSAA) ons1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (en generalpor sobrecarga o limitacioacuten de AFIP) es posible mitigar el tema reusando un ticket de acceso (token y sign)por hasta 12 hs (40 minutos por defecto) estableciendo el tiempo de vida del ticket pasandolo en el segundoparaacutemetro de CreateTRA (ttl en segundos en este manual esta documentado en secciones previas)
Por ej para un tiempo de vida de 10 hs (103600 segundos valor recomendado para evitar problemas desincronizacioacuten de relojes)
tra = WSAACreateTRA(wsfe 36000)
Luego de solicitar el ticket de acceso el Token y Sign puede ser usado por el periacuteodo especificado (dichosvalores pueden almacenarse en memoria en un archivo o base de datos etc)
Importante se puede guardar WSAAToken y WSAASign en una variable global y luego reutilizarlocada vez que se genera una factura
luego de llamara WSAALoginCMS o WSAACallWSAA o WSAAAutenticar
token = WSAATokensign = WSAASign
guardar token y sign en la base de datos archivo o una variable global
antes de llamar a WSFEv1CAESolicitar WSFEXv1Authorize o similar
WSFEv1Token = tokenWSFEv1Sign = sign
En general no es necesario verificar la fecha del ticket de acceso ya que en general es vaacutelido por 12 horas
Igualmente desde las versiones actualizadas de WSAA (202 o superior) es posible llamar al meacutetodoWSAAExpirado() antes de utilizar el ticket de acceso y este devolveraacute Verdadero si el ticket de accesosigue siendo vaacutelido (dada la fecha del reloj del equipo) o Falso si ha vencido su plazo y debe solicitarse unnuevo ticket de acceso
Errores 24
Por ejemplo luego de obtener el Token y Sign (ya sea por CallWSAA o LoginCMS) obtener y guardar lafecha de expiracioacuten
expiracion = WSAAObtenerTagXml(expirationTime)
Luego antes de usar el Token y Sign (por ej antes de llamar a WSFEv1 WSFEX etc) preguntar si el TA esvaacutelido (no ha expirado)
expiro = WSAAExpirado(expiracion)
Si expiro es True se debe generar otro ticket de acceso porque ha vencido su validez (con este meacutetodo sepuede guardar y verificar independientemente la fecha de expiracioacuten por cada servicio a usar wsfe wsfexwsbfe wsmtxca etc)
Si se comparte el certificado entre distintas maacutequinas o programas debe compartirse el ticket de acceso (porej guardandolo en un archivo o base de datos) y realizar esta verificacioacuten en cada instancia
Ejemplo completo en
reusar_ticket_accesobas (VB) y reusar_ticket_acceso_avanzadoprg (VFP) maacutes avanzadoguardando el TA en un archivo (y poder compartirlo por red o entre varios programas)
bull
reusar_ticket_accesoprg (VFP) y reusar_ticket_acceso_simplebas (VB) simplificado usando el TAen memoria
bull
Nota No es necesario guardar el ticket de acceso completo en un archivo para reutilizarlo Este ejemplo esuacutetil si se debe compartir el ticket entre diferentes programas u equipos en una red Si se usa en un soloprograma y este permanece abierto se puede mantener el valor del Token y Sign directamente en memoria(por ej en una variable) y reusarlo por hasta 12 hs (generalmente solicitandolo al iniciar el programa ymanteniendolo por una jornada de trabajo completa) Tambieacuten se podriacutea almacenar el valor de Token ySign en una base de datos o similar
Ejemplo simple reutilizacioacuten de TA
Ejemplo completo de reuso (usando el ticket de acceso en memoria)
Function Autenticar(TA as String = ) as String Procedimiento para autenticar con AFIP y reutilizar el ticket de acceso Llamar antes de utilizar WSAAToken y WSAASign (WSAA debe estar definido a nivel de moacutedulo)Dim ok expiracion solicitar token sign
cargar ticket de acceso previo (si no se mantiene WSAA instanciado en memoria)If TA ltgt Then
ok = WSAAAnalizarXml(TA)End If
revisar si el ticket es vaacutelido y no ha expirado expiracion = WSAAObtenerTagXml(expirationTime) DebugPrint Fecha Expiracion ticket expiracion
If IsNull(expiracion) Then solicitar = True solicitud inicial
Else solicitar = WSAAExpirado(expiracion) chequear solicitud previa
End If
Reutilizacioacuten de Ticket de Acceso 25
If solicitar Then Generar un Ticket de Requerimiento de Acceso (TRA)
tra = WSAACreateTRA()
uso la ruta a la carpeta de instalaciograven con los certificados de prueba ruta = WSAAInstallDir + DebugPrint ruta ruta
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra ruta + reingartcrt ruta + reingartkey) Cert Demo
ok = WSAAConectar( httpswsaahomoafipgovarwsservicesLoginCms) Homologacion
Llamar al web service para autenticar TA = WSAALoginCMS(cms)
Else DebugPrint no expirado Reutilizando
End If DebugPrint WSAAObtenerTagXml(destination)
Obtener las credenciales del ticket de acceso (desde el XML por si no se conserva el objeto WSAA) token = WSAAObtenerTagXml(token) sign = WSAAObtenerTagXml(sign)
Al retornar se puede utilizar token y sign para WSFEv1 o similar Devuelvo el ticket de acceso (RETURN) para que el programa principal lo almacene si es necesario
Autenticar = TAEnd Function
Importante en este caso WSAA debe ser un objeto global y persistente (al menos por lo que dure elprograma en produccioacuten) no se debe instanciar por cada llamada a Autorizar de lo contrario se perderaacuten elToken y Sign no reutilizando el ticket de acceso Si esto no es posible se debe persistir el Ticket de Accesoen un archivo o base de datos compartida
Ejemplo avanzado reutilizacioacuten de TA
Ejemplo completo de reuso (almacenando el ticket de acceso en un archivo tambieacuten podriacutea usarse una tablaen base de datos sesioacuten u otro medio durable)
inicializo las variablesToken = Sign =
busco un ticket de acceso previamente almacenadoIf Dir(taxml) ltgt Then
leo el xml almacenado del archivo Open taxml For Input As 1 Line Input 1 ta_xml Close 1
analizo el ticket de acceso previo ok = WSAAAnalizarXml(ta_xml)
If Not WSAAExpirado() Then puedo reusar el ticket de acceso
Token = WSAAObtenerTagXml(token) Sign = WSAAObtenerTagXml(sign)
End IfEnd If
Si no reuso un ticket de acceso solicito uno nuevoIf Token = Or Sign = Then
Ejemplo simple reutilizacioacuten de TA 26
Generar un Ticket de Requerimiento de Acceso (TRA) tra = WSAACreateTRA(wsfe 43200) 360012hs
Especificar la ubicacion de los archivos certificado y clave privada cert = reingartcrt certificado de prueba clave = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra cert clave)
If cms ltgt Then Llamar al web service para autenticar (cambiar URL para produccion)
wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl ok = WSAAConectar( wsdl) ta_xml = WSAALoginCMS(cms)
If ta_xml ltgt Then guardo el ticket de acceso en el archivo
Open taxml For Output As 1 Print 1 ta_xml Close 1
End If Token = WSAAToken Sign = WSAASign
End If reviso que no haya errores
DebugPrint Excepcion WSAAExcepcionIf WSAAExcepcion ltgt Then
DebugPrint WSAATracebackEnd If
End If
Imprimir los datos del ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint Token + TokenDebugPrint Sign + Sign
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA
Importante A partir de la actualizacioacuten 207 es posible utilizar el meacutetodo unificado Autenticar (queautomaacuteticamente contempla el tema de reutilizacioacuten al guardar el Ticket de Acceso en un archivo temporal enel directorio cache) en conjuncioacuten con SetTicketAcceso
Crear la instancia (usar CreateObject en VB y similares)wsaa = WSAA()
servidor de AFIP para homologacioacuten (cambiar para produccioacuten)wsaa_url = httpswsaahomoafipgovarwsservicesLoginCmswsdl
parametros opcionalesproxy = solo usar si hay servidor intermediowrapper = httplib2 (default) pycurl (depende proxy)cacert = confafip_ca_infocrt autoridades certificantes (servidores)cache = directorio archivos temporales (verificar permisos)debug = False depuracioacuten interna (en VB es palabra reservada usar otro nombre)
obtener el TA para pruebasta = wsaaAutenticar(wsfe reingartcrt reingartkey wsaa_url proxy wrapper cacert cache debug)
utilizar las credencialesprint wsaaTokenprint wsaaSign
establecer Ticket de Acceso en un solo paso (Nuevo meacutetodo)wsfev1SetTicketAcceso(ta)
Ejemplo avanzado reutilizacioacuten de TA 27
Nota dependiendo del sistema operativo deberaacute conceder permisos de acceso de escritura en la carpeta cachepara poder almacenar el ticket de acceso Tambieacuten es posible pasar el 8vo paraacutemetro cache de Autenticar conotro directorio para los archivos temporales Ver Permisos en Windows para maacutes informacioacuten
Obtencioacuten de Atributos Avanzados WSAA
En versiones recientes (204a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosdel ticket de acceso (uacutetiles para depuracioacuten y solucioacuten de errores)
Origen (Source) WSAAObtenerTagXml(source)bull Destino (Destination) WSAAObtenerTagXml(destination)bull ID Uacutenico WSAAObtenerTagXml(uniqueId)bull Fecha de Generacioacuten WSAAObtenerTagXml(generationTime)bull Fecha de Expiracioacuten WSAAObtenerTagXml(expirationTime)bull
Si ha ocurrido error (llamar previamente a WSAAAnalizarXml(XmlResponse) para analizar larespuesta)
Codigo de Fallo WSAAObtenerTagXml(faultcode)bull Mensaje de Fallo WSAAObtenerTagXml(faultstring)bull Servidor WSAAObtenerTagXml(ns3hostname)bull
Estos datos son uacutetiles para determinar problemas con el certificado ver Comprobacioacuten de AutenticacioacutenWSAA
Servicio Web de Factura Electroacutenica (WSFE)
Este servicio es ofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFE en el sitio de la AFIP
httpwswhomoafipgovarfiscaldocsWSFEWSFE-ManualParaElDesarrollador-090317pdf
Objeto
El objeto COM se crea invocando a CreateObject(WSFE)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA 28
UltNro() recuperar el uacuteltimo nuacutemero de transaccioacuten (id) Devuelve el uacuteltimo valor de secuenciautilizado al pedir autorizacioacuten Uso opcional
bull
Aut(id presta_serv tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto impto_liqimpto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago[fecha_serv_desde] [fecha_serv_hasta]) autoriza la emisioacuten de factura electroacutenicarecibe el id de secuencia (recuperado por UltNro) presta_serv en 1 si se esta facturando servicios (eneste caso es obligatorio el uso de la fecha de servicio desde y hasta) los datos de la factura a emitir ydevuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) Ver ejemplo para el detalle de losparaacutemetros
bull
RecuperaLastCMP(punto_venta tipo_comprobante) recibe el punto de venta y tipode comprobante (stringsenteros) devuelve el uacuteltimo nuacutemero de comprobante autorizado Usoopcional
bull
RecuperaQty() recupera cantidad maacutexima de registros de detalle (por el momento no es demayor utilidad ya que por simplicidad se enviacutea 1 registro de detalle por autorizacioacuten) Uso opcional
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Motivo Reproceso valores complementarios que retorna Autbull CbtDesde CbtHasta FechaCbte` nuacutemeros y fecha de comprobante autorizado queretorna Aut
bull
ImpTotal ImpNeto ImptoLiq` importes total neto e IVA que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 16)bull
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a realizar (ej Factura A solopara tipo_doc = 80 CUIT Facturas B por lote hasta $1000- etc)
bull
Ver especificaciones teacutecnicas del WSFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Meacutetodos 29
Ejemplo
Autorizar una factura electroacutenica nacional a modo de ejemplo (ficticia)
Crear objeto interface Web Service de Factura Electroacutenica
Set WSFE = CreateObject(WSFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEToken = WSAATokenWSFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSFECuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (servidor de homologacioacuten)ok = WSFEConectar(httpswswhomoafipgovarwsfeserviceasmx)
Llamo a un servicio tonto para obtener el estado (opcional)WSFEDummyDebugPrint appserver status WSFEAppServerStatusDebugPrint dbserver status WSFEDbServerStatusDebugPrint authserver status WSFEAuthServerStatus
Recupera cantidad maacutexima de registros (opcional)qty = WSFERecuperarQty()
Recupera uacuteltimo nuacutemero de secuencia IDLastId = WSFEUltNro()
Recupero uacuteltimo nuacutemero de comprobante (opcional)tipo_cbte = 1 punto_vta = 1LastCBTE = WSFERecuperaLastCMP(punto_vta tipo_cbte)
Establezco los valores de la factura o lote a autorizar 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000fecha_cbte = Fecha fecha_venc_pago = Fecha Fechas del periacuteodo del servicio facturado (solo si presta_serv = 1)fecha_serv_desde = Fecha fecha_serv_hasta = Fecha
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEAut(id presta_serv _ tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ impto_liq impto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desde fecha_serv_hasta) solo pasar si presta_serv=0MsgBox CAE amp cae amp Vencimiento amp WSFEVencimientoExit Sub
ManejoError Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipMsgBox ErrDescription vbCritical + vbRetryCancel _
Error amp (ErrNumber - vbObjectError) amp en amp ErrSource
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz (ver aclaracioacuten)
Ejemplo 30
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE)
Se debe llamar al meacutetodo Aut con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a UltNro puede utilizarse un dato local secuencial
bull
presta_serv 0 o 1 para indicar si es una factura de serviciosbull tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (1 Factura A 6 Factura B etc)bull punto_vta Nordm de punto de venta (debe estar autorizado)bull cbt_desde cbt_hasta Nordm de comprobante (si es un solo comprobante repetir Nordm)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 5 diacuteas)bull fecha_venc_pago Fecha liacutemite de vencimiento para el pago de la facturabull fecha_serv_desde fecha_serv_hasta Fechas del periacuteodo de servicios prestadobull
Ver todos los tipos de comprobante httpwswhomoafipgovarfiscaldocsWSFECodCpbtetxt
Ver todos los tipos de documentos httpwswhomoafipgovarfiscaldocsWSFECodDocIDtxt
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEResultado =A (Aceptado) y WSFEVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o los servidores de la AFIP no funcionan o nodevuelven la respuesta esperada
bull
cae = NULL El servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEResultado = R (Rechazado) y WSFEMotivo con los diversos motivos de rechazoproporcionados por el webservice
WSFEMotivo = 00 o NULL no hay error (solo como referencia)diams WSFEMotivo = 01 CUIT informada no es RIdiams WSFEMotivo = 02 CUIT no autorizada a facturar electroacutenicamentediams WSFEMotivo = 03 CUIT registra inconvenientes con domicilio fiscaldiams WSFEMotivo = 04 Punto de venta no se encuentra declaradodiams WSFEMotivo = 05 Fecha del comprobante incorrectadiams WSFEMotivo = 06 CUIT no puede emitir comprobantes clase Adiams WSFEMotivo = 07 para comprobantes clase A debe indicar CUITdiams WSFEMotivo = 08 CUIT informada es invaacutelidadiams WSFEMotivo = 09 CUIT informada no existe en el padroacutendiams WSFEMotivo = 10 CUIT informada no corresponde a un RIdiams WSFEMotivo = 11 el nordm de comprobante no es correlativo o fecha no correspondediams WSFEMotivo = 12 el rango informado se encuentra autorizadodiams WSFEMotivo = 13 LA CUIT INDICADA SE ENCUENTRA COMPRENDIDA EN ELREGIMEN ESTABLECIDO POR LA RESOLUCION GENERAL Ndeg 2177 YO EN ELTITULO I DE LA RESOLUCION GENERAL Ndeg 1361 ART 24 DE LA RG Ndeg 2177-
diams
bull
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE) 31
Para ver la lista completa de coacutedigos de motivos F136 httpwswhomoafipgovarfiscaldocsWSFEF136_MOTIVOStxt
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia En el caso de que la conexioacuten se interrumpa luego de que la AFIP registre la factura y antes deque la informacioacuten del CAE llegue al equipo la uacutenica alternativa es repetir la llamada a Aut con los mismosdatos (incluido el ID original) para obtener el CAE generado anteriormente En ese caso se WSFEReprocesoes S para indicar que el CAE se ha recuperado Por esto es importante guardar el ID o utilizar un dato local
Ver httpwswhomoafipgovarfiscaldocsWSFEWSFE-GuiaAdicionalParaElProgramadorpdf
Servicio Web de Bono Fiscal Electroacutenico (WSBFE)
EL WSBFE (Bonos Fiscales Electroacutenicos) es un Servicio Web de la AFIP para Facturas Electroacutenicas deBienes de Capital correspondiente al Artiacuteculo 3 de la Resolucioacuten General 25572009Este servicio esofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de cada item
A su vez el WSBFE devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva producto seguacuten NCM zonas unidades de medida Estas tablaspueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha devigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia delWSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSBFE en el sitio de la AFIP
httpwwwafipgovarwsWSBFEWSBFE-ManualParaElDesarrolladorpdf
httpwwwafipgovarwsWSBFEWSBFE-GuiaAdicionalParaElProgramadorpdf
La programacioacuten de la interfase WSBFE es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSBFE)bull
Servicio Web de Bono Fiscal Electroacutenico (WSBFE) 32
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(tipo_doc nro_doc zona tipo_cbte punto_vtacbte_nro fecha_cbte imp_total imp_neto impto_liq imp_tot_concimpto_liq_rni imp_op_ex imp_perc imp_iibb imp_perc_munimp_internos imp_moneda_id Imp_moneda_ctz) crea internamente una factura paraluego poder autorizarla recibe los datos de la factura a emitir Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarItem(ncm sec ds qty umed precio bonif iva_idimp_total) agrega internamente un item (linea de factura) a una factura para luego poderautorizarla recibe los datos del item a factura a emitir Ver ejemplo para el detalle de los paraacutemetros
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoIVA() GetParamUMed()GetParamNCM() recupera valores referenciales de coacutedigos de las tablas de paraacutemetros devuelveuna lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde- (verejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpNeto importe neto del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImptoLiq impuesto liquidado (IVA) del comprobante (del comprobante recuperado devuelto porGetCmp)
bull
Meacutetodos 33
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSBFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura de bienes de capital (bono fiscal electroacutenico) a modo de ejemplo (ficticia)
Dim WSAA As Object WSBFE As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSBFEtra = WSAACreateTRA(wsbfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada) Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten Una vez obtenido se puede usar el mismo token y sign por 24 horas
Crear objeto interface Web Service de Factura ElectroacutenicaSet WSBFE = CreateObject(WSBFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSBFEToken = WSAATokenWSBFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSBFECuit = 20267565393
Conectar al Servicio Web de Facturacioacutenok = WSBFEConectar(httpwswhomoafipgovarwsbfeserviceasmx) homologacioacuten
Establezco los valores de la factura a autorizarfecha = 20090530tipo_doc = 80 nro_doc = 23111111113zona = 0 Ver tabla de zonas
Errores 34
tipo_cbte = 1 Ver tabla de tipos de comprobantepunto_vta = 2 cbte_nro = 16fecha_cbte = fechaimp_total = 12100 imp_tot_conc = 000 imp_neto = 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000imp_perc = 000 imp_iibb = 000 imp_perc_mun = 000imp_internos = 000imp_moneda_id = 10 Ver tabla de tipos de monedaImp_moneda_ctz = 10000 cotizacioacuten de la moneda
Creo una factura (internamente no se llama al WebService)ok = WSBFECrearFactura(tipo_doc nro_doc _ zona tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total imp_neto impto_liq _ imp_tot_conc impto_liq_rni imp_op_ex _ imp_perc imp_iibb imp_perc_mun imp_internos _ imp_moneda_id Imp_moneda_ctz)
Agrego un itemncm = 73081000 Ver tabla de coacutedigos habilitados del NCMsec = Coacutedigo de la Secretariacutea (no usado por el momento)ds = Prueba Descripcioacuten completa del artiacuteculo (hasta 4000 car)umed = 1 kg Ver tabla de unidades de medidaqty = 10 cantidadprecio = 1050 precio neto (FacA) precio final (Facuras B)bonif = 500 descuentos (en positivo)iva_id = 5 21 ver tabla aliacutecuota de ivaimp_total = 12100 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSBFEAgregarItem(ncm sec ds qty umed precio bonif iva_id imp_total)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSBFEAuthorize(id)
If cae = Or WSBFEResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyElseIf WSBFEObs ltgt And WSBFEObs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyEnd If
MsgBox Resultado amp WSBFEResultado amp CAE amp cae amp _ Reproceso amp WSBFEReproceso amp _ Obs amp WSBFEObs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)
For Each evento In WSBFEEventosIf evento ltgt 0 Then
MsgBox Evento amp evento vbInformationEnd If
Next
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales del Nomenclador Comuacuten Mercosur habilitados
recupero tabla del nomenclador comuacuten del mercosur
Ejemplo 35
(codigo descripcioacuten (vigencia desde - hasta)) Ej 99999999 (item no incluiacutedo en el Beneficio Fiscal) (20070524 - 20091231)For Each x In WSBFEGetParamNCM() DebugPrint x Next
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSBFE)bull cbt_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull zona_id Zona (seguacuten tabla de paraacutemetros) - Por el momento 0bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull imp_moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull imp_moneda_ctz Cotizacioacuten de la moneda de la facturabull imp_perc Importe de las precepcionesbull imp_iibb Importe de las percepciones de ingresos brutosbull imp_perc_mun Importe de las percepciones municipalesbull imp_internos Importe de los impuestos internosbull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
ncm coacutedigo habilitado seguacuten el Nomenclador Comuacuten del Mercosur (NCM)bull sec coacutedigo de la secretariacutea (no utilizado por el momento pasar )bull ds Descripcioacuten completabull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull bonif Bonificacioacutenbull iva_id Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_total Importe total (incluyendo descuentos e IVA)bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEUltNro puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSBFEResultado =A (Aceptado) y WSBFEVencimiento Sino devuelve
Descripcioacuten de la obtencioacuten de CAE 36
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSBFEObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX)
EL WSFEX es un Servicio Web de la AFIP para Facturas Electroacutenicas de Exportacioacutencorrespondiente a la Resolucioacuten General 27582010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSBFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar los datos de exportacioacutenpermisos comprobantes asociados y el detalle de cada item
A su vez el WSFEX devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
Al igual que el WSBFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda idiomas terminos de comercio exterior paises y cuits unidades de medida etc Estastablas pueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen unafecha de vigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (adiferencia del WSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEX en el sitio de la AFIP
Manual para el desarrolladorpdf (version 0) Informacioacuten importante sobre la operatoriabull Manual para el desarrolladorpdf (version 1) Informacioacuten importante sobre la operatoria ( NuevaVersioacuten)
bull
FacturaElectronicaExportacion Informacioacuten general cambios ejemplos descargas y paraacutemetrosvigentes (puede estar ligeramente desactualizado)
bull
La programacioacuten de la interfase WSFEX es similar a WSBFE se recomienda revisarlo
WSFEX Versioacuten 1 (WSFEXv1)
Seguacuten RG306611 AFIP publicoacute una nueva versioacuten 1 (WSFEXv1) a entrar en vigencia obligatoria el31-12-2011 para maacutes informacioacuten ver Cambios WSFEXv1 respecto a WSFEXv0
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX) 37
Ambos webservices son muy similares por lo que se documenta en esta seccioacuten solo las diferenciasintroducidas
Importante Si bien se mantiene retrocompatibilidad para conectarse al nuevo webservice es necesarioutilizar el objeto WSFEXv1 y usar las nuevas URL
httpswswhomoafipgovarwsfexv1serviceasmxWSDL (homologacioacuten)bull httpsservicios1afipgovarwsfexv1serviceasmxWSDL (producciograven)bull
Aclaracioacuten WSFEXv1 es un nuevo webservice y AFIP ha agregado campos (bonificacioacuten) ha cambiadovarios tipos de datos (en importes cantidad de decimales) ha agregado coacutedigos de tablas de paraacutemetros(unidades de medida) y comprobantes asociados (remitos de tabaco) y ademaacutes realiza nuevas validacionespor lo que recomendamos probar exhaustivamente la interfaz con el desarrollo para exportacioacuten
Ajustes desarrollos de WSFEX a WSFEXv1
Si no utiliza las caracteriacutesticas nuevas es posible utilizar el coacutedigo desarrollado para WSFEX con nuestrainterfaz WSFEXv1
Coacutedigo Anterior (WSFEX)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEX)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar(httpswswhomoafipgovarwsfexserviceasmx) homologacioacuten
Coacutedigo Nuevo (WSFEXv1)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL) homologacioacuten
RECEX vs RECEX1
Por linea de comando tenemos disponible la herramienta RECEX1EXE que reemplaza a RECEXEXE yutiliza praacutecticamente el mismo formato de archivo y campos El nuevo formato esta documentado la seccioacutenRECEX1 - WSFEXv1
Objeto
El objeto COM se crea invocando a CreateObject(WSFEX) para Versioacuten 0 (hasta 30-12-2011)bull El objeto COM se crea invocando a CreateObject(WSFEXv1) para Versioacuten 1 (desde 31-12-2011)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica url se utiliza servidores de homologacioacuten Importante para WSFEXv1 los paraacutemetros soncache url proxy httpwrapper y cacert ver WSFEv1 Nuevo
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
WSFEX Versioacuten 1 (WSFEXv1) 38
CrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte imp_totaltipo_expo permiso_existente dst_cmp cliente cuit_pais_clientedomicilio_cliente id_impositivo moneda_id moneda_ctzobs_comerciales obs forma_pago incoterms idioma_cbteincoterms_ds fecha_pago) crea internamente una factura para luego poder autorizarlarecibe los datos de la factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importantefecha_pago se agrega en WSFEXv1 Modificado
bull
AgregarItem(ncodigo ds qty umed precio imp_total bonif) agregainternamente un item (linea de factura) a una factura para luego poder autorizarla recibe los datos delitem a factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importante bonif se agrega enWSFEXv1 Modificado
bull
AgregarPermiso(id dst) agrega internamente un permiso de exportacioacuten a una factura paraluego poder autorizarla recibe identificacioacuten y paiacutes destino de la mercaderia Ver ejemplo para eldetalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccuit_cbte_asoc) agrega internamente un comprobante asociado a una factura para luego poderautorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de losparaacutemetros Importante cuit_cbte_asoc se agrega en WSFEXv1 Nuevo
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoExpo()GetParamIdiomas() GetParamUMed() GetParamIncoterms()GetParamDstPais() GetParamDstCUIT() recupera valores referenciales de coacutedigos de lastablas de paraacutemetros devuelve una lista de strings con el idcoacutedigo o CUIT y descripcioacuten delparaacutemetro (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
GetParamCtz(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada como paraacutemetrobull GetParamMonConCotizacion(fecha) devuelve la cotizacioacuten consultada de la base de datosaduanera de todas las monedas que posean cotizacioacuten a la fecha indicada Nuevo
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Vencimiento fecha devuelta junto con el CAEbull CbteNro nuacutemero de comprobante (del comprobante autorizado)bull
Meacutetodos 39
FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull Version versioacuten de la interfase (ej 111)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Errores
La interfase procesa los errores WSFEX y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
500 Error interno DB - FEXGetLadt_CMP - get_last problemas internos de los servidores de AFIP(se debe esperar a que lo solucionen)
bull
Operation FEXGetLast_CMP not found in WSDL la URL que se estaacute utilizando no es correcta(verificar URL para el ambiente que se estaacute utilizando)
bull
505 Error general (lockeo) problemas internos de los servidores de AFIP (se debe esperar a que losolucionen)
bull
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSFEX para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura electroacutenica de exportacioacuten a modo de ejemplo (ficticia)
Dim WSAA As Object WSFEX As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEXtra = WSAACreateTRA(wsfex)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service para autenticar (Homologacioacuten)ta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms)
Atributos 40
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1) Setear tocken y sing de autorizacioacuten (pasos previos)WSFEXToken = WSAATokenWSFEXSign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEXCuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (homologacioacuten)ok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEXDummyDebugPrint appserver status WSFEXAppServerStatusDebugPrint dbserver status WSFEXDbServerStatusDebugPrint authserver status WSFEXAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 19 FC Expo (ver tabla de paraacutemetros)punto_vta = 7 Obtengo el uacuteltimo nuacutemero de comprobante y le agrego 1cbte_nro = WSFEXGetLastCMP(tipo_cbte punto_vta) + 1 16fecha_cbte = Format(Date yyyymmdd)tipo_expo = 1 tipo de exportacioacuten (ver tabla de paraacutemetros)permiso_existente = Ndst_cmp = 203 paiacutes destinocliente = Joao Da Silvacuit_pais_cliente = 50000000016domicilio_cliente = Rua 76 km 345 Alagoasid_impositivo = PJ54482221-lmoneda_id = 012 para reales DOL o PES (ver tabla de paraacutemetros)moneda_ctz = 05obs_comerciales = Observaciones comercialesobs = Sin observacionesforma_pago = 30 diasincoterms = FOB (ver tabla de paraacutemetros)idioma_cbte = 1 (ver tabla de paraacutemetros)imp_total = 25000
Creo una factura (internamente no se llama al WebService)ok = WSFEXCrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total tipo_expo permiso_existente dst_cmp _ cliente cuit_pais_cliente domicilio_cliente _ id_impositivo moneda_id moneda_ctz _ obs_comerciales obs forma_pago incoterms _ idioma_cbte incoterms_ds fecha_pago )
Agrego un itemcodigo = PRO1ds = Producto Tipo 1 Exportacion MERCOSUR ISO 9001qty = 2precio = 12500umed = 1 Ver tabla de paraacutemetros (unidades de medida)imp_total = 25000 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSFEXAgregarItem(codigo ds qty umed precio imp_total)
Ejemplo 41
Agrego un permiso (ver manual para el desarrollador)id = 99999AAXX999999Adst = 225 paiacutes destino de la mercaderiaok = WSFEXAgregarPermiso(id dst)
Agrego un comprobante asociado (ver manual para el desarrollador)tipo_cbte_asoc = 19punto_vta_asoc = 2cbte_nro_asoc = 1ok = WSFEXAgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc)
id = 99000000000100 nuacutemero propio de transaccioacuten obtengo el uacuteltimo ID y le adiciono 1 (advertencia evitar overflow y almacenar)id = CStr(CCur(WSFEXGetLastID()) + 1)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEXAuthorize(id)
Verifico que no haya rechazo o advertencia al generar el CAEIf cae = Or WSFEXResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyElseIf WSFEXobs ltgt And WSFEXobs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyEnd If
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato) si es posible almacenar para referencias futurasDebugPrint WSFEXXmlRequest DebugPrint WSFEXXmlResponse
MsgBox Resultado amp WSFEXResultado amp CAE amp cae amp _ Reproceso amp WSFEXReproceso amp _ Obs amp WSFEXobs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEXEventos
If evento ltgt 0 Then MsgBox Evento amp evento vbInformation
End IfNext
Recuperar la facturacae2 = WSFEXGetCMP(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEXFechaCbteDebugPrint Importe Total WSFEXImpTotal
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIPElse MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales de paiacuteses destino habilitados
Ejemplo 42
recupero tabla de coacutedigo de pais destino (codigo descripcioacuten) Ej 203 BRASILFor Each x In WSFEXGetParamDstPais() DebugPrint xNext
Ejemplo para obtener la fecha y cotizacioacuten de una moneda
busco la cotizacioacuten del dolar (ver Parametro Mon) Ej 20100708 3937moneda_id = DOLctz = WSFEXGetParamCtz(moneda_id)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_cbte coacutedigo de comprobante (19 Facturas de Exportacioacuten 20 Nota de Deacutebito por Operacionescon el Exterior 21 Nota de Creacutedito por Operaciones con el Exterior
bull
punto_vta Nordm de punto de venta (debe estar autorizado para WSFEX)bull cbte_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull imp_total Importe total de la facturabull tipo_expo Tipo de exportacion (1 Exportacioacuten definitiva de Bienes 2 Servicios 4 Otros)bull permiso_existente Indica si se posee documento aduanero de exportacioacuten (permiso de embarque)Posibles Valores S N NULL (vaciacuteo)
bull
dst_cmp Paiacutes de destino del comprobante (200 ARGENTINA 203 BRASIL 212 ESTADOSUNIDOS etc)
bull
cliente Apellido y Nombre oacute Razoacuten Social del compradorbull cuit_pais_cliente CUIT del paiacutes destinoContribuyente (Ej 50000000059 BRASIL - PersonaFxedsica 51600000059 BRASIL - Otro tipo de Entidad etc)
bull
domicilio_cliente Domicilio comercial clientebull id_impositivo Clave de identificacioacuten tributaria del compradorbull moneda_id Moneda de la factura (DOL Doacutelar Estadounidense PES Pesos Argentinos 012Real etc)
bull
moneda_ctz Cotizacioacuten de la moneda de la facturabull obs_comerciales observaciones comerciales (texto arbitrario)bull obs observaciones (texto arbitrario)bull forma_pago texto arbitrario (ej 30 diacuteas)bull incoterms clausula de venta terminos de comercio exterior (DAF DDP CIF FCA FAS DESCPT EXW CIP DDU FOB DEQ CFR)
bull
incoterms_ds informacioacuten adicional de terminos comercialesbull idioma_cbte idioma del comprobante 1 Espantildeol 2 Ingleacutes 3 Portugueacutesbull fecha_pago Fecha de pago (yyyymmdd)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
codigo coacutedigo del productobull ds Descripcioacuten completabull precio Precio Unitariobull
Descripcioacuten de la obtencioacuten de CAE 43
qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull imp_total Importe totalbull bonif bonificacion sobre el producto (importe)bull
Consideraciones especiales (soacutelo WSFEXv1 Nuevo )
Para descuentos utilizar umed 99 y los importes en negativo sin cantidad ni preciobull Para sentildeas o adelantos utilizar umed 97 y los importes en negativo o positivo (seguacuten corresponda)sin cantidad ni precio
bull
Para gratificaciones utilizar umed 0 sin importes cantidad ni preciobull Para bonificaciones por item el caacutelculo es precio qty - bonifbull
Adicionalmente se puede llamar al meacutetodo AgregarPermiso para detallar los permisos de embarque ydestinaciones de la mercaderiacutea con los siguientes paraacutemetros
id Coacutedigo de despacho Permiso de Embarque formato 99999AAXX999999A (donde XX podraacutenser nuacutemeros o letras)
bull
dst Paiacutes de destino de la mercaderiacuteabull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los permisos de embarque y destinacionesde la mercaderiacutea con los siguientes paraacutemetros
cbte_tipo Coacutedigo de tipo de comprobante (remitos solo WSFEXv1 Nuevo )bull cbte_punto_venta Punto de ventabull cbte_numero Numero de comprobantebull cbte_cuit CUIT emisor del comprobante (solo WSFEXv1 Nuevo )bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEXGetLastID puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEXResultado =A (Aceptado) y WSFEXVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSFXEResultado = R (Rechazado) y WSFEXObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
IMPORTANTE Revisar las especificaciones teacutecnicas de la AFIP en el Manual para el desarrolladorpdf porlo relativo a tablas de paraacutemetros meacutetodos adicionales y operatoria en general (incluyendo obligatoriedadformatos de los campos y validaciones)
Descripcioacuten de la obtencioacuten de CAE 44
Servicio Web de Factura Electroacutenica Mercado InternoVersioacuten 1 (WSFEv1)
EL WSFEv1 es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten B (sin detalle de factura) de la Resolucioacuten General 29042010 -RG248508 obligatorio a partir de 1-7-2011
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los impuestos(IVA) y tributos
A su vez el WSFEv1 devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva Estas tablas pueden sufrir modificaciones realizadas por la AFIP conaltas y bajas loacutegicas por lo que tienen una fecha de vigencia (desde hasta) y se proveen meacutetodos paraconsultarlas por el mismo servicio web (a diferencia del WSFE que las tablas eran documentadasestaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiProyectoWSFEv1
La programacioacuten de la interfase WSFEv1 es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSFEv1)bull
Meacutetodos
Meacutetodos baacutesicos de WSFEv1
Conectar(cache wsdl proxy wrapper cacert) realiza la conexioacuten a losservidores de la AFIP (primer paso esencial) Si no se especifica url del wsdl se utiliza servidores dehomologacioacuten El paraacutemetro cache es un directorio donde se almacenan internamente la descripcioacutendel servicio (archivo WSDL) para mayor optimizacioacuten Parametros adicionales optativos wrapper esla libreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor(CA)
bull
Servicio Web de Factura Electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 45
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto imp_ivaimp_trib imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz caea fecha_hs_gen) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetros
bull
AgregarIva(iva_id base_imp importe) agrega internamente un subtotal de IVA auna factura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible eimporte Ver ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(tributo_id Desc base_imp alic importe) agregainternamente un subtotal de tributo a una factura para luego poder autorizarla recibe los datos delimpuesto nacional provincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo parael detalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc cuitfecha) agrega internamente un comprobante asociado a una factura para luego poder autorizarlarecibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de los paraacutemetrosEl campo cuit fueacute agregado seguacuten FEv29 13-03-2017 disponible desde actualizacioacuten 119a yrefiere al CUIT emisor del comprobante asociado El campo fecha fueacute agregado seguacuten FEv21320-02-2019 disponible desde actualizacioacuten 122a y refiere a la fecha del comprobante asociado
bull
AgregarOpcional(opcional_id valor) agrega internamente un dato opcional a unafactura para luego poder autorizarla recibe el id del tipo de dato opcional y valor (dependiendo de sise trata de proyectos promovidos bienes usados RG 3411 DDJJ F8001 presuncioacuten de novinculacioacuten con la actividad gravada RG366814) Ver tabla de paraacutemetros Disponible desdeactualizacioacuten 115a
bull
AgregarComprador(doc_tipo=80 doc_nro=0 porcentaje=10000) agregainternamente un dato de comprador a una factura para luego poder autorizarla recibe el tipo dedocumento (80 CUIT) nuacutemero de documento y porcentaje (Bienes Usados Registrables RG 4109 E)Ver COMPG 210 Disponible desde actualizacioacuten 120a
bull
EstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura (ver paraacutemetros del meacutetodo CrearFactura) devuelve True siel campo pertenece al encabezado y se ha actualizado correctamente (ver ejemplo) Disponible desdeactualizacioacuten 116a
bull
ObtenerCampoFactura(campo [[campo2 [campo3]]) devuelve individualmente elvalor de un campo del encabezado u otras sub-estructuras de la factura (ver ejemplo) Uacutetil luego dellamara a CompConsultar Disponible desde actualizacioacuten 117a
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125b 200620
bull
Meacutetodos principales de WSFEv1
CAESolicitar() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo de AutorizacioacutenElectroacutenico (CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
CompConsultar(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle de los paraacutemetros yvalores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos baacutesicos de WSFEv1 46
CAEASolicitar(periodo orden) solicita un CAE Anticipado para la quincenacorrespondiente Devuelve cadena vacia si no se ha solicitado A partir de COMPGv26 estableceel campo Observaciones
bull
CAEAConsultar(periodo orden) recupera un CAE Anticipado emitido con anterioridadDevuelve cadena vacia si no se ha solicitado
bull
CAEARegInformativo informa un comprobante emitido con CAE Anticipado Se debe crear elcomprobante previamente con CrearFactura consignando el CAEA Actualiza los atributos(Resultado Obs etc) de manera similar a CAESolicitar Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
Meacutetodos alternativos para solicitud de muacuteltiples CAE
IniciarFacturasX() inicializa lista interna de facturas (comprobantes) para Solicitar muacuteltiplesCAE (llamar una uacutenica vez antes de CrearFacturaAgregarFacturaX)
bull
AgregarFacturaX() agrega el uacuteltimo comprobante cargado internamente con CrearFacturaa la lista para Solicitar muacuteltiples CAE
bull
CAESolicitarX() autoriza la emisioacuten de muacuteltiples facturas electroacutenicas (varios CAE porsolicitud) devuelve la cantidad de registros enviadosrecibidos a AFIP
bull
LeerFacturaX(indice) activa internamente una factura (dada su posicioacuten en la lista) pararevisar los datoss devuelto por AFIP usando ObtenerCampoFactura luego de haber llamado aCAESolicitarX
bull
Meacutetodos Auxiliares del webservice
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull ParamGetTiposMonedas() ParamGetTiposCbte() ParamGetTiposDoc()ParamGetTiposIva() ParamGetTiposOpcional() ParamGetTiposTributos()ParamGetTiposPaises() recupera valores referenciales de coacutedigos de las tablas de paraacutemetrosdevuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde-(ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros ParamGetTiposPaises agregadopara COMPGv26
bull
ParamGetCotizacion(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada comoparaacutemetro
bull
ParamGetPtosVenta() devuelve los puntos de venta autorizados para factura electroacutenicabull
Meacutetodos Utilitarios provistos por este componente
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Atributos
El componente tiene las siguientes propiedades que pueden ser consultadas o modificadas
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull
Meacutetodos principales de WSFEv1 47
AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull CAEA coacutedigo de autorizacioacuten anticipado (si corresponde)bull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTribimportes del comprobante
bull
ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull Reprocesar habilita reproceso automaacutetico (habilitado por defecto ver abajo)bull EmisitonTipo tipo de coacutedigo de autorizacioacuten (CAE o CAEA)bull
Errores
La interfase procesa los errores WSFEv1 y los almacena en las propiedades Errores y ErrCodeErrMsg (porej motivo de rechazo al intentar solicitar CAE) AFIP tambieacuten puede enviar errrores o advertencias por lacomo Observaciones propiedad Obs Se recomienda revisarlos luego de llamar a los Webservices
Ver ejemplos y especificaciones teacutecnicas del WSFEv1 para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ver Manejo de Excepciones para conocer las tecnicas para controlar las distintas excepciones que puedenocurrir (ver atributos Excepcion y Traceback en general por problemas de conectividad) y como proceder yalmacenar los mensajes XML para depuracioacuten y futuras consultas (atributos XmlRequest y XmlResponse)
Validaciones WSFEv1
AFIP realiza varias validaciones a los datos enviados muchas agregadas recientemente por lo que para evitarinconvenientes se recomienda revisar las siguientes validaciones y consideraciones generales
10063 Factura individual DocTipo 80 DocNro XXXXXXXXX no se encuentra inscripto encondicion ACTIVA en el impuesto Las facturas A solo pueden ser emitidas a ResponsablesInscriptos consignando el CUIT vaacutelido y registrado (tipo_doc=80)
bull
10014 Para facturas B (CbteDesde distinto a CbteHasta) el resultado de la operacioacuten ImpTotal (CbteHasta - CbteDesde + 1 ) debe ser menor a $1000 y 10015 Para facturas B (CbteDesde distintoa CbteHasta) menor a $1000 el campo DocNro deberaacute ser cero (0) y el campo DocTipo 99 Los lotesde facturas B menores a $1000- pueden ser emitidos a soacutelo a Consumidor Final (tipo_doc=99 ynro_doc=0) indicando el importe total del reango de facturas
bull
10043 El campo ImpTotConc (Importe Total del Concepto) para comprobantes tipo C debe ser iguala cero (0) y 10047 El campo ImpIVA (Importe de IVA) para comprobantes tipo C debe ser igual a
bull
Atributos 48
cero (0) 10071 Para comprobantes tipo C el objeto IVA no debe informarse Para emitir FacturasC no se informa iva ni imp_tot_conc ver caso especial Monotributo10048 El campo Importe Total ImpTotal debe ser igual a la suma de ImpTotConc + ImpNeto +ImpOpEx + ImpTrib + ImpIVA La sumatoria de los campos imp_neto impto_iva imp_op_eximp_tot_conc imp_trib contra imp_total no debe diferir en maacutes de 1 centavo (o 001)
bull
10051 Los importes informados en AlicIVA no se corresponden con los porcentajes La baseimponible por la aliacutecuota de IVA no debe diferir en maacutes de 1 centavo con el impuesto liquidado deIVA (para cada tasa ver AgregarIVA)
bull
10020 El campo BaseImp en AlicIVA es obligatorio y debe ser mayor a 0 cero Si el imp_neto es 0no se debe enviar subtotal de IVA ni para la tasa 0 (no usar AgregarIVA)
bull
10018Si ImpIva es igual a 0 el objeto Iva y AlicIva son obligatorios Id iva = 3 (iva 0) Si elimp_neto es ltgt0 y el iva liquidado es 0 se debe enviar coacutedigo de alicuota 3 (0) -por ej casoespecial de hacer factura de 1 centavo- Si no corresponde IVA (exento o no gravado) se debe enviarimp_iva NULO (vbNull null o similar) y no enviar aliacutecuotas
bull
Consideraciones especiales
Para emitir Facturas B a Responsables No Inscriptos debe informarse en Tributos el importecorrespondiente (ver AgregarTributo)
bull
Para factura E no corresponde este webservice por maacutes que sea a Tierra del Fuego Ver WSFEXbull imp_tot_conc debe utilizarse para los importes no gravados (por ej cheques rechazados)bull IVA 0 es distinto a No Gravado (seriacutea imp_tot_conc) o Exento (imp_op_ex) En esos casos no vaalicuota de iva e imp_iva = NULL y imp_neto = 0 (ver validaciones arriba)
bull
Si se usa IVA 0 en el subtotal de la aliacutecuota iva_id=3 se debe pasar base_imp = 100 e importe = 0Ademaacutes imp_neto = 100 (gravado aunque no liquide IVA)
bull
Recordamos que si la AFIP detecta una validacioacuten no obligatoria (por ej no corresponde emitir factura A)devolvera un mensaje (en el atributo WSFEv1Obs) y el IVA liquidado no puede computarse como creacuteditofiscal (la factura debe incorporar dichos mensajes)
Dependiendo del caso los mensajes de validacioacuten pueden ser enviados por AFIP tanto en WSFEv1Obs o enWSFEv1ErrMsg se deben revisar ambos campos
Nota estas consideraciones pueden variar en cada caso dependiendo de cada situacioacuten particular frente aAFIP Recomendamos consultar con el contador los aspectos legales y la normativa vigente
Ejemplo
Ejemplo Solicitud CAE WSFEv1
Autorizar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSFEv1 As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1tra = WSAACreateTRA(wsfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() +
Validaciones WSFEv1 49
Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service WSAA para autenticarcache = directorio temporal (usar predeterminado)url_wsdl = httpswsaahomoafipgovarwsservicesLoginCms usar wsaaafipgovar en produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSAAConectar(cache url_wsdl proxy wrapper)ta = WSAALoginCMS(cms)
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSFEv1 = CreateObject(WSFEv1)DebugPrint WSFEv1version
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEv1Token = WSAATokenWSFEv1Sign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEv1Cuit = 20267565393
Conectar al Servicio Web de Facturacioacutencache = directorio temporal (usar predeterminado)url_wsdl = httpswswhomoafipgovarwsfev1serviceasmxWSDL usar servicios1 para produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSFEv1Conectar(cache url_wsdl proxy) homologacioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEv1DummyDebugPrint appserver status WSFEv1AppServerStatusDebugPrint dbserver status WSFEv1DbServerStatusDebugPrint authserver status WSFEv1AuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4001cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta) + 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 20267565393cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Ejemplo Solicitud CAE WSFEv1 50
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
datos de compradores RG 4109-E bienes muebles registrables ()If False Then solo productos y si hay maacutes de un comprador ok = WSFEv1AgregarComprador(80 30500010912 9999) ok = WSFEv1AgregarComprador(80 30999032083 001)End If
Solicito CAEcae = WSFEv1CAESolicitar()
DebugPrint Resultado WSFEv1ResultadoDebugPrint CAE WSFEv1cae
DebugPrint Numero de comprobante WSFEv1CbteNro
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSFEv1XmlRequestDebugPrint WSFEv1XmlResponse
MsgBox Resultado amp WSFEv1Resultado amp CAE amp cae amp Venc amp WSFEv1Vencimiento amp Obs amp WSFEv1obs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEv1eventos MsgBox evento vbInformation EventoNext
Ejemplo Consultar CAE WSFEv1
Recuperar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia continua elejemplo anterior) CAE normal
Buscar la facturacae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEv1FechaCbteDebugPrint Fecha Vencimiento CAE WSFEv1VencimientoDebugPrint Importe Total WSFEv1ImpTotal
comparar con los datos del ejemplo anterior
Ejemplo Consultar CAE WSFEv1 51
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIP amp cae amp vs amp cae2Else MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
obtener datos del encabezado (a partir de actualizacioacuten 117a)cae = wsfev1ObtenerCampoFactura(cae)tipo_doc = wsfev1ObtenerCampoFactura(tipo_doc)nro_doc = wsfev1ObtenerCampoFactura(nro_doc)imp_total = wsfev1ObtenerCampoFactura(imp_total) obtener primer alicuota de IVAimp_iva1 = wsfev1ObtenerCampoFactura(iva 0 importe) obtener primer tributoimp_trib1 = wsfev1ObtenerCampoFactura(tributos 0 importe) obtener primer opcionalvalor_opcional1 = wsfev1ObtenerCampoFactura(opcionales 0 valor) obtener primer coacutedigo de observacion de AFIPobs_code1 = wsfev1ObtenerCampoFactura(obs 0 code) pruebo obtener el segundo mensaje de observacion inexistenteobs_code2 = wsfev1ObtenerCampoFactura(obs 1 msg)debugPrint wsfev1Excepcion El campo 1 solicitado no existe
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1
Ejemplo para obtener las tablas de parametros en este caso puntos de venta habilitados (uacutetil en produccioacutenpara verificar el acceso al webservice)
recupero tabla de paraacutemetros de punto de venta habilitado (3|EmisionTipoCAE|BloqueadoN|FchBajaNULL)For Each x In WSFEv1ParamGetPtosVenta() DebugPrint xNext
Ejemplo Solicitud CAEA y registro informativo WSFEv1
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE Anticipado
PASO 1 Solicito CAE Anticipado para el periacuteodo NOTA solicitar por uacutenica vez para un determinado periacuteodo consultar si se ha solicitado previamente
periodo = 201102 Antildeo y mesorden = 2 Segunda Quincena
consulto CAEA ya solicitadoCAEA = WSFEv1CAEAConsultar(periodo orden)If CAEA = Then
solicito nuevo CAEA CAEA = WSFEv1CAEASolicitar(periodo orden)End If
MsgBox Periodo amp periodo amp Orden amp orden amp vbCrLf amp CAEA amp CAEA amp vbCrLf amp _Obs amp WSFEv1Obs amp vbCrLf amp _Errores amp WSFEv1ErrMsg
Si no tengo CAEA terminoIf CAEA = Then End
PASO 2 Establezco los valores de la factura a informar
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1 52
tipo_cbte = 6punto_vta = 4005cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta)If cbte_nro = Then cbte_nro = 0 no hay comprobantes emitidosElse cbte_nro = CLng(cbte_nro) convertir a entero largoEnd Iffecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
creo una factura (con CAEA)ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz CAEA fecha_hs_gen)
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
Informo comprobante emitido con CAE anticipadocae = WSFEv1CAEARegInformativo()
DebugPrint Resultado WSFEv1Resultado
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura o completar el registro de encabezado (ver archivo deintercambio) con los siguiente paraacutemetros
Ejemplo Solicitud CAEA y registro informativo WSFEv1 53
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc seguacuten tabla de paraacutemetros de AFIP) y nuacutemero deDocumento del cliente (receptor de la factura) Usar tipo_doc=99 y nro_doc=0 para consumidoresfinales (Factura B lt $1000)
bull
tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSFE)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta generalmente el mismo nuacutemero si es unafactura individual o un rango si son Factura B lt $ 1000 a Consumidor Final -en este uacuteltimo caso seobtiene un uacutenico CAE para el lote-)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la factura (debe ser igual a la suma de imp_tot_conc + imp_op_ex +imp_neto + imp_iva + imp_trib)
bull
imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la factura (igual a la suma de base_imp para todas lasalicuotas)
bull
imp_iva Importe del IVA liquidado (igual a la suma de importe_iva para todas las aliacutecutoas) Enviarnull o similar si no corresponde y no se enviacutean subtotales por aliacutecuota
bull
imp_trib Importe de otros tributos (incluyendo percepciones de IVA retenciones IVA no inscriptoetc)
bull
imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros actualmente solo PES)bull moneda_ctz Cotizacioacuten de la moneda de la factura (actualmente solo 100)bull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull caea codigo de autorizacioacuten anticipado (si corresponde)bull
Luego por cada alicuota de IVA (excepto para no gravado y exento) se debe llamar al meacutetodo AgregarIva ocompletar el registro respectivo con los siguientes paraacutemetros
iva_id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros AFIP)bull base_imp base imponible (importe)bull importe_iva importe liquidado (base_imp por alicuota)bull
De existir otros tributos (percepcionesretenciones o similares) se debe llamar al meacutetodo AgregarTributo ocompletar el registro respectivo con los siguientes paraacutemetros
tributo_id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros AFIP)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc o completar el registro respectivo para detallar loscomprobantes asociados a una nota de creacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo CAESolicitar o CAEARegInformativo dependiendo de lamodalidad (o ejecutar el programa RECE1 si se esta utilizando la herramienta por linea de comando)
Descripcioacuten de la obtencioacuten de CAE CAEA 54
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEv1Resultado= A (Aceptado) y WSFEv1Vencimiento del CAE (fch_venc_cae) Sino devuelve cae = La interfase nopudo procesar la respuesta del WebService o bien la conexioacuten a internet esta caiacuteda las direcciones de losservidores son incorrectas o el servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEv1Resultado = R (Rechazado) y WSFEv1Obs (o WSFEv1ErrMsg) con los diversos motivos derechazo proporcionados por el webservice (ver WSFEMotivo)
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Como requisito previo para la modalidad CAE Anticipado se debe llamar a CAEASolicitar oCAEAConsultar con los datos del periodo y orden (antes de comenzar la quincena) para obtener el uacutenicoCAEA para los comprobantes del periacuteodo
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (CompConsultar) o usar la rutina deReproceso Automaacutetico incluida en este componente
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEV1 en el sitio de la AFIP
Minisitio Factura Electroacutenica AFIP informacioacuten generalbull Manual para el desarrolladorpdf Informacioacuten importante sobre la operatoriabull
Reproceso Automaacutetico
Importante En el caso de que la conexioacuten se interrumpa al llamar a CAESolicitar luego de que la AFIPregistre la factura y antes de que la informacioacuten del CAE llegue al equipo se debe llamada aCompConsultar con los paraacutemetros de la factura (tipo_cbte punto_vta cbte_nro) para recuperar el CAEgenerado anteriormente (ver ejemplo pseudocoacutedigo y por RECE1 get)
Este procedimiento puede ser realizado automaacuteticamente por la interfaz (de manera similar a como realizabaAFIP originalmente en WSFEv0) habilitando el atributo Reprocesar = True (valor predeterminado) conlo que la interfaz automaticamente
Solicita un nuevo CAE en caso de que no exista en los registros de la AFIPbull Consulta y obtiene el CAE anterior en caso de que ya exista en los registros de AFIPbull
En ese caso si se da un reprocesamiento automaacutetico como se mencionoacute en el primer parrafoWSFEReproceso se establece a S para indicar que el CAE se ha recuperado
Si bien no se utiliza un ID por lo que se minimizan los errores al reprocesar los comprobantes igualmente serecomienda revisar el atributo de Reproceso ya que un incorrecto uso puede generar inconvenientes alregistrar los comprobantes en AFIP Para ello la interfaz cuenta con los atributos CbteNro FechaCbteImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTrib o XmlRequest yXmlResponse que deben ser contrastados contra la informacioacuten enviada en el caso de interrupciones oinconvenientes en la comunicacioacuten (a partir de la versioacuten 107d si Reproceso = S la interfaz verificoacuteautomaacuteticamente todos los datos enviados con los registrados en la AFIP y estos concuerdan)
Se recomienda almacenar los datos en un medio durable para poder enviar la misma factura que fuera
Reproceso Automaacutetico 55
interrumpida salvo que se tenga certeza de que la misma no ha sido procesada por AFIP Especialmente sedeberiacutea guardar el nuacutemero de factura antes de solicitar CAE y no utilizar ult o el meacutetodoCompUltimoAutorizado para consultar el uacuteltimo nuacutemero de comprobante emitido ya que ante cualquierinterrupcioacuten se no se podriacutea recuperar los datos registrados en AFIP (o se podriacutean generar duplicados)
En siacutentesis al re-enviar los datos de un comprobante que por alguacuten motivo no ha devuelto CAE (cuando lacomunicacioacuten se ha interrumpido y no ha sido aceptado o rechazado formalmente con Resultado=A o R)se recomienda revisar el reproceso y los datos registrados (devueltos por la interfaz) o en su defectodeshabilitar Reprocesar con False e implementar un procedimiento propio de recuperacioacuten ante fallas
Si el reproceso estaacute habilitado no es necesario modificar la aplicacioacuten en caso de fallas simplementereintentar la solicitud de CAE o informacioacuten de CAEA y la interfaz realizaraacute los meacutetodos pertinentes seguacutense describioacute anteriormente
En caso de que no haya sido necesario reprocesar el requerimiento el atributo Reproceso quedaraacute vacioEn caso de que haya sido necesario reprocesar pero no ha sido exitoso (ocurrioacute un error o validacioacuten que nopermitioacute recuperar el CAE o los datos enviados no concuerdan con los registrados en AFIP) Reprocesoseraacute N y se informaraacute el error original
Lo expuesto anteriormente aplica tambieacuten a CAEA -anticipado- al informar los comprobantes emitidos(CAEARegInformativo)
En ambas ocasiones se puede consultar el atributo EmisionTipo que contiene CAE o CAEA dependiendodel caso
Nota El Reproceso automaacutetico estaacute incluido internamente en CAESolicitar y CAEARegInformativopor lo que estaacute disponible tanto en la biblioteca Python Interfaz COM la herramienta por liacutenea de comandoRECE1EXE y al aplicativo PyRece
Advertencia El Reproceso automaacutetico es una caracteriacutestica adicional propia de la interface por lo tantopuede sufrir variaciones o mejoras se recuerda que la informacioacuten expuesta en esta documentacioacuten aplica a lauacuteltima versioacuten de los instaladores
Factura C Monotributo Exento
Seguacuten RG 30672011 se adiciona la posibilidad de autorizar comprobantes clase C (monotributistas) aWSFEv1 (RG2485)
Seguacuten RG 37492015 se incluye a los sujetos exentos en el impuesto al valor agregado Para poder emitircomprobantes clase C ademaacutes de seguir las pautas sentildealadas en esta seccioacuten el punto de venta debe estardado de alta como Factura Electroacutenica - Exento en IVA - Web Services
Los siguientes coacutedigos de comprobantes (tipo_cbte) pueden ser utilizados en este caso
11 Factura Cbull 12 Nota de Deacutebito Cbull 13 Nota de Creacutedito Cbull 15 Recibo Cbull
Los requisitos fundamentales para poder validar un comprobante informado son las los siguientes
Factura C Monotributo Exento 56
Ingresar siempre imp_tot_conc = 01 Ingresar siempre imp_op_ex = 02 Ingresar siempre imp_iva = 03 Informar en imp_neto el importe subtotal de la factura4 No informar subtotales de IVA (AgregarIVA)5
Coacutedigo de Ejemplo
Establezco los valores de la factura a autorizartipo_cbte = 11punto_vta = 4002cbte_nro = 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 10000 imp_tot_conc = 000 imp_neto = 10000imp_iva = 000 imp_trib = 000 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 2 o 3)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Solicito CAECAE = WSFEv1CAESolicitar()
Documentacioacuten Oficial Facturacioacuten Electroacutenica RG 2485 Proyecto FE v25 - Manual para el desarrollador(Revisioacuten correspondiente al 01 de Abril de 2015)
Datos Opcionales AFIP WSFEv1
El componente permite enviar los datos opcionales requeridos por las diversas resoluciones de AFIP seguacuten latabla de paraacutemetros Disponible desde actualizacioacuten 115b
Datos opcionales para proyectos promovidos
WSFEv1AgregarOpcional(2 1234) identificador del proyecto
Datos opcionales para RG Bienes Usados 3411 (del vendedor)
WSFEv1AgregarOpcional(91 Juan Perez) Nombre y Apellido WSFEv1AgregarOpcional(92 200) Nacionalidad (coacutedigo de paiacutes)WSFEv1AgregarOpcional(93 Balcarce 50) Domicilio
Datos opcionales para RG 3668 Impuesto al Valor Agregado - Art12 (presuncioacuten de no vinculacioacuten con laactividad gravada FORM 8001)
WSFEv1AgregarOpcional(5 02) IVA Excepciones (01 LocadorPrestador 02 Conferencias 03 RG 74 04 Bienes de cambio 05 Ropa de trabajo 06 Intermediario)
Datos Opcionales AFIP WSFEv1 57
WSFEv1AgregarOpcional(61 80) Firmante Doc Tipo (80 CUIT 96 DNI etc)WSFEv1AgregarOpcional(62 20267565393) Firmante Doc NroWSFEv1AgregarOpcional(7 01) Caraacutecter del Firmante (01 Titular 02 DirectorPresidente 03 Apoderado 04 Empleado)
Datos opcionales para RG 3749 (RG 3368 Establecimientos de educacioacuten puacuteblica de gestioacuten privada)
WSFEv1AgregarOpcional(10 1) Actividad ComprendidaWSFEv1AgregarOpcional(1011 80) Tipo de Documento (titular del pago)WSFEv1AgregarOpcional(1012 20267565393) Nuacutemero de Documento (titular del pago)
Datos opcionales para RG4520
WSFEv1AgregarOpcional(5 01) Actividad
Datos opcionales para FEv213 (RG 4367 Factura de Creacutedito Electroacutenica MiPyMEs (FCE))
WSFEv1AgregarOpcional(2101 2850590940090418135201) CBUWSFEv1AgregarOpcional(2102 pyafipws) aliasWSFEv1AgregarOpcional(27 SCA) tipo de transmisioacuten (desde el 01042021) if tipo_cbte in (203 208 213) WSFEv1AgregarOpcional(22 S) Anulacioacuten
Obtencioacuten de Atributos Avanzados WSFEv1
En versiones recientes (112a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosde la respuesta (uacutetiles para depuracioacuten y solucioacuten de errores) con los meacutetodos AnalizarXml yObtenerTagXml
Ejemplo para recuperar datos puntuales de un comprobante emitido (moneda cotizacioacuten CUIT etc)
cae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)ok = WSFEv1AnalizarXml(XmlResponse)If ok Then
datos del encabezado DebugPrint CAE WSFEv1ObtenerTagXml(CodAutorizacion) WSFEv1CAE DebugPrint CbteFch WSFEv1ObtenerTagXml(CbteFch) WSFEv1FechaCbte DebugPrint Moneda WSFEv1ObtenerTagXml(MonId) DebugPrint Cotizacion WSFEv1ObtenerTagXml(MonCotiz) DebugPrint DocTipo WSFEv1ObtenerTagXml(DocTipo) DebugPrint DocNro WSFEv1ObtenerTagXml(DocNro)
ejemplos con arreglos (primer elemento = 0 segundo = 1 etc) DebugPrint Primer IVA (alci id) WSFEv1ObtenerTagXml(Iva AlicIva 0 Id) DebugPrint Primer IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 0 Importe) DebugPrint Segundo IVA (alic id) WSFEv1ObtenerTagXml(Iva AlicIva 1 Id) DebugPrint Segundo IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 1 Importe) DebugPrint Primer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 0 Desc) DebugPrint Primer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 0 Importe) DebugPrint Segundo Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 1 Desc) DebugPrint Segundo Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 1 Importe) DebugPrint Tercer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 2 Desc) DebugPrint Tercer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 2 Importe)End If
Obtencioacuten de Atributos Avanzados WSFEv1 58
Servicio Web de Factura Electroacutenica Mercado InternoPrograma Matrix (WSMTXCA)
EL WSMTXCA es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten A (con detalle de factura) de la Resolucioacuten General 29042010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYY-MM-DD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los artiacuteculos losimpuestos (IVA) y tributos (similar a WSFEX y WSBFE)
A su vez el WSMTXCA devuelve mensajes de eventos (mantenimiento programado advertencias etc) losque deben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva tributos unidades de medida Estas tablas pueden sufrirmodificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha de vigencia(desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia del WSFE quelas tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiFacturaElectronicaMTXCAService
La programacioacuten de la interfase WSMTXCA es similar a WSFE WSFEX WSBFE y WSFEv1 serecomienda revisarlos
Objeto
El objeto COM se crea invocando a CreateObject(WSMTXCA)bull
Meacutetodos
Meacutetodos principales
Conectar(cache wsdl proxy) realiza la conexioacuten a los servidores de la AFIP (primerpaso esencial) Si no se especifica url del wsdl se utiliza servidores de homologacioacuten El paraacutemetrocache es un directorio donde se almacenan internamente la descripcioacuten del servicio (archivo WSDL)para mayor optimizacioacuten Proxy es un string con la informacioacuten del servidor intermediousuarioclaveservidorpuerto
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto
bull
Servicio Web de Factura Electroacutenica Mercado Interno Programa Matrix (WSMTXCA) 59
imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pagofecha_serv_desde fecha_serv_hasta moneda_id moneda_ctz obs) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetrosEstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura devuelve True si el campo pertenece al encabezado y se haactualizado correctamente (ver ejemplo)
bull
AgregarIva(id base_imp importe) agrega internamente un subtotal de IVA a unafactura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible e importeVer ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(id Desc base_imp alic importe) agrega internamente unsubtotal de tributo a una factura para luego poder autorizarla recibe los datos del impuesto nacionalprovincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccbte_cuit fecha) agrega internamente un comprobante asociado a una factura para luegopoder autorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detallede los paraacutemetros El campo cuit fueacute agregado seguacuten Release v05 15-03-2017 disponible desdeactualizacioacuten 113a El campo fecha fue agregado en Realse v010 01072019
bull
AgregarItem(u_mtx cod_mtx codigo ds qty umed precio bonifcod_iva imp_iva imp_subtotal) agrega internamente un item (linea de factura) a unafactura para luego poder autorizarla recibe los datos del item a factura a emitir Ver ejemplo para eldetalle de los paraacutemetros
bull
EstablecerCampoItem(campo valor) establece individualmente el valor de un campo deldetalle de la factura (uacuteltimo item agregado) devuelve True si el campo pertenece al encabezado y seha actualizado correctamente (ver ejemplo)
bull
AutorizarComprobante() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo deAutorizacioacuten Electroacutenico (CAE) Ver ejemplo
bull
AutorizarAjusteIVA() autoriza un ajuste de IVA (notas de creacutedito deacutebito) Se debe informarel coacutedigo 7790001001139 e informar solo el importe de IVA ajustado
bull
SolicitarCAEA(periodo orden) permite obtener un CAEA y su respectivo periacuteodo devigencia (fecha de validez desde y fecha de validez hasta)
bull
ConsultarCAEA(periodo orden caea) permite consultar la informacioacutencorrespondiente a un CAEA previamente otorgado (recibe periacuteodoorden o CAEA)
bull
InformarComprobanteCAEA() enviacutea la informacioacuten del comprobante emitido y asociado a unCAEA (ver AutorizarComprobante)
bull
InformarAjusteIVACAEA() enviacutea la informacioacuten del comprobante de ajuste de IVA emitidospara un CAEA (ver AutorizarAjusteIVA)
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125a 200620
bull
Meacutetodos secundarios
ConsultarComprobante(tipo_cbte punto_vta cbte_nro) recupera los datos deuna factura autorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobanteoriginal y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vezestablece los datos de la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle delos paraacutemetros y valores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos 60
ConsultarMonedas() ConsultarTiposComprobante()ConsultarTiposDocumento() ConsultarAlicuotasIVA()ConsultarCondicionesIVA() ConsultarUnidadesMedida()ConsultarTiposTributo() recupera valores referenciales de coacutedigos de las tablas deparaacutemetros devuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -sicorresponde- (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
ConsultarCotizacionMoneda(moneda_id) devuelve cotizacioacuten y fecha de la monedaindicada como paraacutemetro
bull
ConsultarPuntosVentaCAE() permite consultar los puntos de venta habilitados para CAE eneste WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPuntosVentaCAEA() permite consultar los puntos de venta habilitados para CAEAen este WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPtosVtaCAEANoInformados(caea) permite consultar que puntos de venta auacutenno fueron informados para un CAEA determinado devuelve una lista (array de strings) con los datosdel numero_punto_venta
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importes del comprobantebull ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull
Errores
La interfase procesa los errores WSMTXCA y los almacena en las proipedades Errores y ErrCodeErrMsgVer especificaciones teacutecnicas del WSMTXCA para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ejemplo
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSMTXCA As Object
Atributos 61
On Error GoTo ManejoError
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSMTXCAtra = WSAACreateTRA(wsmtxca)DebugPrint tra
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)DebugPrint cms
Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten (cambiar para produccioacuten)
Imprimir el ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint taDebugPrint Token WSAATokenDebugPrint Sign WSAASign
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSMTXCA = CreateObject(WSMTXCA)DebugPrint WSMTXCAversion
Setear tocken y sing de autorizacioacuten (pasos previos)WSMTXCAToken = WSAATokenWSMTXCASign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSMTXCACuit = 20267565393
Conectar al Servicio Web de FacturacioacutenWSDL = httpsserviciosjavaafipgovarwsmtxcaservicesMTXCAServicewsdlok = WSMTXCAConectar( WSDL) produccioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSMTXCADummyDebugPrint appserver status WSMTXCAAppServerStatusDebugPrint dbserver status WSMTXCADbServerStatusDebugPrint authserver status WSMTXCAAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4000cbte_nro = WSMTXCACompUltimoAutorizado(tipo_cbte punto_vta)fecha = Format(Date yyyy-mm-dd)concepto = 3tipo_doc = 80 nro_doc = 30000000007cbte_nro = CLng(cbte_nro) + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000
Ejemplo 62
imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs = Observaciones Comerciales libre
ok = WSMTXCACrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz obs)
Agrego los comprobantes asociadosIf False Then solo si es nc o nd tipo = 19 pto_vta = 2 nro = 1234 ok = WSMTXCAAgregarCmpAsoc(tipo pto_vta nro)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSMTXCAAgregarTributo(id Desc base_imp alic importe)
Agrego subtotales de IVAid = 5 21base_im = 10000importe = 2100ok = WSMTXCAAgregarIva(id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890codigo = P0001ds = Descripcion del producto P0001qty = 10000umed = 7precio = 10000bonif = 000cod_iva = 5imp_iva = 2100imp_subtotal = 12100ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx DESC Descuento 0 _
99 0 0 cod_iva -2100 -12100)
Solicito CAEcae = WSMTXCAAutorizarComprobante()
verifico que no haya erroresFor Each er In WSMTXCAErrores MsgBox er vbInformation ErrorNext
Ejemplo 63
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSMTXCAXmlRequestDebugPrint WSMTXCAXmlResponse
MsgBox Resultado amp WSMTXCAResultado amp CAE amp cae amp _ Venc amp WSMTXCAVencimiento amp Obs amp WSMTXCAobs _
vbInformation + vbOKOnly
Ejemplo para obtener coacutedigos referenciales (tabla moneda)
recupero tabla de paraacutemetros de moneda (id descripcioacuten)For Each x In WSMTXCAConsultarMonedas() DebugPrint xNext
busco la cotizacioacuten del dolar (ver Param Mon)ctz = WSMTXCAConsultarCotizacionMoneda(DOL)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSMTX factura electroacutenica con detalle)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta ambos el mismo nuacutemero si es una facturaindividual)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull imp_subtotal subtotal sin ivabull imp_trib Importe de otros tributosbull imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull moneda_ctz Cotizacioacuten de la moneda de la facturabull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull obs observaciones comerciales (campo libre)bull caea debe completarse si se informa una factura en esta modalidad (obtenido con SolicitarCAEA)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
u_mtx cantidad de unidades(ej 123456)bull cod_mtx codigo mtx del producto (ej 1234567890)bull codigo codigo opcional del producto (ej P0001)bull ds Descripcioacuten completabull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull
Descripcioacuten de la obtencioacuten de CAE CAEA 64
bonif Bonificacioacutenbull cod_iva Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_iva importe liquidado de IVAbull imp_subtotal = Importe total (incluyendo descuentos e IVA)bull
Para items descriptivos utilizar umed = 0 Para anticipos o descuentos utilizar umed = 99
Por cada alicuota de IVA se debe llamar al meacutetodo AgregarIva con los siguientes paraacutemetros
id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull base_imp base imponible (importe)bull importe importe liquidadobull
De existir otros tributos se debe llamar al meacutetodo AgregarTributo con los siguientes paraacutemetros
id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los comprobantes asociados a una nota decreacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobantebull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo AutorizarComprobante o InformarComprobanteCAEA
Si no hubiere inconvenientes la llamada debe devolver el CAE CAEA y se establece el atributoWSMTXCAResultado = A (Aceptado) y WSMTXCAVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSMTXCAObscon los diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (ConsultarComprobante)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSMTX en el sitio de la AFIP
Manual Desarrollador Informacioacuten importante sobre la operatoriabull
Descripcioacuten de la obtencioacuten de CAE CAEA 65
Establecer campos individualmente (ejemplo WSMTXCA)
Para lenguajes que no soporten el pasaje de varios parametros a un meacutetodo (por ej SERVOY por sulimitacioacuten de 6 argumentos) desde la versioacuten 106a es posible crear la factura en blanco (todos los camposvacios) y luego establecer los campos individualmente
ok = WSMTXCACrearFactura()ok = WSMTXCAEstablecerCampoFactura(concepto concepto)ok = WSMTXCAEstablecerCampoFactura(tipo_doc tipo_doc)ok = WSMTXCAEstablecerCampoFactura(nro_doc nro_doc)ok = WSMTXCAEstablecerCampoFactura(tipo_cbte tipo_cbte)ok = WSMTXCAEstablecerCampoFactura(punto_vta punto_vta)ok = WSMTXCAEstablecerCampoFactura(cbt_desde cbt_desde)ok = WSMTXCAEstablecerCampoFactura(cbt_hasta cbt_hasta)ok = WSMTXCAEstablecerCampoFactura(imp_total imp_total)ok = WSMTXCAEstablecerCampoFactura(imp_tot_conc imp_tot_conc)ok = WSMTXCAEstablecerCampoFactura(imp_neto imp_neto)ok = WSMTXCAEstablecerCampoFactura(imp_subtotal imp_subtotal)ok = WSMTXCAEstablecerCampoFactura(imp_trib imp_trib)ok = WSMTXCAEstablecerCampoFactura(imp_op_ex imp_op_ex)ok = WSMTXCAEstablecerCampoFactura(fecha_cbte fecha_cbte)ok = WSMTXCAEstablecerCampoFactura(fecha_venc_pago fecha_venc_pago)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_desde fecha_serv_desde)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_hasta fecha_serv_hasta)ok = WSMTXCAEstablecerCampoFactura(moneda_id moneda_id)ok = WSMTXCAEstablecerCampoFactura(moneda_ctz moneda_ctz)ok = WSMTXCAEstablecerCampoFactura(observaciones Obs)ok = WSMTXCAEstablecerCampoFactura(caea CAEA)ok = WSMTXCAEstablecerCampoFactura(vencimiento vencimiento)
Para los items de detalle seriacutea similar
ok = WSMTXCAAgregarItem()ok = WSMTXCAEstablecerCampoItem(u_mtx u_mtx)ok = WSMTXCAEstablecerCampoItem(cod_mtx cod_mtx)ok = WSMTXCAEstablecerCampoItem(codigo codigo)ok = WSMTXCAEstablecerCampoItem(ds ds)ok = WSMTXCAEstablecerCampoItem(qty qty)ok = WSMTXCAEstablecerCampoItem(umed umed)ok = WSMTXCAEstablecerCampoItem(precio precio)ok = WSMTXCAEstablecerCampoItem(bonif bonif)ok = WSMTXCAEstablecerCampoItem(iva_id cod_iva)ok = WSMTXCAEstablecerCampoItem(imp_iva imp_iva)ok = WSMTXCAEstablecerCampoItem(imp_subtotal imp_subtotal)
Interfase por archivos de texto siacutemil SIAP - RECE
Para lenguajes donde no es posible utilizar objetos COM se desarrolloacute una interfaz de texto (command lineinterfase) para poder utilizar los Web Services de la AFIP que funciona como un programa independientemanteniendo las ventajas y caracteriacutesticas presentadas anteriormente
Formatos de archivos de intercambio soportados
Archivos TXT de Texto plano estilo COBOL y aplicativos SIAP AFIPbull Tablas DBF para dBase III Fox Clipper Harbour (xBase) etcbull Formato JSON para lenguajes de programacioacuten maacutes modernos (PHP JAVA JavaScript etc)bull
Establecer campos individualmente (ejemplo WSMTXCA) 66
La herramienta es multiplataforma (LinuxWindows)
Ver secciones anteriores sobre la descripcioacuten de las opciones de configuracioacuten campos y procedimientos
Consideraciones Generalesbull Autenticacioacuten (WSAA) ticket de acceso certificados y claves privadasbull Gestioacuten de CAE (WSFEv1) mercado interno sin detalle (version 1)bull Gestioacuten de CAE (WSMTXCA) mercado interno con detalle (matrix)bull Gestioacuten de CAE (WSFEX) exportacioacutenbull
Configuracioacuten
Editar el archivo RECEINI en la carpeta de la intefase (CPYAFIPWS)
CERT ubicacioacuten del archivo certificado (ver WSAA)bull PRIVATEKEY ubicacioacuten del archivo de la clave privada (ver WSAA)bull CUIT CUIT del emisorbull ENTRADA ubicacioacuten del archivo de texto de entrada (para cada webservice)bull SALIDA ubicacioacuten del archivo de texto de salida (para cada webservice)bull URL direccioacuten de los servicios web de produccioacuten (para cada webservice)bull Seccion [DBF] configura los nombres de archivos con las tablas requeridasbull
Ejemplo
[WSAA]CERT=CSISTEMAempresacrtPRIVATEKEY= CSISTEMAempresakeyURL=httpswsaaafipgovarwsservicesLoginCmswsdl[WSFEv1]CUIT=30000000000CBU=2222222222222222222222ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
[WSMTXCA]CUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtReprocesar= SURL=httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAService
[WSBFE] aplica tambieacuten a WSBFEv1CUIT=30000000000ENTRADA= CSISTEMAentradatxtSALIDA= CSISTEMAsalidatxtURL=httpsservicios1afipgovarwsbfev1serviceasmxWSDL
[WSFEXv1] aplica tambieacuten a WSFEXCUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfexv1serviceasmxWSDL
Interfase por archivos de texto siacutemil SIAP - RECE 67
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalles = detallesdbfDatos Opcionales = opcionalesdbf
Seccioacuten [WSAA]
Configuracioacuten referente al web service de autenticacioacuten
CERT ubicacioacuten del archivo que contiene el certificadobull PRIVATEKEY ubicacioacuten de la clave privada correspondiente al certificadobull URL direccioacuten del servidor de AFIP Por ej para produccioacuten httpswsaaafipgovarwsservicesLoginCmswsdl
bull
Seccioacuten [WSFEv1]
Configuracioacuten referente al web service de factura nacional
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfev1serviceasmxWSDL
bull
Seccioacuten [WSFEX]
Configuracioacuten referente al web service de factura exportacioacuten
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfexserviceasmx
bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull
Seccioacuten [PROXY]
Configuracioacuten referente al servidor intermedio de salida a internet (firewall antivirus proxy etc) ej
Configuracioacuten 68
HOST = localhostbull PORT = 8000bull USER = marianobull PASS = reingartbull
NOTA solo debe configurarse esta seccioacuten si corresponde contactar al administrador de red de la empresapara determinar los paraacutemetros correctos de cada caso Para maacutes informacioacuten ver Errores de Conectividad
Formato de archivos de entrada y salida
Factura electroacutenica normal (WSFE)
El formato utilizado es similar a RECE pero extendido con algunos campos necesarios para utilizar losServicios Web A continuacioacuten se detalla nombre del campo posicioacuten inicial longitud y tipo
fecha_cbte (28A)bull tipo_cbte (102N)bull punto_vta (134N)bull cbt_desde (178N)bull cbt_hasta (258N)bull tipo_doc (362N)bull nro_doc (3811N)bull imp_total (7915I)bull imp_tot_conc (9415I)bull imp_neto (10915I)bull impto_liq (12415I)bull impto_liq_rni (13915I)bull imp_op_ex (15415I)bull cae (26114N)bull fecha_vto (2758A)bull resultado (2911A)bull motivo (2922A)bull reproceso (2941A)bull fecha_venc_pago (2958A)bull presta_serv (3031N)bull fecha_serv_desde (3048A)bull fecha_serv_hasta (3128A)bull id (32015N)bull
Tipos de campo
A Alfanumericobull N Numericobull I Importes con 2 decimales (sin incluir punto)bull
Los espacios no definidos se ignoran (completar con un espacio en blanco)
Para maacutes informacioacuten sobre los campos ver paraacutemetros y valores que retorna el meacutetodo Aut en el presentemanual
Seccioacuten [PROXY] 69
Como formato de entrada es posible utilizar el mismo archivo generado para el aplicativo SIAPRECE perono se podraacuten facturar servicios ya que los campo presta_serv y fecha_serv_desde y fecha_serv_hasta no estaacutencontemplados en dicho formato
Factura electroacutenica bienes de capital (WSBFE)
El formato es similar al de factura electroacutenica normal pero variacutea el tipo de registro (0 Encabezado 1 Detallede cada Item)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 0bull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numericobull Campo tipo_doc Posicioacuten 24 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 26 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 37 Longitud 15 Tipo Importebull Campo imp_tot_conc Posicioacuten 52 Longitud 15 Tipo Importebull Campo imp_neto Posicioacuten 67 Longitud 15 Tipo Importebull Campo impto_liq Posicioacuten 82 Longitud 15 Tipo Importebull Campo impto_liq_rni Posicioacuten 97 Longitud 15 Tipo Importebull Campo imp_op_ex Posicioacuten 112 Longitud 15 Tipo Importebull Campo impto_perc Posicioacuten 127 Longitud 15 Tipo Importebull Campo imp_iibb Posicioacuten 142 Longitud 15 Tipo Importebull Campo impto_perc_mun Posicioacuten 157 Longitud 15 Tipo Importebull Campo imp_internos Posicioacuten 172 Longitud 15 Tipo Importebull Campo imp_moneda_id Posicioacuten 187 Longitud 3 Tipo Alfanumericobull Campo imp_moneda_ctz Posicioacuten 190 Longitud 10 Tipo Importebull Campo zona Posicioacuten 200 Longitud 5 Tipo Alfanumericobull Campo cae Posicioacuten 205 Longitud 14 Tipo Numericobull Campo fecha_vto Posicioacuten 219 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 227 Longitud 1 Tipo Alfanumericobull Campo obs Posicioacuten 228 Longitud 2 Tipo Alfanumericobull Campo reproceso Posicioacuten 230 Longitud 1 Tipo Alfanumericobull Campo id Posicioacuten 231 Longitud 15 Tipo Numericobull
Detalle (por cada item)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 1bull Campo ncm Posicioacuten 2 Longitud 15 Tipo Alfanumericobull Campo sec Posicioacuten 17 Longitud 15 Tipo Alfanumericobull Campo qty Posicioacuten 32 Longitud 15 Tipo Importebull Campo umed Posicioacuten 47 Longitud 5 Tipo Numericobull Campo precio Posicioacuten 52 Longitud 15 Tipo Importebull Campo bonif Posicioacuten 67 Longitud 15 Tipo Importebull Campo imp_total Posicioacuten 82 Longitud 15 Tipo Importebull Campo iva_id Posicioacuten 97 Longitud 5 Tipo Numericobull Campo ds Posicioacuten 102 Longitud 200 Tipo Alfanumericobull
Factura electroacutenica normal (WSFE) 70
Si se informa el campo ID la factura se genera con dicho nuacutemero de secuencia De lo contrario para evitarproblemas y poder reprocesar el CAE se genera con un nuacutemero de secuencia del formatoTPPPPNNNNNNNN (tipo de comprobante punto de venta y nuacutemero de comprobante)
Factura electroacutenica exportacioacuten (WSFEX)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Formato
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 3bull Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo obs Posicioacuten 1618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 2618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 2668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 2671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 2691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 2692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 2706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 2714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 2715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 2716 Longitud 40 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 2756 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 2771 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 32 Longitud 12 Tipo Importe Decimalesbull Campo umed Posicioacuten 44 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 46 Longitud 12 Tipo Importe Decimales 3bull Campo imp_total Posicioacuten 58 Longitud 14 Tipo Importe Decimales 3bull Campo ds Posicioacuten 72 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica bienes de capital (WSBFE) 71
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Nota se utilizan 3 decimales para los importes y 6 para la cotizacioacuten de la moneda
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Tributo 2 IVA 3 Comprobante asociado 6 Opcionales 8 Periodo Comprobante asociado) y no tienedetalle de artiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbt_desde Posicioacuten 16 Longitud 8 Tipo Numericobull Campo cbt_hasta Posicioacuten 24 Longitud 8 Tipo Numericobull Campo concepto Posicioacuten 32 Longitud 1 Tipo Numericobull Campo tipo_doc Posicioacuten 33 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 35 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 46 Longitud 15 Tipo Importe Decimales 2bull Campo no_usar Posicioacuten 61 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 76 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 91 Longitud 15 Tipo Importe Decimales 2bull Campo imp_iva Posicioacuten 106 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 121 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 136 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 151 Longitud 3 Tipo Alfanumericobull Campo moneda_ctz Posicioacuten 154 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 164 Longitud 8 Tipo Alfanumericobull Campo cae Posicioacuten 172 Longitud 14 Tipo Alfanumericobull Campo fch_venc_cae Posicioacuten 186 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 194 Longitud 1 Tipo Alfanumericobull Campo motivos_obs Posicioacuten 195 Longitud 1000 Tipo Alfanumericobull Campo err_code Posicioacuten 1195 Longitud 6 Tipo Alfanumericobull Campo err_msg Posicioacuten 1201 Longitud 1000 Tipo Alfanumericobull Campo reproceso Posicioacuten 2201 Longitud 1 Tipo Alfanumericobull Campo emision_tipo Posicioacuten 2202 Longitud 4 Tipo Alfanumericobull Campo fecha_serv_desde Posicioacuten 2206 Longitud 8 Tipo Alfanumericobull
Factura electroacutenica exportacioacuten (WSFEX) 72
Campo fecha_serv_hasta Posicioacuten 2214 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 2222 Longitud 3 Tipo Numericobull Campo punto_vta Posicioacuten 2225 Longitud 5 Tipo Numericobull Campo fecha_hs_gen Posicioacuten 2230 Longitud 14 Tipo Alfanumerico formato yyyymmddhhmiss(pCAEA contingencia)
bull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tributo_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo desc Posicioacuten 18 Longitud 100 Tipo Alfanumericobull Campo base_imp Posicioacuten 118 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 133 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 148 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo iva_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo base_imp Posicioacuten 18 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 33 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numericobull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numericobull Campo nro Posicioacuten 9 Longitud 8 Tipo Numericobull Campo fecha Posicioacuten 17 Longitud 8 Tipo Numericobull Campo cuit Posicioacuten 25 Longitud 11 Tipo Numericobull
Opcionales Disponible desde actualizacioacuten 133b
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Compradores Disponible desde actualizacioacuten 137a (RG-4109-E Bienes Muebles Registrables)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo doc_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo doc_nro Posicioacuten 5 Longitud 80 Tipo Numerico Decimalesbull Campo porcentaje Posicioacuten 85 Longitud 6 Tipo Importe Decimales 2bull
Periodo Cbte Asoc Disponible desde actualizacioacuten 138a
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_desde Posicioacuten 2 Longitud 8 Tipo Numericobull Campo fecha_hasta Posicioacuten 10 Longitud 8 Tipo Numericobull
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 73
Factura electroacutenica Mercado Interno Matrix (WSMTXCA)
El formato es similar al de factura electroacutenica mercado interno version 1 pero variacutea el tipo de registro (0Encabezado 1 Tributo 2 IVA 3 Comprobante asociado 4 Detalle de cada item) y tiene detalle deartiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 10 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 12 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 14 Longitud 4 Tipo Numerico Decimalesbull Campo cbt_desde Posicioacuten 18 Longitud 8 Tipo Numerico Decimalesbull Campo cbt_hasta Posicioacuten 26 Longitud 8 Tipo Numerico Decimalesbull Campo concepto Posicioacuten 34 Longitud 1 Tipo Numerico Decimalesbull Campo tipo_doc Posicioacuten 35 Longitud 2 Tipo Numerico Decimalesbull Campo nro_doc Posicioacuten 37 Longitud 11 Tipo Numerico Decimalesbull Campo imp_total Posicioacuten 48 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 63 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 78 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 93 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 108 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 138 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 141 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 151 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_desde Posicioacuten 161 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_hasta Posicioacuten 171 Longitud 10 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 181 Longitud 14 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 195 Longitud 10 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 205 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 206 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 1206 Longitud 6 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 1212 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo reproceso Posicin 2212 Longitud 1 Tipo Alfanumerico Decimalesbull Campo emision_tipo Posicin 2213 Longitud 4 Tipo Alfanumerico Decimalesbull Campo observaciones Posicioacuten 2217 Longitud 1000 Tipo Alfanumerico Decimalesbull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tributo_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull Campo desc Posicioacuten 5 Longitud 100 Tipo Alfanumerico Decimalesbull Campo base_imp Posicioacuten 105 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 120 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 135 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo iva_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Mercado Interno Matrix (WSMTXCA) 74
Campo base_imp Posicioacuten 5 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 20 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Opcionales
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Detalle de item
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo u_mtx Posicioacuten 2 Longitud 10 Tipo Numerico Decimalesbull Campo cod_mtx Posicioacuten 12 Longitud 30 Tipo Alfanumerico Decimalesbull Campo codigo Posicioacuten 42 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 72 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo umed Posicioacuten 87 Longitud 3 Tipo Numerico Decimalesbull Campo precio Posicioacuten 90 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo bonif Posicioacuten 105 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo iva_id Posicioacuten 120 Longitud 3 Tipo Numerico Decimalesbull Campo imp_iva Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 138 Longitud 15 Tipo Importe Decimales 2bull Campo ds Posicioacuten 153 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo pais_dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo nombre_cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 2bull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1) 75
Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 4000 Tipo Alfanumerico Decimalesbull Campo obs_generales Posicioacuten 4618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 5618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 5668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 5671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 5691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 5692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 5706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 5714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 5715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 5716 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 6716 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 6731 Longitud 8 Tipo Alfanumerico Decimalesbull Campo excepcion Posicioacuten 6739 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 6839 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 6939 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo fecha_pago Posicioacuten 7939 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 50 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 52 Longitud 12 Tipo Importe Decimales 6bull Campo umed Posicioacuten 64 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 66 Longitud 12 Tipo Importe Decimales 6bull Campo importe Posicioacuten 78 Longitud 13 Tipo Importe Decimales 2bull Campo bonif Posicioacuten 91 Longitud 12 Tipo Importe Decimales 6bull Campo ds Posicioacuten 103 Longitud 4000 Tipo Alfanumerico Decimalesbull
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull Campo cbte_cuit Posicioacuten 17 Longitud 11 Tipo Numerico Decimalesbull
Formato Tablas xBase DBF (dBase III Fox Clipper)
Las ultimas versiones de la interfaz ademas de manejo por archivo de texto soporta manejo por tablas DBFEstas tablas pueden ser generadas con cualquier libreriacutea o aplicacioacuten compatible (incluso pueden ser abiertascon planillas de caacutelculo)
Formato Tablas xBase DBF (dBase III Fox Clipper) 76
Los tipos de campos son
C(l) caracter (longitud)bull N(ld) numerico (longitud y decimales)bull M camos memo (usado para errores y mensajes extensos gt250 caracteres)bull D campos fechabull
Los nombres de los campos son los mismos que se manejan para el archivo de texto pero sin el guioacuten bajo yrecortados a 10 caracteres
Se utiliza la libreriacutea Python dBase (dbf-08819) que soporta los siguientes tipos de archivos
dBase III Plusbull dBase III Plus wmemosbull dBase IVbull dBase IV SQLbull dBase IV wmemosbull dBase IV wmemosbull dBase IV wSQL tablebull dBase Vbull FoxBASEbull FoxPro wmemosbull Visual FoxProbull Visual FoxPro (auto increment field)bull
Reconoce archivos con extensioacuten DBF DBT FPT entre otros
Factura electroacutenica mercado interno (WSFEv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
IMPORTANTE algunos campos han cambiado su denominacioacuten en las uacuteltimas versiones para hacerloscompatibles con las tablas PDF (solo se muestra el nombre de campo perteneciente a la uacuteltima actualizacioacuten)
Encabezado (encabezadbf)
Encabezado (datos generales de la factura)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtdesde N(80)bull Campo cbthasta N(80)bull Campo concepto N(10)bull Campo tipodoc N(20)bull Campo nrodoc N(110)bull Campo imptotal N(152)bull Campo nousar N(152)bull Campo imptotconc N(152)bull
Factura electroacutenica mercado interno (WSFEv1) 77
Campo impneto N(152)bull Campo impiva N(152)bull Campo imptrib N(152)bull Campo impopex N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo fechavencp C(8)bull Campo cae C(14)bull Campo fchvenccae C(8)bull Campo resultado C(1)bull Campo motivosobs Mbull Campo errcode C(6)bull Campo errmsg Mbull Campo reproceso C(1)bull Campo emisiontip C(4)bull Campo fechaservd C(8)bull Campo fechaservh C(8)bull
Tributo (tributodbf)
Detalle de otros tributos
Campo tiporeg N(10)bull Campo tributoid N(160)bull Campo desc C(100)bull Campo baseimp N(152)bull Campo alic N(152)bull Campo importe N(152)bull
Iva (ivadbf)
Detalle de subtotales por aliacutecuota de IVA
Campo tiporeg N(10)bull Campo ivaid N(160)bull Campo baseimp N(152)bull Campo importe N(152)bull
Comprobante Asociado (comprobadbf)
Comprobante Asociado
Campo tiporeg N(10)bull Campo tipo N(30)bull Campo ptovta N(40)bull Campo nro N(80)bull
Opcionales (opcionaldbf)
Datos opcionales (adicionales seguacuten cada nueva RG 3411 3668 4004-E etc)
Encabezado (encabezadbf) 78
Campo tiporeg N(10)bull Campo opcionalid C(4)bull Campo valor C(250)bull
Compradores (compradodbf)
Datos para Venta de bienes muebles registrables (RG 4109-E)
Campo tiporeg N(10)bull Campo doctipo N(30)bull Campo docnro N(800)bull Campo porcentaje N(62)bull
Factura electroacutenica mercado interno matrix (WSMTXCA)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Tabla Encabezadbf Encabezado (datos generales de la factura)
tiporeg N(10)bull fechacbte C(10)bull tipocbte N(20)bull puntovta N(40)bull cbtdesde N(80)bull cbthasta N(80)bull concepto N(10)bull tipodoc N(20)bull nrodoc N(110)bull imptotal N(152)bull imptotconc N(152)bull impneto N(152)bull impsubtota N(152)bull imptrib N(152)bull impopex N(152)bull monedaid C(3)bull monedactz N(106)bull fechavencp C(10)bull fechaservd C(10)bull fechaservh C(10)bull cae N(140)bull fchvenccae C(10)bull resultado C(1)bull motivosobs Mbull errcode C(6)bull errmsg Mbull reproceso C(1)bull emisiontip C(4)bull observacio Mbull
Tabla Tributodbf Detalle de otros tributos
Opcionales (opcionaldbf) 79
tiporeg N(10)bull tributoid C(3)bull desc C(100)bull baseimp N(152)bull alic N(152)bull importe N(152)bull
Tabla Ivadbf Detalle de subtotales por aliacutecuota de IVA
tiporeg N(10)bull ivaid C(3)bull baseimp N(152)bull importe N(152)bull
Tabla Comprobadbf Comprobante Asociado
tiporeg N(10)bull tipo N(30)bull ptovta N(40)bull nro N(80)bull
Tabla Detallesdbf Detalles del item
tiporeg N(10)bull umtx N(100)bull codmtx C(30)bull codigo C(30)bull qty N(153)bull umed N(30)bull precio N(153)bull bonif N(153)bull ivaid N(30)bull impiva N(152)bull impsubtota N(152)bull ds Mbull
Factura electroacutenica exportacioacuten (WSFEXv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Encabezado (encabezadbf)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtenro N(80)bull Campo tipoexpo N(10)bull Campo permisoexi C(1)bull Campo paisdstcmp N(30)bull
Factura electroacutenica mercado interno matrix (WSMTXCA) 80
Campo nombreclie C(200)bull Campo cuitpaiscl N(110)bull Campo domicilioc Mbull Campo idimpositi C(50)bull Campo imptotal N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo obscomerci Mbull Campo obsgeneral Mbull Campo formapago C(50)bull Campo incoterms C(3)bull Campo incotermsd C(20)bull Campo idiomacbte C(1)bull Campo cae N(140)bull Campo fechavto C(8)bull Campo resultado C(1)bull Campo reproceso C(1)bull Campo motivosobs Mbull Campo id N(150)bull Campo fchvenccae C(8)bull Campo excepcion C(100)bull Campo errcode C(100)bull Campo errmsg Mbull
Detalle (detalledbf)
Campo tiporeg N(10)bull Campo codigo C(50)bull Campo qty N(122)bull Campo umed N(20)bull Campo precio N(122)bull Campo importe N(132)bull Campo bonif N(122)bull Campo ds Mbull
Permiso (permisodbf)
Campo tiporeg N(10)bull Campo idpermiso C(16)bull Campo dstmerc N(30)bull
Comprobante Asociado (comprobadbf)
Campo tiporeg N(10)bull Campo cbtetipo N(30)bull Campo cbtepuntov N(40)bull Campo cbtenro N(80)bull Campo cbtecuit N(110)bull
Encabezado (encabezadbf) 81
Formato JSON
Factura electroacutenica mercado interno (WSFEv1)
Para lenguajes modernos (PHP JAVA JavaScript etc) se pueden utilizar archivos de intercambio en formatoJSON
Ejecutar rece1exe json
Ejemplo archivo de entrada faactura_electronicajson
[ tipo_cbte 3 punto_vta 4002 cbt_desde 447 cbt_hasta 447 fecha_cbte 20190511 tipo_doc 80 nro_doc 30500010912
concepto 1 fecha_venc_pago null fecha_vto 20190521
imp_neto 10000 imp_iva 2100 imp_op_ex 000 imp_tot_conc 000 imp_trib 100 imp_total 12200
moneda_id PES moneda_ctz 1000
ivas [ iva_id 5 base_imp 100 importe 21 ] tributos [ tributo_id 99 alic 1 base_imp 100 importe 1 desc Impuesto Municipal Matanza ] cbtes_asoc [ nro 1234 pto_vta 2 tipo 1 ] opcionales [] compradores [] ]
La resupuesta del webservice de AFIP es agregada al mismo formato (ejemplo editado)
[ resultado A cae 69193742426586 fch_venc_cae 20190521 emision_tipo CAE motivos_obs err_code err_msg
Formato JSON 82
reproceso ]
Forma de uso
Llamar al ejecutable RECEEXE (factura electroacutenica normal WSFE) RECEBEXE (factura electroacutenicaBienes de Capital WSBFE) RECEXEXE (factura electroacutenica Exportacioacuten) RECE1EXE (facturaelectroacutenica mercado interno WSFE versioacuten 1) en la carpeta de la intefase (CPYAFIPWS)
En caso de ejecucioacuten correcta informara por pantalla los ID y CAE obtenidos y el coacutedigo de retorno es 0
ID 1000200000063 CAE 59033567692234 Motivo 00 Reproceso NID 1000200000064 CAE 59033693441244 Motivo 00 Reproceso NID 1000200000065 CAE 59033880026543 Motivo 00 Reproceso N
El CAE obtenido fecha de vencimiento y demaacutes valores devueltos por WSFE (resultado reproceso motivode rechazo u observacioacuten) son escritos en el archivo de salida con la misma informacioacuten de la factura que enel archivo de entrada
En el caso de error informa por pantalla el motivo y el coacutedigo de retorno es distinto de 0
ns1coenotAuthorized Computador no autorizado a acceder los servicio de AFIP
1000 FERecuperaLastCMPRequestSRV_RA Usuario no autorizado a realizar esta operacionValidacionDeToken No aparecioacute CUIT en lista de relaciones 30000000000
Paraacutemetros
RECEEXE RECEBEXE RECEXEXE RECE1EXE y RECEMEXE reciben los siguientes argumentospor liacutenea de comando
ayuda lista los paraacutemetros habilitadosbull prueba Teniendo los certificados instalados se puede realizar una prueba donde la interface generaraacuteun archivo de entrada para las tres proacuteximas facturas obteniendo los uacuteltimos nuacutemeros de transaccioacuteny comprobante
bull
ult Solicita Tipo de comprobante y Punto de Venta y devuelve el uacuteltimo numero de comprobanteregistrado
bull
dummy consulta estado de servidores (deberiacutean ser OK los 3 servidores)bull ptosventa devuelve los puntos de venta habilitados para emitir facturas electroacutenicas (soloWSFEv1RECE1)
bull
debug modo depuracioacuten (detalla y confirma las operaciones)bull formato muestra el formato de los archivos de entradasalidabull get recupera datos de un comprobante autorizado previamente (verificacioacuten solo para RECEXRECE1 y RECEM)
bull
xml almacena los requerimientos y respuestas XML (uacutetil para depuracioacuten y registro)bull dbf modo de trabajo con tablas Dbase IIIFoxPro o similares (solo RECE1 y RECEM)bull json modo de trabajo con formato JSON (JavaScript PHP Java) (solo RECE1)bull
Se puede especificar como primer paraacutemetro un nombre de archivo RECEINI alternativo para cargardistintas configuraciones por ej
Factura electroacutenica mercado interno (WSFEv1) 83
RECE1EXE rece-empresaxini
Si no se especifica accion por defecto se enviacutea la informacioacuten del archivo de intercambio para autorizar laemisioacuten de factura electroacutenica devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) y demaacutes datos queresponde AFIP
Para CAEA (CAE Anticipado) aplican las siguientes opciones (RECEMRECE1)
solicitarcaea obtiene un CAEA y su respectivo periacuteodo de vigencia (fecha de validez desde y fechade validez hasta)
bull
consultarcaea consulta la informacioacuten correspondiente a un CAEA previamente otorgado (recibeperiacuteodoorden o CAEA)
bull
informarcaeanoutilizado informarcaeanoutilizadoptovta registra en AFIP un CAEA no utilizadobull informarcaea enviacutea la informacioacuten del comprobante emitido y asociado a un CAEAbull
Ejemplo RECE1 para autorizar una factura electroacutenica
Al ejecutar la herramienta sin paraacutemetros se autoriza la factura en el archivo de entrada guardando elresultado de AFIP en el archivo de salida
CPYAFIPWSgt RECE1EXE
Procesando FAC A 4002 00002067 00002067 CUIT 30628789661 $ 12200 IVA $ 2100NRO 2067 Resultado A CAE 65253261906700 Obs Err Reproceso S
Ante cualquier dificultad agregar los paraacutemetros --trace debug para ver los mensajes de depuracioacuten y xmldetallados
Ejemplo RECE1 consulta ultimo comprobante
Ejemplo para obtener el uacuteltimo nuacutemero de factura emitida
CPYAFIPWSgt RECE1EXE ultConsultar ultimo numeroTipo de comprobante 19Punto de venta 2Ultimo numero 62
Si se pasa el tipo de comprobante y punto de venta por linea de comando (luego de ult) en el archivo desalida guardaraacute el dato devuelto por AFIP
CPYAFIPWSgt RECE1EXE ult 1 4001Consultar ultimo numeroUltimo numero 222
Ejemplo RECE1 consulta de comprobante
Es posible recuperar los datos de un comprobante indicando get y tipo de comprobante punto de venta ynuacutemero de comprobante
CPYAFIPWSgt RECE1EXE get 1 5 478Recuperar comprobanteFechaCbte = 20150703
Paraacutemetros 84
CbteNro = 478PuntoVenta = 5TipoDoc = 80NroDoc = 27269434894ImpTotal = 226875CAE = 65273821773505Vencimiento = 20150713EmisionTipo = CAE
Es posible agregar xml yo --trace para ver el mensaje enviado y recibido desde AFIP con datos completosLos datos del comprobante recuperado tambieacuten se guardaraacuten en el archivo de intercambio (salida)
Ejemplo RECE1 consulta puntos de venta
Ejemplo para consultar los puntos de venta habilitados por AFIP
CPYAFIPWSgt RECE1EXE ptosventa
=== Puntos de Venta ===3|EmisionTipoCAE|BloqueadoN|FchBajaNULL4|EmisionTipoCAE|BloqueadoN|FchBajaNULL
Ejemplo RECEX1 consulta monedas con cotizacioacuten
Retorna la cotizacioacuten a la fecha consultada de la base de datos aduanera de todas las monedas que poseancotizacioacuten a la fecha indicada
CPYAFIPWSgt RECEX1EXE monctz Fecha (AAAAMMDD) |024|1757370|2202019||030|10991355|2202019||034|2833349|2202019||009|39777268|2202019||012|10663978|2202019||028|21977839|2202019||014|6073274|2202019||023|0012042|2202019||018|30185896|2202019||019|0358860|2202019||032|0012749|2202019||DOL|3967|2202019||016|4295104|2202019||026|28471159|2202019||033|0060760|2202019||035|11955998|2202019||063|27265191|2202019||015|4659463|2202019||060|451564|2202019||062|0605559|2202019||010|2068376|2202019||029|0006557|2202019||011|1214078|2202019||021|520470|2202019||025|0381832|2202019||031|5761801|2202019||061|5902659|2202019|0 OK
Ejemplo RECE1 consulta de comprobante 85
Entorno
Algunas versiones de COBOL cambian el directorio u otras variables del entorno (codificacioacuten zona horariaetc) En este caso se recomienda armar un archivo RECEBAT
ECHO OFFREM limpiar la zona horaria y cambiar al directorio de la interfaseSET TZ=CD CPYAFIPWSRECEEXE
PyFEPDF generador de PDF de facturas electroacutenicas
La herramienta PyFEPDF permite generar archivos PDF con el contenido de las Facturas Electroacutenicas paraponerlos a disposicioacuten de los clientes o ser enviados electroacutenicamente viacutea email con cualquier servicio decorreos o por web
Utiliza un enfoque similar a las interfaces para webservices por lo que su uso es muy simple totalmenteautomatizado (sin intervencioacuten del usuario) y no necesita herramientas externas (ni impresoras PDF nitipografiacuteas para el coacutedigo de barras)
Cubre toda la operatoria de Factura Electroacutenica seguacuten AFIP dada la Resolicioacuten General 24852006 ynormativa relacionada (RG141503 y RG1361) aplicable a
merado interno (WSFEv1 y WSMTXCA incluyendo importacioacuten con y sin detalle)bull exportacioacuten (WSFEX)bull bono fiscal electroacutenico (WSBFE)bull
Ver muestra baacutesica en facturapdf
La interfaz maneja automaacuteticamente
Logotipos e informacioacuten particular de cada empresabull Disentildeo en PDF libre modificable (incluye disentildeador visual faacutecil e intuitivo)bull Paginado y transporte con muacuteltiples copias (Original Duplicado etc)bull Textos ilimitados (detalles observaciones etc)bull IVA discriminado (subtotales facturas A)bull Coacutedigo de barras Interleaved 2 of 7 con diacutegito verificador (reemplazado por coacutedigo QR)bull Coacutedigo QR (Obligatorio a partir de Marzo 2021 - ver cronograma de implementacioacuten)bull Metadatos en las propiedades del PDF para buacutesquedas y archivamientobull Impresioacuten directa sin intervencioacuten del usuariobull
Nota algunas caracteriacutesticas pueden no estar disponible dado limitaciones del lenguaje de programacioacuten yosistema operativo
De manera similar a las otras interfaces y herramientas el instalador de PyFEPDF para homologacioacuten(evaluacioacuten y pruebas) estaacute disponible en la seccioacuten Descargas
Importante PyFEPDF es una herramienta adicional independiente del resto de los webservices yherramientas y los costos del soporte comercial variacutean dependiendo de las necesidades para implementarlaVer Costos y Condiciones
Entorno 86
Aclaraciones PDF
Coacutedigo de Barras es recomendable generarlo especialmente si se imprime (dependiendo del casoseriacutea obligatorio) Este componente contempla internamente la generacioacuten directa de la imaacutegen demanera vectorial (escalable en cualquier resolucioacuten) seguacuten el formato que requiere AFIP (Interleaved2 of 5) y no es necesario utilizar ninguna tipografia ni cuestioacuten adicional Simplemente debecompletarse el CUIT emisor punto de venta tipo de comprobante CAE y fecha de vencimiento delCAE (esta uacuteltima en formato AFIP AAAAMMDD) El componente contempla tambieacuten el caacutelculo deldiacutegito verificador De no estar todos los datos correctos no se generaraacute el coacutedigo de barras Parainformacioacuten general ver nuestro componente auxiliar PyI25
bull
Observaciones AFIP Si esta presente motivos_obs (respuesta de AFIP en WSFEv1Obs osimilar) deberiacutea agregarse la leyenda El IVA discriminado no puede computarse como CreacuteditoFiscal (RG248508 Art 27) -esto estaacute contemplado internamente en el componente- Por ej unmensaje de observacioacuten de AFIP seriacutea Factura individual DocTipo 80 DocNro 30000000007 nose encuentra registrado en los padrones de AFIP Anteriormente AFIP solo informaba el coacutedigo (09en este caso) para maacutes informacioacuten ver WSFE F136
bull
Discriminacioacuten de IVA el programador es responsable de enviar los datos correctos seguacuten lasdiferentes normativas de AFIP Generalmente el importe de IVA solo se debe discriminar parafacturas clase A o M En las facturas clase B por lo general solo se muestra la tasa pero no el neto niIVA liquidado En las facturas clase C y E generalmente no se muestra la columna de IVA ni NETOEsta loacutegica esta contemplada internamente pero es responsabilidad de la aplicacioacuten que utilice elcomponente el revisar por la consistencia de los datos Salvo en la Factura A para el resto se debeindicar el precio unitario IVA Incluido (de corresponder) y el importe total de cada artiacuteculo tambieacutendeberiacutea ser IVA Incluido en todos los casos (de manera similar a como se emiten los comprobantespor el sitio de clave fiscal de AFIP) Recomendamos utilizar el campo imp_subtotal para evitardiferencias de calculo y redondeo (deberiacutea ser la suma del neto + importes no gravado y exento paracomprobantes clase A e incluir el importe de IVA para los comprobantes clase B)
bull
Descuentos si bien se provee un campo descuento para los importes generales es recomendableque se utilice un artiacuteculo de bonificacioacuten general en el detalle con coacutedigo de unidad de medidaumed=99 y el importe en negativo para un correcto caacutelculo de los subtotales (especialmente si lafactura se extiende por varias paacuteginas) y contemplar la normativa de almacenamientoinformacioacuten yformatos de otros webservices como WSMTXCA WSBFEv1 y WSFEXv1
bull
Logotipo AFIP en las uacuteltimas actualizaciones (107q) se incluye el logotipo de AFIP (similar al quese incluye en las facturas emitidas por clave fiscal) Para que muestre la leyenda ComprobanteAutorizado debe establecerse el campo resultado = A y no debe ser un instalador dehomologacioacuten Proacuteximamente se agregaraacuten maacutes validaciones en este sentido (la constatacioacuten delcomprobante es responsabilidad de la aplicacioacuten que utilice el componente ver WSCDC) Verejemplos y formatos a continuacioacuten para mayor informacioacuten
bull
Requisitos formato de Facturaver httpwwwafipgovarafip259IIcap1bhtmbull
Interfaz COM PyFEPDFDLL
PyFEPDFDLL es una interfaz COM (AutomatizacionActiveX) similar a un Control OCX pero que nonecesita un formulario visual por lo que se puede usar desde desde cualquier lenguaje compatible enWindows (VB VFP Delphi etc) Tambieacuten puede utilizarce desde aplicaciones como MS Excel MS Accessetc
Aclaraciones PDF 87
Objeto COM PyFEPDF propiedades y meacutetodos
El objeto COM se crea invocando a CreateObject(PyFEPDF)
Las propiedades del objeto son
CUIT cuit del emisorbull Version versioacuten de la herramienta (ej 101b)bull InstallDir directorio de instalacioacutenbull
Los meacutetodos generales del objeto para crear una factura son los siguientes (ver ejemplo en VB a continuacioacutenpara maacutes detalles)
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbte_nro imp_total imp_tot_conc imp_neto imp_iva imp_tribimp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz cae fecha_vto_caeid_impositivo nombre_cliente domicilio_cliente pais_dst_cmpobs_comerciales obs_generales forma_pago incoterms idioma_cbtemotivos_obs) recibe toda la informacioacuten del encabezado de una factura seguacuten la legislacioacutenvigente
bull
AgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed preciobonif iva_id imp_iva importe despacho) agrega un item de detalle de artiacuteculoAdicionalmente puede pasarse los paraacutemetros dato_a dato_b dato_c dato_d dato_edespacho tambieacuten es opcional
bull
AgregarIva(iva_id base_imp importe) agrega un subtotal de iva (por cada aliacutecuota)bull AgregarTributo(tributo_id Desc base_imp alic importe) agrega otrosimpuestos (uno por cada ingresos brutos retenciones y percepciones etc)
bull
AgregarCmpAsoc(tipo pto_vta nro) agrega un comprobante asociado a la facturabull
Una vez creada la factura con todos los items se debe especificar el formato mediante los siguientes meacutetodos(ver ejemplo en VB a continuacioacuten para maacutes detalles)
CargarFormato(archivo_csv) crea todos los campos del disentildeo de la factura (layout)leyendolos desde el archivo especificado
bull
AgregarCampo(nombre tipo x1 y1 x2 y2 font size bold italicunderline foreground background align text priority) agrega uncampo manualmente al disentildeo de la factura (layout)
bull
AgregarDato(campo valor pagina) con campo = nombre usado en plantilla el valorpara cada hoja y en pagina el nro de paacutegina o T todas P primera U ultima
bull
Luego se debe crear la plantilla que seraacute rellenada con los datos de la factura y por uacuteltimo se generaraacute ymostraraacute el PDF (ver ejemplo en VB a continuacioacuten para maacutes detalles)
CrearPlantilla(papel orientacion) crea una plantilla con el papel (A4 legal o letter)y orientacioacuten (portrait landscape)
bull
ProcesarPlantilla(num_copias lineas_max qty_pos) procesa los datos de lafactura dentro de la plantilla indicando la cantidad de copioas (1 original 2 duplicado 3triplicado)la cantidad de liacuteneas maacuteximas por paacutegina
bull
GenerarPDF(salida) genera el archivo PDF terminado con el nombre dado en salidabull
Objeto COM PyFEPDF propiedades y meacutetodos 88
MostrarPDF(salida imprimir) muestra el contenido del PDF generado (usando AdobeAcrobat Reader o similar) y opcionalmente lo enviacutea directo a la impresora
bull
AtributosPropiedades especiacuteficos de configuracioacuten
CUIT cuit del emisor (para generar el coacutedigo de barras)bull FmtCantidad formato numeacuterico para cantidades por ej 04 (4 decimales)bull FmtPrecio formato numeacuterico para precios unitarios por ej 02 (2 decimales)bull Locale configuracioacuten regional a utilizar para formatear importes y fechas por ejSpanish_Argentina1252 (Windows) es_ARutf8 (Linux)
bull
Atributos geneacutericos (similares a otros componentes)
Version versioacuten de la interfase (ej 107q)bull InstallDir directorio de instalacioacuten (ej CArchivos de ProgramaPyAfipWs)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Ver Formato de Intercambio PDF y los otros componentes a los webservices para informacioacuten adicional sobrecada campo
Ejemplo PyFEPDF en VB
A modo de demostracioacuten a continuacioacuten se detalla un ejemplo simple (lenguaje Visual Basic) comentando elfuncionamiento baacutesico de la interfaz para generacioacuten de Facturas Electroacutenicas en formato PDF
Crear objeto interface para generacioacuten de FE en PDFSet PyFEPDF = CreateObject(PyFEPDF)DebugPrint PyFEPDFVersionDebugPrint PyFEPDFInstallDir
CUIT del emisorPyFEPDFCUIT = 33693450239
establezco formatos (cantidad de decimales)PyFEPDFFmtCantidad = 04PyFEPDFFmtPrecio = 02
Datos del encabezado de la facturatipo_cbte = 1 Factura Apunto_vta = 40000 prefijocbte_nro = 12345678 nuacutemero de facturafecha = 20110327concepto = 3 datos del clientetipo_doc = 80 nro_doc = 30000000007nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16 coacutedigo para exportacioacutenid_impositivo = PJ54482221-l totales del comprobanteimp_total = 12200 imp_tot_conc = 000imp_neto = 10000 imp_iva = 2100imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000
Ejemplo PyFEPDF en VB 89
fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturadofecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libremoneda_id = 012moneda_ctz = 05forma_pago = 30 diasincoterms = FOB termino de comercio exterior para exportacioacutenidioma_cbte = 1 idioma para exportacioacuten (no usado por el momento)motivos_obs = 11 motivo de observacioacuten (F136 y otros)
Coacutedigo de Autorizacioacuten Electroacutenica y fecha de vencimiento (para facturas tradicionales no imprimir el CAE ni coacutedigo de barras)cae = 61123022925855fecha_vto_cae = 20110320
Creo la factura (internamente en la interfaz)ok = PyFEPDFCrearFactura( _ concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fecha_vto_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivos_obs)
Parametros adicionales del encabezado
ok = PyFEPDFEstablecerParametro(localidad_cliente Hurlingham)ok = PyFEPDFEstablecerParametro(provincia_cliente Buenos Aires)
Leyenda Comprobante Autorizado (verificar previamente con WSCDC o similar)
ok = PyFEPDFEstablecerParametro(resultado A)
Agregar comprobantes asociados (si es una NCND)tipo = 19pto_vta = 2nro = 1234pyfepdfAgregarCmpAsoc(tipo pto_vta nro)
Agrego subtotales de IVA (uno por alicuota)iva_id = 5 coacutedigo para aliacutecuota del 21base_imp = 100 importe neto sujeto a esta aliacutecuotaimporte = 21 importe liquidado de ivaok = PyFEPDFAgregarIva(iva_id base_imp importe)
Agregar cada impuesto (por ej IIBB retenciones percepciones etc)tributo_id = 99 codigo para 99-otros tributosDesc = Impuesto Municipal Matanzabase_imp = 10000 importe sujeto a este tributoalic = 100 alicuota (porcentaje) de este tributoimporte = 100 importe liquidado de este tributook = PyFEPDFAgregarTributo(tributo_id Desc base_imp alic importe)
Agrego detalles de cada item de la facturau_mtx = 123456 unidadescod_mtx = 1234567890123 coacutedigo de barrascodigo = P0001 codigo interno a imprimir (ej articulo)
Ejemplo PyFEPDF en VB 90
ds = Descripcion del producto P0001qty = 2 cantidadumed = 7 coacutedigo de unidad de medida (ej 7 para unidades)precio = 100 precio neto (A) o iva incluido (B)bonif = 0 importe de descuentosiva_id = 5 coacutedigo para aliacutecuota del 21imp_iva = 42 importe liquidado de ivaimporte = 242 importe total del itemdespacho = Nordm 123456 numero de despacho de importacioacutenok = PyFEPDFAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
ds = Descuento generalumed = 99precio = -100imp_iva = -21importe = -121ok = PyFEPDFAgregarDetalleItem( ds 0 umed _ precio 0 iva_id imp_iva importe)
Agrego datos adicionales fijosok = PyFEPDFAgregarDato(logo PyFEPDFInstallDir + fpdfpng)ok = PyFEPDFAgregarDato(EMPRESA Empresa de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE1 Direccion de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE2 Capital Federal)ok = PyFEPDFAgregarDato(ObservacionesGenerales1 Nota al pie1)
Cargo el formato desde el archivo CSV (opcional) (carga todos los campos a utilizar desde la planilla)ok = PyFEPDFCargarFormato(PyFEPDFInstallDir + facturacsv)
Agrego campos manualmente (opcional)nombre = prueba tipo = T T texto L lineas I imagen etcX1 = 50 Y1 = 150 X2 = 150 Y2 = 255 coordenadas (en milimetros)Font = Arial Size = 20 Bold = 1 Italic = 1 Underline = 1 tipo de letraforeground = 000000 background = FFFFFF colores de frente y fondoAlign = C Alineacioacuten Centrado Izquierda Derechaprioridad = 2 Orden Z menor prioridad se dibuja primero (para superposiciones)Text = iexclpruebaok = PyFEPDFAgregarCampo(nombre tipo X1 Y1 X2 Y2 _ Font Size Bold Italic Underline _ foreground background _ Align Text priority)
completo campos personalizados de la plantillaok = PyFEPDFAgregarDato(custom-nro-cli Cod123)ok = PyFEPDFAgregarDato(custom-pedido 1234)ok = PyFEPDFAgregarDato(custom-remito 12345)ok = PyFEPDFAgregarDato(custom-transporte Camiones Ej SRL)
Creo plantilla para esta factura (papel A4 vertical)papel = A4 o letter para carta legal para oficioorientacion = portrait o landscape (apaisado)ok = PyFEPDFCrearPlantilla(papel orientacion)num_copias = 3 original duplicado y triplicadolineas_max = 24 cantidad de linas de items por paacuteginaqty_pos = izq (cantidad a la izquierda de la descripcioacuten del artiacuteculo) Proceso la plantillaok = PyFEPDFProcesarPlantilla(num_copias lineas_max qty_pos) Genero el PDF de salida seguacuten la plantilla procesadasalida = facturapdfok = PyFEPDFGenerarPDF(salida)
Ejemplo PyFEPDF en VB 91
Abro el visor de PDF y muestro lo generado (es necesario tener instalado Acrobat Reader o similar)imprimir = False cambiar a True para que lo envie directo a la impresoraok = PyFEPDFMostrarPDF(salida imprimir)
Ver pyfepdfbas (ejemplo completo)
Herramienta PyFEPDFEXE por liacutenea de comando (consola)
La herramienta dispone de un programa PyFEPDFEXE que puede ser utilizado desde la consola y generarfacturas en formato PDF dado archivos de entada en texto o DBF
Los paraacutemetros son
--ayuda este mensajebull --licencia muestra la licencia del programabull --debug modo depuracioacuten (detalla y confirma las operaciones)bull --formato muestra el formato de los archivos de entradasalidabull --prueba genera y autoriza una factura de prueba (no usar en produccioacuten)bull --cargar carga un archivo de entrada (txt o dbf) con los datos del comprobantebull --grabar graba un archivo de salida (txt o dbf) con los datos de los comprobantesbull --pdf genera la imaacutegen de factura en PDFbull --dbf utiliza tablas DBF en lugar del archivo de entrada TXTbull
Ver receini para paraacutemetros de configuracioacuten
Ejemplos
Ver el formato de archivos de entrada
PYFEPDFEXE --formato
1
Realizar una prueba (genera facturatxt y facturapdf)
PYFEPDFEXE --prueba --mostrar --grabar
2
Realizar una prueba de DBF (genera encabezadbf detallesdbf ivadbfpermisodbf tributodbf cbteasocdbf datodbf y facturapdf)
PYFEPDFEXE --prueba --dbf --mostrar --grabar
3
Cargar archivo de entrada (leer facturatxt y generar facturapdf) mostrando la factura
PYFEPDFEXE --cargar --mostrar
4
Cargar tablas DBF (leer encabezadbf detallesdbf ivadbf permisodbftributodbf cbteasocdbf datodbf y generar facturapdf) imprimiendo la factura
PYFEPDFEXE --cargar --dbf --mostrar --imprimir
5
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYFEPDF_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico
Herramienta PyFEPDFEXE por liacutenea de comando (consola) 92
PYFEPDFEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Formato de Intercambio PDF
Para lenguajes donde no es posible utilizar objetos COM como en algunas versiones de COBOL sedesarrolloacute una interfase de texto para poder generar PDF con esta herramienta Adicionalmente laherramienta para generacioacuten de PDF soporta manejo por tablas DBF Estas tablas pueden ser generadas concualquier libreriacutea o aplicacioacuten compatible (dBase FoxPro Clipper incluso pueden ser abiertas con planillasde caacutelculo)
Los nombres de los campos y funcionamiento son los mismos entre los meacutetodos y archivos de texto perorecortados por compatibilidad con DBF
En este caso se puede utilizar un uacutenico archivo de texto (facturatxt) o varias tablas DBF (ver meacutetodorelacionado a la interfaz COM para maacutes informacioacuten) Los tipos de registros son
0 para encabezado (encabezadbf) - meacutetodo CrearFactura y EstablecerParametrobull 1 para detalles (detalle dbf) - meacutetodo AgregarDetalleItembull 2 para permisos (permisosdbf) - meacutetodo AgregarPermisobull 3 para comprobantes asociados (comprobadbf) - meacutetodo AgregarCmpAsocbull 4 para iva (ivadbf) - meacutetodo AgregarIvabull 5 para tributos (tributodbf) - meacutetodo AgregarTributobull 6 para datos opcionales (AFIP) -no utilizado-bull 9 para datos adicionales (datosdbf) -soacutelo PDF- - meacutetodo AgregarDatobull
A continuacioacuten se detalla el formato de cada registro y una breve descripcioacuten
Encabezado PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 1 tiporeg N(10) valor 0 (encabezado)
webservice Alfanumerico 6 2 webserviceC(6) wsfe wsbfe wsfex etc
fecha_cbte Alfanumerico 8 8 fechacbteC(8) ej 20100308
tipo_cbte Numerico 2 16 tipocbteN(20)
ej 1 para Facturas A (seguacuten tabla deparaacutemetros de AFIP Mercado Interno Exportacioacuten)
punto_vta Numerico 5 18 puntovtaN(40) ej 0001
cbte_nro Numerico 8 23 cbtenroN(80) ej 00000001
tipo_expo Numerico 1 31 tipoexpoN(10)
tipo de exportacioacuten (1 bienes 2 servicios 3otros)
permiso_existente Alfanumerico 1 32 permisoexiC(1) permiso de exportaioacuten S o N o nulo
pais_dst_cmp Numerico 3 33
Formato de Intercambio PDF 93
paisdstcmpN(30)
coacutedigo de paiacutes seguacuten tabla de paraacutemetros deAFIP (200 ARGENTINA 203 BRASIL212 ESTADOS UNIDOS etc)
nombre_cliente Alfanumerico 200 36 nombreclieC(200)
tipo_doc Numerico 2 236 tipodocN(20)
coacutedigo de tipo de documento seguacuten tablaAFIP WSFEv1 (80 CUIT)
nro_doc Numerico 11 238 nrodocN(110)
nuacutemero de documento (DNI CUIT etc) -ocorresponde a cuit_pais_cliente enexportacioacuten-
domicilio_cliente Alfanumerico 300 249 domicilioc M
id_impositivo Alfanumerico 50 549 idimpositiC(50)
categoriacutea frente al IVA (Resp InscriptoMonotributo etc) o identificacioacutenimpositiva en paiacutes destino (por ej CNJPRUC VAT ID etc)
imp_total Importe 153 599 imptotalN(153) importe total (con hasta 3 decimales)
imp_tot_conc Importe 153 614 imptotconcN(153)
importe conceptos no gravados (con hasta 3decimales)
imp_neto Importe 153 629 impnetoN(153)
importe neto sujeto a caacutelculo de IVA (conhasta 3 decimales)
impto_liq Importe 153 644 imptoliqN(153)
importe de IVA liquidado (con hasta 3decimales)
impto_liq_nri Importe 153 659 imptoliqnrN(153)
importe de IVA liquidado a RNI (con hasta 3decimales) -obsoleto-
imp_op_ex Importe 153 674 impopexN(153)
importe de operaciones exentas de IVA (conhasta 3 decimales)
impto_perc Importe 15 689 imptopercN(152)
importe de percepciones (con hasta 3decimales) -obsoleto ver tributos-
imp_iibb Importe 153 704 impiibbN(153)
mporte de ingresos brutos (con hasta 3decimales) -obsoleto ver tributos-
impto_perc_mun Importe 153 719 imptopercmN(153)
importe de percepciones municipales (conhasta 3 decimales) -obsoleto ver tributos-
imp_internos Importe 153 734 impinternoN(153)
importe de impuestos internos (con hasta 3decimales) -obsoleto ver tributos-
imp_trib Importe 153 749 imptribN(153)
importe total de impuestos y tributos (noincluye IVA)
moneda_id Alfanumerico 3 764 monedaidC(3)
coacutedigo de moneda seguacuten tabla de paraacutemetrosde AFIP (PES peso DOL doacutelares etc)
moneda_ctz Importe 106 767 monedactzN(106)
cotizacioacuten de la moneda (con hasta 6decimales)
obs_comerciales Alfanumerico 1000 777 obscomerci M observaciones comercialesobs_generales Alfanumerico 1000 1777 obsgeneral M observaciones generales
forma_pago Alfanumerico 50 2777 formapagoC(50)
descripcioacuten de la forma de pago (ejEfectivo)
incoterms Alfanumerico 3 2827 teacutermino de comercio exterior (ej FOB)
Encabezado PDF 94
incotermsC(3)
incoterms_ds Alfanumerico 20 2830 incotermsdC(20)
descripcioacuten de termino de comercio exterior(Free on board)
idioma_cbte Alfanumerico 1 2850 idiomacbteC(1)
idioma del comprobante seguacuten tabla deparaacutemetros de AFIP (1 espantildeol etc)
zona Alfanumerico 5 2851 zona C(5) -no utilizado-
fecha_venc_pago Alfanumerico 8 2856 fechavencpC(8)
fecha de vencimiento del pago (soloservicios)
presta_serv Numerico 1 2864 prestaservN(10) prestacioacuten de servicio (S o N)
fecha_serv_desde Alfanumerico 8 2865 fechaservdC(8) fecha de inicio del servicio facturado
fecha_serv_hasta Alfanumerico 8 2873 fechaservhC(8) fecha de finalizacioacuten del servicio facturado
cae Alfanumerico 14 2881 cae C(14) Coacutedigo de Autorizacioacuten Electroacutenicootorgado por AFIP
fecha_vto Alfanumerico 8 2895 fechavto C(8) fecha de vencimiento del CAE otorgado porAFIP
resultado Alfanumerico 1 2903 resultado C(1) resultado A aceptado R rechazado(respuesta AFIP)
reproceso Alfanumerico 1 2904 reprocesoC(1)
S si hubo reprocesamiento N si esprocesamiento original (respuesta AFIP)
motivos_obs Alfanumerico 1000 2905 motivosobs M
coacutedigo o descripcioacuten del motivo de rechazo uobservacioacuten del comprobante ej 11 -numeracioacuten 02 cuit no autorizada (respuestaAFIP)
id Numerico 15 3905 id N(150) identificador secuencial de la factura (usar 0)
telefono_cliente Alfanumerico 50 3920 telefonoclC(50)
localidad_cliente Alfanumerico 50 3970 localidadcC(50)
provincia_cliente Alfanumerico 50 4020 provinciacC(50)
formato_id Numerico 10 4070 formatoidN(100) -no utilizado-
email Alfanumerico 100 4080 email C(100) destinatario del PDFpdf Alfanumerico 100 4180 pdf C(100) ruta y nombre de archivo PDF a generar
err_code Alfanumerico 6 4280 errcode C(6) coacutedigo de error informado por AFIP (EjfexerrorErrCode=505)
err_msg Alfanumerico 1000 4286 errmsg M mensaje de error informado por AFIP (EjfexerrorErrMsg=Error de Lockeo)
Dato_adicional1 Alfanumerico 30 5286 datoadic01C(30) datos extra optativos
Dato_adicional2 Alfanumerico 30 5316 datoadic02C(30) datos extra optativos
Encabezado PDF 95
Dato_adicional3 Alfanumerico 30 5346 datoadic03C(30) datos extra optativos
Dato_adicional4 Alfanumerico 30 5376 datoadic04C(30) datos extra optativos
Campos extra (por compatibilidad con otras herramientas y formatos)
Nombre Tipo Long Pos DBF Descripcioacuten
descuento Importe 153 5405 descuentoN(153)
importe general de descuento (no recomendadousar descuento por itemdetalle)
cbt_desde Numerico 8 5420 cbtdesdeN(80)
nuacutemero de comprobante inicial del lote (usarcbte_nro)
cbt_hasta Numerico 8 5428 cbthastaN(80)
nuacutemero de comprobante final del lote (usarcbte_nro)
concepto Numerico 1 5436 conceptoN(10)
1 productos 2 servicios 3 productos + servicios(ver presta_serv)
no_usar Importe 153 5437 nousarN(153) -reservado-
imp_iva Importe 153 5452 impivaN(153) iacutedem impto_liq
emision_tipo Alfanumerico 4 5467 emisiontipC(4) CAE o CAEA
imp_subtotal Importe 153 5471 impsubtotaN(153)
se calcula internamente si no es pasado imp_neto+ imp_tot_conc + imp_op_ex - descuento(subtotal sin IVA ni otros tributos)
cat_iva Numerico 2 5486 cativa N(20) -reservado-NOTA estos campos pueden no utilizarse o tener el mismo valor que los campos originales estaacuten paracontemplar casos especiales y en general no deben utilizarse
Detalle Item PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 1
codigo Alfanumerico 30 2 codigoC(30) coacutedigo del artiacuteculo
qty Importe 122 32 qty N(122) cantidad (con 2 decimales)
umed Numerico 2 44 umed N(20) coacutedigo de unidad de medida seguacuten tabla de paraacutemetrosAFIP WSMTXCA (ej 1 - kg)
precio Importe 123 46 precioN(123) importe unitario (con hasta 3 decimales)
importe Importe 143 58 importeN(143) importe subtotal (con hasta 3 decimales)
iva_id Numerico 5 72 ivaid N(50) coacutedigo de aliacutecuota de IVA seguacuten tabla de paraacutemetrosAFIP WSFEv1 WSMTXCA (ej 5 - IVA RI Tasa
Detalle Item PDF 96
General 21 )
ds Alfanumerico 4000 77 ds M descripcioacuten del artiacuteculo (usar ltbrgt para salto delinea)
ncm Alfanumerico 15 4077 ncm C(15) coacutedigo habilitado del Nomenclador Comuacuten deMercosur -soacutelo WSBFEv1-
sec Alfanumerico 15 4092 sec C(15) coacutedigo habilitado de la Secretariacutea de Comercio-reservado-
bonif Importe 15 4107 bonifN(152)
importe de descuento (con 2 decimales) para estearticulo
imp_iva Importe 15 4122 impivaN(152) importe liquidado de IVA para este articulo
despacho Alfanumerico 20 4137 despachoC(20) -soacutelo importacioacuten-
u_mtx Numerico 10 4157 umtxN(100) unidades MTX
cod_mtx Alfanumerico 30 4167 codmtxC(30) coacutedigo de barras MTX
dato_a Alfanumerico 15 4197 datoa C(15) dato extra optativodato_b Alfanumerico 15 4212 datob C(15) dato extra optativodato_c Alfanumerico 15 4227 datoc C(15) dato extra optativodato_d Alfanumerico 15 4242 datod C(15) dato extra optativodato_e Alfanumerico 15 4257 datoe C(15) dato extra optativoNota en los campos numeacutericos (archivo de texto) para usar maacutes de los decimales especificados de manerapredeterminada indicar el punto explicitamente por ej cantidad = 0123456 para 6 decimales encantidad En la estructura del DBF cada programa puede cambiar la cantidadad de decimales
Importante para Facturas B de manera similar a las facturas tradicionales el IVA no debe estardiscriminado (enviar el precio unitario y subtotal final IVA incluido) y se debe enviar NULL en imp_iva
IVA PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 4
iva_id Numerico 5 2 ivaid N(50) tipo de aliacutecuota (ver tablas de paraacutemetros deWSFEv1 por ej 5 para 21)
base_imp Importe 153 7 baseimpN(153)
base imponible (neto gravado) para estaaliacutecuota
importe Importe 153 22 importe N(153) importe IVA liquidado para esta aliacutecuotaTributo PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 valor 5
IVA PDF 97
tiporegN(10)
tributo_id Numerico 5 2 tributoidN(50)
tipo de tributo (ver tablas de paraacutemetros de WSFEv1por ej 2 para impuestos provinciales)
desc Alfanumerico 100 7 desc C(100) descripcioacuten (por ej IIBB prov de BsAs)
base_imp Importe 153 107 baseimpN(153) base imponible para este impuesto (pude ser 0 nulo)
alic Importe 15 122 alic N(152) aliacutecuota (porcentaje por ej 3)
importe Importe 153 137 importeN(153) importe liquidado para este impuesto
Comprobante Asociado PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 3cbte_tipo Numerico 3 2 cbtetipo N(30) tipo de comprobante asociado (iacutedem encabezado)
cbte_punto_vta Numerico 4 5 cbtepuntovN(40) punto de venta
cbte_nro Numerico 8 9 cbtenro N(80) nuacutemero de comprobantePermisos PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea)- usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 2
id_permiso Alfanumerico 16 2 idpermisoC(16)
identificador del permiso de exportacioacuten ej99999AAXX999999A
dst_merc Numerico 3 18 dstmercN(30) coacutedigo de paiacutes de destino seguacuten tabla de AFIP
Datos PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 16 tiporeg N(10) valor 9campo Alfanumerico 30 17 campo C(30) nombre del campo en la plantilla PDFvalor Alfanumerico 1000 47 valor M contenido para el campo en la plantilla PDFpagina Alfanumerico 3 1047 pagina C(3) P primera U ultima T todasEste tipo de registro es opcional resultados similares se pueden lograr con el archivo de configuracioacuten(receini seccioacuten [PDF]) meacutetodo del Componente AgregarDato o directamente con el disentildeador visual(modificando la plantilla facturacsv)
Configuracioacuten PyFEPDF RECEINI
De manera similar a las otras herramientas PyFEPDF puede configurarse por el archivo de configuracioacutenRECEINI con las siguientes opciones predeterminadas
Tributo PDF 98
[FACTURA]ARCHIVO=tipoletranumeroFORMATO=facturacsvDIRECTORIO=PAPEL=letterORIENTACION=portraitDIRECTORIO=SUBDIRECTORIO=LOCALE=Spanish_Argentina1252FMT_CANTIDAD=06FMT_PRECIO=03CANT_POS=izqENTRADA=facturatxtSALIDA=facturapdf
[PDF]LOGO=fpdfpngEMPRESA=Empresa de PruebaMEMBRETE1=Direccion de PruebaMEMBRETE2=Capital FederalCUIT=CUIT 30-00000000-0IIBB=IIBB 30-00000000-0IVA=IVA Responsable InscriptoINICIO=Inicio de Actividad 01042006
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalle = detallesdbfPermiso = permisodbfDato = datodbf
Seccioacuten [FACTURA]
Controla la generacioacuten del PDF (si no se especifica campo PDF en tabla encabezado)
ARCHIVO nombre de archivo PDF a generar por ej incluyendo tipoletranumerobull FORMATO formato del PDF a generar por ej en planilla facturacsvbull DIRECTORIO directorio donde almacenar los archivos PDFbull SUBDIRECTORIO nombre de la carpeta a generar (una por diacutea de manera predeterminada)bull LINEAS_MAX cantidad de lineas para el detalle (artiacuteculos) por defecto 24bull PAPEL legal A4 letterbull ORIENTACION portrait landscape (apaisada)bull LOCALE configuracioacuten regional (Spanish_Argentina1252 en Windows es_ARutf8 en Linux)bull FMT_CANTIDAD formato de cantidad (04 para 4 decimales)bull FMT_PRECIO formato de precio unitario (03 para 3 decimales)bull CANT_POS posicioacuten de la columna cantidad (izq o der)bull ENTRADA nombre del archivo de intercambio (facturatxt)bull SALIDA nombre del archivo a generar (dejar en blanco para generar uno distinto seguacuten laconfiguracioacuten ARCHIVO)
bull
COPIAS cantidad de copias en el PDF (Original Duplicado Triplicado etc)bull
Configuracioacuten PyFEPDF RECEINI 99
Seccioacuten [PDF]
Controla campos del PDF a personalizar (si no se especifican los campo texto en tabla formato del PDF)
LOGO archivo con imagen logotipo por ej serpientepngbull EMPRESA ej Empresa de Pruebabull MEMBRETE1 ej Direccion de Pruebabull MEMBRETE2 ej Capital Federalbull CUIT CUIT 20-26756539-3bull IIBB IIBB 20-26756539-3bull IVA IVA Responsable Inscriptobull INICIO Inicio de Actividad 01042006bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull Dato = datodbfbull
Campo Subtotal
Dado que en general la columna importe deberiacutea mostrar Subtotal cIVA por similitud con el PDF quegenera AFIP por comprobantes en linea por disentildeo (actualizacioacuten 108b)
Si es A o M se imprime el subtotal SIN IVAbull Si es B o C se imprime el subtotal CON IVAbull
En el caso de factura A debe sumar los items sin el IVA ya que en la ultima hoja se le suma el IVA alsubtotal
Igualmente el campo subtotal podriacutea sobre-escribirse utilizando el meacutetodo AgregarDato(campovalor pagina) o el tipo de registro para datos adicionales En campo = subtotal el valor a imprimiren cada hoja y pagina el nro de paacutegina (T todas P primera U ultima) Se podriacutea agregar el dato paratodas las paginas vacio y para la uacuteltima con el valor que sea necesario (en ese orden)
Disentildeador Visual PyFEPDF
La herramienta incluye el progama designerexe para modificar visualmente los disentildeos de factura
Los archivos de entrada estaacuten son planillas CSV describiendo el disentildeo Al abrilos el disentildeador muestra laplantilla con los elementos donde se ubicaraacuten los futuros valores de cada factura
La barra de herramientas cuenta con botones para
Abrir guardar e imprimir (vista previa) las plantillasbull
Seccioacuten [PDF] 100
Agregar eliminar y duplicar elementosbull Buscar elementos por nombre o por textobull
Sobre un elemento con doble click izquierdo se abre un dialogo para editar el texto y con click derecho seabre un dialogo con la ventana de propiedades Es posible seleccionar muacuteltiples elementos manteniendopresionado shift y click izquierdo Para mover los elementos se puede usar las teclas de flechas o arrastrar loselementos
Ver a continuacioacuten los tipos de elementos y su definicioacuten
A modo de ejemplo se muestra un pantallazo del Disentildeador Visual con el elemento logo seleccionadoeditando sus propiedades
Para ejecutarlo simplemente ir al directorio de la interfaz y correr designerexe
Tipos de elementos para PyFEPDF
Para el disentildeo del PDF es posible establecer los siguientes tipos de campo (elementos graacuteficos)
Texto (T) con tipo de letra (fuente) tamantildeo formato (italico negrita subrayado) tamantildeo yalineacioacuten
bull
Liacuteneas (L) y Cuadros (B)bull Imaacutegenes (I) en formato PNG o JPGbull Coacutedigo de Barras (CB) en formato Entrelazado 2 de 5bull Codigo QR (I) (Requerido por AFIP a partir del 01032021 ver cronograma)bull
Definicioacuten de elementos para PyFEPDF
Las columnas de la planilla (facturacsv) o estructura de la tabla formato para definir los elementos graacuteficoses
name (alfanumeacuterico) nombre del campobull type (alfanumeacuterico) tipo del campo T L I B CBbull x1 (numeacuterico) coordenada horizontal izquierda (en mm)bull y1 (numeacuterico) coordenada vertical superior (en mm)bull x2 (numeacuterico) coordenada horizontal derecha (en mm)bull y2 (numeacuterico) coordenada vertical inferior (en mm)bull font (alfanumeacuterico) nombre de la tipografiacutea (fuente)bull size (numeacuterico) tamantildeo en puntos del textobull bold (verdaderofalso) estilo negrita para el texto (1 o 0)bull italic (verdaderofalso) estilo cursiva (itaacutelica) para el texto (1 o 0)bull underline (verdaderofalso) estilo subrayado para el texto (1 o 0)bull foreground (numeacuterico) color RGB de dibujobull backgroud (numeacuterico) color RGB de relleno del fondo (si aplica al elemento)bull align (alfanumeacuterico) alineacioacuten I izquierda D derecha C centradobull text (alfanumeacuterico) texto estaacutetico o foacutermulabull priority (numeacuterico) orden z en el que se dibujan los elementos (a menor prioridad se dibuja primero)bull
Estilos HTML Adicionalmente los estilos negrita itaacutelica y subrayado pueden establecerse en tiempo deejecucioacuten encerrando todo el texto con el tag html correspondiente (en el orden indicado) Ej
Disentildeador Visual PyFEPDF 101
ltBgttexto en negritaltBgtbull ltIgttexto en cursivaltIgtbull ltUgttexto subrayadoltUgtbull ltBgtltIgtltUgttexto en negrita cursiva y subrayadoltUgtltIgtltBgtbull
PyI25 Generador de Coacutedigos de Barras
Utilitario PYI25EXE (py25py) para generar los coacutedigos de barras Interleaved 2 of 5 (Entrelazado 2 de 5)seguacuten Resolucioacuten General 170204
Ver Descargas para descargar el instalador
Los datos a consignar son (ver RG170204 Art 1 Anexo 1)
Clave Unica de Identificacioacuten Tributaria (CUIT) del emisor de la factura (11 caracteres)bull Coacutedigo de tipo de comprobante (3 caracteres)bull Punto de venta (5 caracteres)bull Coacutedigo de Autorizacioacuten de Electroacutenica (CAE) o Coacutedigo de Autorizacioacuten de Impresioacuten (CAI) (14caracteres)
bull
Fecha de vencimiento del CAE CAI (8 caracteres)bull Diacutegito verificador (1 caraacutecter) ver rutinabull
El utilitario genera una imaacutegen en formato PNG o JPG funciona tanto de liacutenea de comando consola (DOS)como por interfaz COM (automatizacioacuten DLL similar a OCX) y es uacutetil para facturas electroacutenicas otradicionales (autoimpresores o imprentas)
Imaacutegen de Ejemplo de Coacutedigo de Barras para CAE
Importante De generar imaacutegenes para imprimir es recomendado respetar la resolucioacuten de la impresora (Laacutesero Chorro de tinta no pueden usarse matriz de punto) por ej con una resolucioacuten por lo menos tres vecesmayor que la utilizada en pantalla
Nota Nuestro generador de PDF ya contempla generar los coacutedigos de barra para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PYI25EXE (utilitario por linea de comando)
Opciones
--barras a continuacioacuten se indica el coacutedigo de barras en formato numeacutericobull --noverificador deshabilitar caacutelculo de digito verificadorbull --archivo a continuacioacuten se indica el nombre del archivo de salidabull
Ejemplo de uso (generar el archivo pruebapng)
PYI25EXE --barras 202675653930240016120303473904220110528 --mostrar --archivo pruebapng
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYI25_cliEXE queesta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primer como
Definicioacuten de elementos para PyFEPDF 102
segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and is startedautomatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico PYI25EXEpuede estar compilado para ser registrado en Windows (componente para VBVFP y similares)
Objeto PYI25 (interfaz COM)
Objeto PyI25 (registrar PYI25DLL)
Meacutetodos
DigitoVerificadorModulo10(codigo) recibe el codigo de barras en formato numeacutericodevuelve el diacutegito verificador en base 10
bull
GenerarImagen(codigo archivo anchobase ancho alto extension )recibe el codigo de barras en formato numeacuterico nombre de archivo de salida tamantildeos y formato deimagen (PNG o JPEG) y genera el codigo de barras especificado
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyI25 As Object
Set PyI25 = CreateObject(PyI25)
cuit tipo_cbte punto_vta cae fch_venc_caebarras = 202675653930240016120303473904220110529 calculo digito verificadorbarras = barras + PyI25DigitoVerificadorModulo10(barras)
genero imagen en png aspecto 1x para ver en pantalla o por mailok = PyI25GenerarImagen(barras Cbarraspng)
formato en jpg aspecto 3x maacutes ancho para imprimir o incrustarok = PyI25GenerarImagen(barras cbarrasjpg 9 0 90 JPEG)
PyQR Generador de Coacutedigos QR
Utilitario PYQREXE (pyqrpy) para generar los coacutedigos QR seguacuten RG48922020
Cronograma de Implementacioacuten
Para responsables inscriptos en el impuesto al valor agregado que hayan efectuado operaciones (gravadasexentas y no gravadas) declaradas en el impuesto durante el antildeo calendario 2020 por un importe total neto deimpuestos y tasas
11 Superior a PESOS DIEZ MILLONES ($10000000-) desde el 1 de marzo de 2021
12 Superior a PESOS DOS MILLONES ($2000000-) e inferior o igual a PESOS DIEZ MILLONES ($10000000-) desde el 1 de abril de 2021
13 Superior a PESOS QUINIENTOS MIL ($500000-) e inferior o igual a PESOS DOS MILLONES ($2000000-) desde el 1 de mayo de 2021
PYI25EXE (utilitario por linea de comando) 103
2 Para el resto de los responsables inscriptos en el impuesto al valor agregado sujetos exentos ante dichogravamen y pequentildeos contribuyentes inscriptos en el Reacutegimen Simplificado (Monotributo) a partir del 1junio de 2021
Los datos a consignar son (ver QR especificaciones)
Fecha de emisioacutenbull CUIT del emisorbull Punto de ventabull Tipo de Comprobantesbull Nuacutemero de Comprobantebull Importe totalbull Monedabull Cotizacioacutenbull Tipo Documento Receptor (de corresponder)bull Nuacutemero de Documento de Receptor (de corresponder)bull Coacutedigo del Tipo de Autorizacioacutenbull Coacutedigo de Autorizacioacutenbull
Ejemplo Visual Basic script pyafipwsblobdevelopejemplospyqrpyqrvbs
Ejemplo Visual Basic claacutesico
Dim pyqr As Object
Set pyqr = CreateObject(PyQR)
Establecer tipo de imagen (PNG o JPEG)PyQRExtension = JPEG
Generar un nombre de archivo temporal para la imagenarchivo = pyqrCrearArchivo
Alternativo Especificar ubicacioacuten y extensioacutenpyqrarchivo = CQRgeneradopyqrjpg
DebugPrint archivo
ver = 1fecha = 2020-10-13cuit = 30000000007pto_vta = 10tipo_cmp = 1nro_cmp = 94importe = 12100moneda = DOLctz = 65tipo_doc_rec = 80nro_doc_rec = 20000000001tipo_cod_aut = Ecod_aut = 70417054367476
genero imagen en png con el codigo qr
url = pyqrGenerarImagen(ver fecha cuit pto_vta tipo_cmp nro_cmp _ importe moneda ctz tipo_doc_rec nro_doc_rec _ tipo_cod_aut cod_aut)
PyQR Generador de Coacutedigos QR 104
DebugPrint url
Paraacutemetros por liacutenea de comandos
--datos recibe los datos a procesar version fecha cuit pto_vta tipo_cmp nro_cmp importemoneda ctz tipo_doc_rec nro_doc_rec tipo_cod_aut cod_aut
bull
--prueba genera un QR de muestrabull --archivo permite especificar una ruta (de lo contrario usa un archivo temporal)bull --mostrar abre el archivo para visualizar la imagenbull
Ejemplo por liacutenea de comando
Linux
python pyqrpy --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
Windows
pyqrexe --archivo qrjpg --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
En windows usar pyqrexe en vez de python pyqrpy
Imaacutegen de Ejemplo de Coacutedigo QR
PyQR Generador de Coacutedigos QR 105
Nota Nuestro generador de PDF ya contempla generar los coacutedigos QR para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PyEmail Envio de correo electroacutenico
Herramienta para enviar correos electroacutenicos incluyendo por ej adjunto PDF de con factura electroacutenica
Soporta servidores SMTP con y sin autenticacioacuten
Proacuteximamente soporte para correos con contenido HTML e imagenes de factura embebida
PyEmail Envio de correo electroacutenico 106
PYEMAILEXE utilitario de correo
Para utilizar esta herramienta debe tener configurado la seccioacuten [EMAIL] en el receini
Ejemplo desde linea de comando
PYEMAILEXE motivo reingartgmailcom mensaje FacturaA0002-00117826pdf
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYEMAIL_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacutericoPYEMAILEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Objeto PyEmail (interfaz COM)
Objeto PyEmail (registrar PyEmailDLL)
Meacutetodos
Conectar(servidor usuario clave) recibe el nombre del servidor a conectarse usuario y contrasentildea(opcional)
bull
Enviar(remitente motivo destinatario mensaje archivo) envia el correo electroacutenico con los datosproporcionados
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyEmail As Object
Set PyEmail = CreateObject(PyEmail)
Primer paso conexioacuten al servidor (por unica vez)servidor = mailsistemasagilescomarusuario = norespondernsiscomarclave = 1238478puerto = 465ok = PyEmailConectar(servidor usuario clave)
Envio el o los correos (repetir por cada FE)remitente = norespondersistemasagilescomardestinatario = marianosistemasagilescomarmensaje = Se envia factura electronica adjuntaarchivo = CFACTURAPDF
ok = PyEmailEnviar(remitente motivo destinatario mensaje archivo)
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361)
Con la interfaz se provee un utilitario para generar los archivos requeridos por el aplicativo SIRED (SIAP) dela Resolucioacuten General 136102 referente al almacenamiento digital de los comprobantes emitidos (Libro
PYEMAILEXE utilitario de correo 107
Ventas Detalle y Cabeceras de Factura)
El formato de entrada es una planilla csv similar al PyRece respetando los tipos de datos y coacutedigos requeridospor los webservices con las siguientes columnas tipo_cbte punto_vta cbt_numero fecha_cbte tipo_docnro_doc imp_neto impto_liq imp_total cae fecha_vto nombre
Ejemplo de uso
CD CPYAFIPWSRG1361EXE planillacsv
Generaraacute los archivos
VENTAS_200902txtbull CABECERA_200902txtbull DETALLE_200902txtbull
Para maacutes informacioacuten ver RG136102 de AFIP
Disentildeo de registro (archivos de texto)bull Guia Temaacuteticabull
Ejemplo
Ejemplo en Visual Basic claacutesico
sired = CreateObject(SIRED)
creo una factura de ejemplotipo_cbte = 2punto_vta = 4000fecha = 20150721concepto = 3tipo_doc = 80nro_doc = 30000000007cbte_nro = 12345678imp_total = 12200imp_tot_conc = 300imp_neto = 10000imp_iva = 2100imp_trib = 100imp_op_ex = 200imp_subtotal = 10000fecha_cbte = fechafecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fechafecha_serv_hasta = fechamoneda_id = PESmoneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libre
nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361) 108
id_impositivo = Responsable Inscriptoforma_pago = 30 diasincoterms = FOBidioma_cbte = 1motivo = 11
cae = nullfch_venc_cae = null
siredCrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fch_venc_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivo)
agrego comprobantes asociado
tipo = 91pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)tipo = 5pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)
tributo_id = 99desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100siredAgregarTributo(tributo_id desc base_imp alic importe)
iva_id = 5 21base_imp = 100importe = 21siredAgregarIva(iva_id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890123codigo = P0001ds = Descripcion del producto P0001qty = 100umed = 7precio = 10000bonif = 000iva_id = 5imp_iva = 2100importe = 12100despacho = uNordm 123456siredAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
siredAgregarDato(prueba 1234)
id_factura = siredGuardarFactura()
siredEstablecerParametro(cae 61123022925855)siredEstablecerParametro(fch_venc_cae 20110320)
Ejemplo 109
siredEstablecerParametro(motivo_obs )ok = siredActualizarFactura(id_factura)
Otros Servicios WEB y herramientas similares de AFIP
Constatacioacuten de Comprobantes
WSCDC es la Interfaz para los Servicios Web para verificar en forma dinaacutemica si los comprobantes recibidosse encuentran autorizados por la AFIP Ver manual especiacutefico en ConstatacionComprobantes
Padroacuten de Contribuyentes
Herramienta para consultar el archivo completo de la condicioacuten tributaria de los contribuyentes y responsables(RG1817) Ver manual especiacutefico en PadronContribuyentesAFIP
Coacutedigo de Trazabilidad de Granos
WSCTGv2 es la Interfaz para generar Coacutedigo de Trazabilidad de Granos AFIP (RG2806 RG3113 RG3493)Ver manual especiacutefico en CodigoTrazabilidadGranos
Liquidacioacuten Primaria de Granos
WSLPG es la Interfaz para autorizar y ajustar Liquidaciones Primarias de Granos (RG34192012) Vermanual especiacutefico en LiquidacionPrimariaGranos
Consulta de Operaciones Cambiarias
WSCOC es la Interfaz para Consultas de Operaciones (moneda extranjera) Ver manual enConsultaOperacionesCambiarias
wDigDepFiel Depositario Fiel
Servicio Web de AFIP para Aviso de Recepcioacuten y Aceptacioacuten de la Digitalizacioacuten de Documentos por partede los Prestadores de Servicios de Archivos y Digitalizacioacuten (PSAD) y Aviso de Digitalizacion deDocumentos por parte de los Despachantes o de los Prestadores de Servicios de Archivos y Digitalizacioacuten(PSAD) -
Sujetos Alcanzados ver Resolucioacuten General 25702009
Actualmente la interfaz expone las funcionalidades de este webservice
Aviso de Digitalizacioacutenbull Aviso de Recepcioacuten y Aceptacioacutenbull Meacutetodo Dummy para verificacioacuten de funcionamientobull
Ejemplo Interfaz COM wDigDepFiel
De igual manera que el resto de los servicios web el web service de depositario fiel puede ser invocado desdelenguajes visuales y no visuales (en windows) utilizando la interfaz COM
Otros Servicios WEB y herramientas similares de AFIP 110
Ejemplo en Visual Basic (similar para Visual FoxPro Delphi etc)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet wDigDepFiel = CreateObject(wDigDepFiel) Setear tocken y sing de autorizacioacuten (pasos previos)wDigDepFieltoken = WSAAtokenwDigDepFielsign = WSAAsign
CUIT del emisor (debe estar registrado en la AFIP)wDigDepFielcuit = 20267565393
Conectar al Servicio Web de Depositario Fiel (homologacioacuten)ok = wDigDepFielConectar(httpstestdiaafipgovarDiaWswDigDepFielwDigDepFielasmx)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)wDigDepFielDummyDebugPrint appserver status wDigDepFielAppServerStatusDebugPrint dbserver status wDigDepFielDbServerStatusDebugPrint authserver status wDigDepFielAuthServerStatus
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393codigo = 000 carpeta completa 001 carpeta adicional FechaHora en formato ISO 2010-06-07T002351750000fecha_hora_acept = Format(Now() yyyy-MM-dd) amp T amp _ Format(Now() hhmmss) amp 000000ticket = 1234errCode = wDigDepFielAvisoRecepAcept(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie _ codigo fecha_hora_acept ticket)DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoRecepAcept Coacutedigo Error amp wDigDepFielCodError
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000 1234567890123456cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393cuit_ata = 20267565393codigo = 000 carpeta completa 001 carpeta adicionalticket = 1234url = httpwwwexamplecomhashing = db1491eda47d78532cdfca19c62875aade941dc2
inicializo aviso limpio datos (familias)wDigDepFielIniciarAvisocodigo = 02cantidad = 1wDigDepFielAgregarFamilia codigo cantidadcodigo = 03cantidad = 3wDigDepFielAgregarFamilia codigo cantidad
cantidad_total = 4
Ejemplo Interfaz COM wDigDepFiel 111
errCode = wDigDepFielAvisoDigit(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie cuit_ata _ codigo url ticket hashing cantidad_total)
DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoDigit Coacutedigo amp wDigDepFielCodError
Otros Servicios Web relacionados de otros organismos
Remito Electroacutenico (COT ARBA)
Interfaz para Servicio Web Coacutedigo de Operaciones de Traslado (COT) Remito Electronico correspondienteal articulo 41 del Coacutedigo Fiscal que establece la obligacioacuten de amparar el traslado o transporte de bienes en elterritorio de la provincia de Bs As Ver manual especiacutefico en RemitoElectronicoCotArba
Trazabilidad de Medicamentos (ANMAT)
Interfaz para Servicio Web Coacutedigo de Trazabilidad de Medicamentos (SOAP) correspondiente a laResolucioacuten 4352011 del Ministerio de Salud y Disposicioacuten 36832011 de ANMAT Sistema Nacional deTrazabilidad de Medicamentos que deberaacuten implementar las personas fiacutesicas o juriacutedicas que intervengan en lacadena de comercializacioacuten distribucioacuten y dispensacioacuten de especialidades medicinales incluidas en elRegistro de Especialidades Medicinales SNT Especificacioacuten Teacutecnica V2 Ver manual especiacutefico enTrazabilidadMedicamentos
Trazabilidad de Precursores Quiacutemicos (SEDRONAR)
Interfaz para Servicio Web Trazabilidad de Precursores Quiacutemicos TrazaMedSDRN (SOAP) para informarmovimientos de Sustancias Quiacutemicas Controladas Decreto 109596 modificado por Decreto 116100Sistema Nacional de Trazabilidad modulo de Precursores Quiacutemicos (RENPRE SEDRONAR PAMI INSSJP)que deberaacuten implementar el operador de precursores quiacutemicos obtencioacuten de nuacutemero de CUFE (Coacutedigo deUbicacioacuten Fiacutesica de Establecimiento) Entrenamiento y Alineacioacuten de Datos Resolucioacuten 90012 RENPREVer manual especiacutefico en TrazabilidadPrecursoresQuimicos
Certificados
Generacioacuten
Para poder utilizar la interfase se deben tramitar y asociar los certificados de homologacioacutenproduccioacuten en laAFIP Para mas informacioacuten ver Paacutegina principal de Factura Electroacutenica (AFIP)
Crear Pedido CSR con WSAA
A partir de la revisoacuten 1632 (ver Actualizaciones Factura Electroacutenica moacutedulo WSAApy versioacuten 110b) esposible generar el pedido de certificado automaacuteticamente utilizando la opcioacuten --crear_pedido_cert)La herramienta solicitaraacute el CUIT buscaraacute la denominacioacuten del contribuyente en el padroacuten de AFIP ygeneraraacute los archivos necesarios (clave privada y pedido de certificado)
Ejemplo
Otros Servicios Web relacionados de otros organismos 112
CPyAfipWsgt WSAA-cliexe --crear_pedido_certreingartS55t-B~pyafipws$ python wsaapy --crear_pedido_certIngrese un CUIT 20267565393Denominacioacuten seguacuten AFIP REINGART MARIANO ALEJANDROLongitud clave 2048 (bits)Se crearon los archivosclave_privada_20267565393_201609105952keypedido_cert_20267565393_201609105952csr
Tambieacuten pueden especificarse esos datos por linea de comando (CUIT nombrealias empresa y longitud de laclave -2048 bits predeterminados-) ejecutando
WSAA-cliexe --crear_pedido_cert 20267565393 PyAfipWS SHA-2 REINGART MARIANO ALEJANDRO 2048
Nota desde el coacutedigo fuente ejecutar python wsaapyTambieacuten es posible realizar el procedimiento por programa (automatizadamente) llamando a los meacutetodoswsaaCrearClavePrivada(clave_privada) y wsaaCrearPedidoCertificado(cuitempresa nombre pedido_cert)
La herramienta deja listos los archivos respectivos pudiendo subir el pedido de certificado CSR a AFIP (tantoen homologacioacuten como en produccioacuten)
WSASS
Video Explicativo completo (incluyendo WSASS autogestioacuten de certificados en homologacioacuten AFIP) httpswwwyoutubecomwatchv=ietDXvUzVIQ
OpenSSL
Pasos para crear el certificado (maacutes informacioacuten en Instructivo AFIP)
Bajar e instalar OpenSSL para Windows 098i (historico) o 102k o superior (recomendado) Encaso de inconvenientes instalar Redistribuible de Visual C++
bull
Ingresar por liacutenea de comando al directorio de OpenSSL COpenSSLbingtbull Generar la clave privada
openssl genrsa -out empresakey 2048
bull
Generar el pedido (CSR certificate signing request) por liacutenea de comando
openssl req -new -key empresakey -subj C=ARO=[empresa]CN=[nombre]serialNumber=CUIT [nro_cuit] -out empresacsr
Reemplazar [empresa] por el nombre de su empresa Ej Nombre de la empresa tal cualfigura en la consulta de inscripcioacuten ej Empresa S A
diams
Reemplazar [nombre] por su nombre o server hostname Nombre del servicio aplicacioacuten uunidad operativa ej Interfaz PyAfipWs
diams
Reemplazar [nro_cuit] por la CUIT sin guiones de la empresa o programador Ej CUITxxxxxxxxxxx
diams
bull
Enviar el empresacsr a la AFIP para que lo firmen y devuelvan el certificado empresacrtbull
Ejemplo concreto
Crear Pedido CSR con WSAA 113
openssl req -new -key empresakey -subj C=ARO=Mariano ReingartCN=PyAfipWsserialNumber=CUIT 20267565393 -out empresacsr
Generar Certificado CRT
Una vez generado el pedido de certificado CSR (ver puntos anteriores) el traacutemite es
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Nuevo Certificado en el WSASSdiams Nombre simboacutelico del DN un alias del computador fiscal (nombre de fantasiacutea ej PC1)diams Solicitud de certificado en formato PKCS10 abrir con un editor de texto el CSR y copiaraqui el contenido
diams
Presionar Crear DN y obtener certificadodiams Abrir un archivo nuevo y copiar el campo Resultado (este es el certificado usar extensioacutenCRT)
diams
bull
Produccioacuten Ingresar por clave fiscal al servicio online Administracioacuten de Certificados DigitalesIr a Agregar Alias escribir el alias (nombre relacionado al certificado)diams Subir el archivo CSR presionar Agregardiams Luego buscar y descargar el certificado CRTdiams
bull
Con esta interfase no es necesario convertir el certificado en formato pkcs12 ni importarlo alrepositorio de Windows
bull
Para maacutes informacioacuten ver instructivo oficial AFIP
Asociacioacuten
Para poder usar los servicios web se debe asociar el certificado al webservice y CUIT (empresa) que loutilizaraacute
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Crear autorizacioacuten a servicio en el WSASSdiams Seleecionar el Nombre simboacutelico del DN a autorizar (igual que en el paso anterior)diams Revisar el CUIT representado y quien genera la autorizacioacutendiams Seleccionar el Servicio al que desea acceder (por ej wsfe factura electroacutenica)diams Presionar Crear autorizacioacuten de Acceso y revisar el resultadodiams
bull
Produccioacuten en el sitio de AFIP ingresar por clave fiscalEntrar en Administrador de Relaciones de Clave Fiscaldiams Elegir Nueva Relacioacutendiams Presionar BUSCAR para seleccionar el webservice de AFIP por ej ws - FacturacioacutenElectroacutenica
diams
Presionar BUSCAR para seleccionar el Representante seleccionar el nombre del alias delComputador Fiscal (ver seccioacuten anterior)
diams
Confirmardiams
bull
Anteriormente en produccioacuten debiacutea realizarse utilizando el servicio de clave fiscal ARFE - GestionarRelaciones yendo a Realizar una nueva Asociacioacuten completando Empresa Servicio y computador-certificado- que utilizara los webservices
OpenSSL 114
Para maacutes informacioacuten en produccioacuten ver instructivos oficiales de la AFIP
obtener certificado AFIPbull asociar certificado AFIPbull
Es el mismo traacutemite para la renovacioacuten (ns1cmscertexpired Certificado expirado) debesubirse el arcihvo CSR (pedido de certificado) y descargar el nuevo CRT Recordamos que los certificadostienen una vigencia de 2 antildeos en produccioacuten y 1 antildeo en homologacioacuten
Pre-requisitos para Produccioacuten (RECE)
Para poder usar Factura Electroacutenica en Produccioacuten (modo definitivo) ademaacutes de los puntos mencionadosanteriormente dentro de Clave Fiscal servicio online Regimenes de facturacioacuten y registracioacuten(REARRECERFI) es necesario
Adherirse al reacutegimen (realizarlo con anterioridad este traacutemite puede demorar varias semanas)Importante en el Rubro I C) RECE RCEL (Factura Electroacutenica y Factura Electroacutenica en Linea)especificar RECE (no RCEL que es para Comprobantes en linea y Facturador Plus nocontemplados por los webservices)
bull
Dar de alta los nuevos puntos de ventas (uno por cada webservice a utilizar factura nacionalexportacioacuten bono fiscal etc)
bull
Para maacutes informacioacuten ver demo interactiva oficial empadronamiento AFIP
Descargas
OpenSSL para windowsbull Redistribuibe VC++bull
Comprobacioacuten de Autenticacioacuten (WSAA)
Para descartar problemas teacutecnicos de acceso en produccioacuten u homologacioacuten (y verificar la validez delcertificado generado) se puede utilizar la herramienta WSAAEXE WSAA-cliEXE en modo depuracioacuten(sin necesidad de autorizar una factura solo solicitar acceso) yo el mensaje XML devuelto porWSAACallWSAA()
CPYAFIPWSgtWSAA-cliEXE reingartcrt reingartkey wsfe 2400 httpswsaaafipgovarwsservicesLoginCms --trace
Usando CERT=reingartcrt PRIVATEKEY=reingartkey URL=httpswsaaafipgovarwsservicesLoginCms SERVICE=wsfex TTL=2400Creando TRA------------------------------------------------------------------------------ltxml version=10 encoding=UTF-8gtltloginTicketRequest version=10gt ltheadergt ltuniqueIdgt1279058341ltuniqueIdgt ltgenerationTimegt2010-07-13T181901ltgenerationTimegt ltexpirationTimegt2010-07-13T193901ltexpirationTimegt ltheadergt ltservicegtwsfexltservicegtltloginTicketRequestgt------------------------------------------------------------------------------
Asociacioacuten 115
Frimando TRALlamando WSAA--------------------------------------------------------------------------------POST httpswsaaafipgovarwsservicesLoginCmsSOAPAction httpargovafipdiffacturaelectronicaloginCmsContent-length 3369Content-type textxml charset=UTF-8
================================================================================El archivo TAxml se ha generado correctamente
Nota Cambiar WSAAEXE por WSAA-CLIEXE o viceversa dependiendo del paquete de instalacioacuten o comoeste compilado (si aparece el mensaje This program host a COM object an is started automatically) Parausarlo desde el coacutedigo fuente utilizar en su lugar python wsaapy
Para descartar cualquier problema teacutecnico se puede utilizar la salida que es la traza de depuracioacuten de lacomunicacioacuten con AFIP a la mesa de ayuda (requerimiento y respuesta xml)
Si se estariacutea conectando correctamente a produccioacuten el certificado y las URL son correctas etc se deberiacuteaconstatar que
El ticket de requerimiento de acceso (TRA) correctamente solicita servicio correcto (wsfex)ltservicegtwsfexltservicegt
bull
Se estaacute solicitando acceso a los servidores del ambiente correcto (wsaa_url) POSThttpswsaaafipgovarwsservicesLoginCms (produccioacuten) o POSThttpwsaahomoafipgovarwsservicesLoginCms (homologacioacuten)
bull
El equipo que responde seriacutea del ambiente correcto perezaafipgovarenvidiaafipgovar iraafipgovar (produccioacuten) o avariciaafipgovar(homologacioacuten) Nota los nombres de los servidores pueden cambiar y solo se informan en caso deerror
bull
Si la autenticacioacuten es exitosa (El archivo TAxml se ha generado correctamente en elmensaje XML contenido en dicho archivo se puede verificar los siguientes datos
Fuente AFIP produccioacuten (ltsourcegtCN=wsaa O=AFIP C=AR SERIALNUMBER=CUIT33693450239ltsourcegt) sinoacute diriacutea CN=wsaahomo O=AFIP C=ARSERIALNUMBER=CUIT 33693450239
bull
Destino datos del certificado de produccioacutenhomologacioacuten (C=ar O=pyafipws-sistemasagiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart)
bull
Si el ambiente es el correcto (produccioacutenhomologacioacuten) y sigue devolviendo acceso denegadons1coenotAuthorized Computador no autorizado a acceder al servicio(govafipdeseindvadacsuaviewwsaaLoginFault) revisar el certificado ARFE(asociacioacuten de servicio) RECEREARRFI sobre reacutegimen habilitado puntos de venta y demaacutes traacutemites anteAFIP Si aparece error 600 ValidacionDeToken Error al verificar hashVerificacionDeHash No valida la firma digital se estaacute usando un sign y token en elambiente incorrecto (de produccioacuten en homologacioacuten y viceversa)
Comprobacioacuten de Autenticacioacuten (WSAA) 116
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)
De manera similar a lo expuesto anteriormente se provee una aplicacioacuten visual a modo de ejemplo paracomprobar el funcionamiento de la interfaz y los certificados tramitados desde AFIP
El instalador para este aplicacioacuten puede descargarse de
instalar-ej-wsaa-202zip (archivado en 1GoogleCode)bull
Por defecto se instala en CArchivos de Programawsaaej-wsaaexe
Importante Es necesario configurar correctamente el certificado y clave privada con la ruta completa a dichosarchivos
Para pruebas en produccioacuten cambiar la URL ahttpswsaaafipgovarwsservicesLoginCms y configurar los certificados
La version de la interfaz no debe decir Homologacioacuten y debe permitir cambiar la URL sino deben reinstalarlos instaladores para produccioacuten eliminando cualquier archivo anterior
Importante generalmente solo debe correr el ejemplo no instalar ni actualizar el componente WSAA si tieneuna versioacuten superior (o incluida con otro webservice como WSFEv1 o WSLPG) o esta usando el instaladorpara produccioacuten Si no lo tiene instalado puede usar instalador-WSAA-202cexe o superior
Errores Frecuentes
Los siguientes son posibles interpretaciones y soluciones a los errores que enviacutean los servidores de AFIP
Fallas SOAP
Falla SOAP ns1coenotAuthorized o ns1cmscertuntrusted
En WSAA descartando que se este usando el certificado del ambiente incorrecto (certificado dehomologacioacuten en produccioacuten y viceversa) es necesario que el certificado y CUIT esteacuten habilitados paraacceder al servicio web especificado (wsfe wsfex wsbfe wsctg wDigDepFiel etc) No es suficiente generarel certificado (en homologacioacuten o en produccioacuten) hay que solicitar explicitamente acceso al serviciorequerido ver Asociacioacuten de Certificado
Los servicios no relacionados a factura electroacutenica en produccioacuten tienen otros meacutetodos para asociar loscertificados
Ver Comprobacioacuten de Autenticacioacuten WSAA con informacioacuten para determinar o depurar el problema deacceso
Mensajes de Error Original
Computador no autorizado a acceder los servicios de AFIP (ns1coenotAuthorized)bull Certificado no emitido por AC de confianza (ns1cmscertuntrusted)bull
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA) 117
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso alWSN solicitado
Este error es reportado por AFIP cuando se esta solicitan varios tickets de acceso para el mismo certificado yservicio
Ver Reutilizacioacuten de Ticket de Acceso
Falla SOAP Server was unable to read request ---gt There is an error in XML document (41339) ---gt Input string was not in a correct format
Este error correponde al protocolo de intercambio de datos (ver Errores por Tipos de Datos) y puede significarque
Un campo obligatorio no fue completadobull Se completoacute un campo con un tipo de datos invaacutelido (float en lugar de int coma en vez de punto etc)bull Se especificoacute un valor no esperado por el web servicebull
En cualquier caso se puede revisar el mensaje XML de requermiento (atributos xml_request o XmlRequest) ybuscar la etiqueta con datos incorrectos en la liacutenea y caracter donde se informa el error (por ej en este casoliacutenea 4 cerca del caracter 1339) Ver maacutes informacioacuten y rutinas en Manejo de Excepciones
Otras fallas SOAP
WSAA y otros webservices pueden devolver errores no documentados o capturados por AFIP por ej
Server was unable to process request ---ampgt This OracleTransactionhas completed it is no longer usable
bull
SoapFault soapenvServer Could not initialize classorghibernatetransformTransformers
bull
Nuestra interfaz no utiliza Java ni Hibernate por lo que este tipo de problemas son cuestiones internas deAFIP Los errores Oracle u ORA son un problema interno de la base de datos de AFIP
Puede ocurrir en homologacioacuten y se debe esperar a que AFIP solucione el problema
En estos casos para produccioacuten se puede consultar con la mesa de ayuda sriafipgovar (seguramente es untema que lo resolveraacuten en el diacutea y no requiera una intervencioacuten de programacioacuten o configuracioacuten especial)
Errores generales AFIP
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token
Posiblemente haya un problema interno en AFIP (frecuentemente se soluciona automaacuteticamente ya que puedeser un problema de los servidores de AFIP ver abajo) o se este enviando incorrectamente el WSAAToken(por ej el lenguaje de programacioacuten o la base de datos recortoacute el string) Revisar que dicho dato se esteacutecopiando tal cual al webservice de negocio (WSFEv1Token WSMTXCAToken etc) o utilizar los nuevosmeacutetodos como WSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado118
En python se puede analizar el sign ejecutando
import base64print base64b64decode(wsaaToken)
Que deberiacutea mostrar un XML (token del ticket de acceso) como el siguiente
ltxml version=10 encoding=UTF-8 standalone=yesgtltsso version=20gt ltid unique_id=788962471 src=CN=wsaahomo O=AFIP C=AR SERIALNUMBER=CUIT 33693450239 gen_time=1401116887 exp_time=1401160147 dst=CN=wsfe O=AFIP C=ARgt ltoperation value=granted type=logingt ltlogin uid=C=ar O=pyafipws-sistemas agiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart service=wsfe regmethod=22 entity=33693450239 authmethod=cmsgt ltrelationsgt ltrelation reltype=4 key=20267565393gt ltrelationsgt ltlogingt ltoperationgtltssogt
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 a la firma
Posiblemente se este enviando incorrectamente el WSAASign (por ej el lenguaje de programacioacuten o la basede datos recortoacute el string) Revisar que dicho dato se esteacute copiando tal cual al webservice de negocio(WSFEv1Sign WSMTXCASign etc) o utilizar los nuevos meacutetodos comoWSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
600 ValidacionDeToken Error al verificar hash VerificacionDeHash No valid la firmadigital
Este error es reportado por AFIP cuando no se estaacute enviando al webservice de negocio (WSFEv1WSMTXCA WSFEXv1 etc) el Token y Sign obtenido con WSAA (o se lo enviacutea vaciacuteo)
Esto puede deberse porque no se esteacute validando correctamente el ticket de requerimiento de acceso(certificado invaacutelido fecha invaacutelida ambiente de produccioacuten homologacioacuten incorrecto ticket de acceso yaotorgado etc) Revisar que la URL de cada webservice sea correcta (homologacioacuten o produccioacuten tanto deWSAA como del servicio web de negocio WSFEv1 WSMTXCA etc) y que el certificado corresponda alambiente correcto
Ver Manejos de excepciones para detectar el inconveniente en WSAA
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC
No estaacuten sincronizados la fecha y hora del equipo con los servidores de AFIP
En linux se actualiza con
sudo ntpdate timeafipgovar
En windows se actualiza yendo a Propiedades del Reloj Hora de Internet introduciendotimeafipgovar
Otros mensajes similares
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token119
Token vencido fecha y hora de vencimiento del token enviado - fecha y hora actual del servidorbull Validaciondetoken No validaron las fechas del token Gen Time Exp Time Now Utcbull WSAA xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid Eltiempo de generacioacutenexpiracioacuten es invaacutelido generationTime posee formato o dato invaacutelido (ej en elfuturo o maacutes de 24 hs de antiguedad)
bull
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken No aparece CUITen lista de relaciones
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesovaacutelido pero se intenta operar con un CUIT incorrecto yo que no se corresponde al certificado Revisar que elCUIT sea correcto y que esteacute asociado al servicio y certificado (ver ARFE en punto anterior)
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken Error al verificarhash VerificacionDeHash No valid la firma digital
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el ambiente requerido (por ej ticket de acceso de homologacioacuten usado en produccioacuten) o no seenvioacute correctamente el tocken y sign
Usuario no autorizado para realizar esta operacioacuten Validacionde Token No valido idSistema wsfex (Id Sistema de token es wsfe)
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el servicio web requerido (por ej ticket de acceso de factura nacional -wsfe- usado enexportacioacuten -wsfex-)
Se debe revisar el valor del servicio al crear el requerimiento de acceso (CreateTRA)
Problemas con los certificados
Error inesperado no existe el archivo o directorio de certificadoclave privada
Este error corresponde a que la interfaz no encuentra los archivos del certificadoclave privada o la ruta notiene alguacuten directorio Revisar la ruta completa y reintentar
Mensaje de Error Original (certificado)
Unexpected Python Error lttype exceptionsIOErrorgt [Errno 2] No such file or directoryreingartcrt
Mensaje de Error Original (clave privada)
Unexpected Python Error 936error02001002system libraryfopenNo such file ordirectorycryptobiobss_filec122fopen(reingartkeyr) 936error2006D080BIOroutinesBIO_new_fileno such filecryptobiobss_filec125 None
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC 120
Error inesperado La clave privada no coincide con el certificado
Este error corresponde a que el certificado no fue creado con la clave privada dada por lo que no se puederealizar la encriptacioacuten necesaria Revisar que la clave privada sea con la que se creoacute el pedido de certificadooriginal (CSR) y reintentar Si no se cuenta con la clave privada original es imposible utilizar el certificadopor lo que es necesario generar y asociar uno nuevo
Mensaje de Error Original
Unexpected Python Error ltclass M2CryptoSMIMESMIME_Errorgt936error0B080074x509 certificate routinesX509_check_private_keykey valuesmismatchcryptox509x509_cmpc399 936error2107407FPKCS7routinesPKCS7_signprivate key does not match certificatecryptopkcs7pk7_smimec76
Error Inesperado La clave privada es invaacutelida
Mensaje de Error Original
Unexpected Python Error 936error0906D06CPEM routinesPEM_read_biono startlinecryptopempem_libc647Expecting ANY PRIVATE KEY
Este error corresponde a que la clave privada no estaacute en el formato correcto (texto plano PEM) seguramenteel archivo se encuentra en PKCS12 (binario certificado x509 + clave privada con extensioacuten p12 o pfx)lo que no es necesario para esta interfaz
Para convertir de pkcs12 a pem utilizar
openssl pkcs12 -in empresap12 -out empresapem -nodes
Eso generaraacute el archivo empresapem donde
La clave privada (key) se encuentra entre -----BEGIN RSA PRIVATE KEY----- y-----END RSA PRIVATE KEY-----
bull
El certificado (crt) se encuentra entre -----BEGIN CERTIFICATE----- y -----ENDCERTIFICATE-----
bull
Copiar dichas lineas en archivos separados Los archivos deben incluir el encabezado (-----BEGIN ) ypie (-----END ) para ser vaacutelidos
En caso de ser necesario para recorrer el camino inverso generar archivo PKCS12 desde PEM (no necesariopor esta interfaz) realizar
openssl pkcs12 -export -inkey empresakey -in empresacrt -out empresap12
Error inesperado Mala Desencriptacioacuten
Este error corresponde a que el certificado fue creado usando una frase de seguridad (passphrase) por lo queen tiempo de ejecucioacuten solicita entrada dicha contrasentildea (bloqueandose si no se proporciona)
Mensaje de Error Original
Error inesperado La clave privada no coincide con el certificado 121
M2CryptoEVPEVPError 3079395008error06065064digital enveloperoutinesEVP_DecryptFinal_exbaddecryptevp_encc3303079395008error0906A065PEM routinesPEM_do_headerbaddecryptpem_libc428
Para remover la passphrase (contrasentildea) por ej del archivo privadapem y grabarlo en privadakeyejecutar el siguiente comando
openssl rsa -in privadapem -out privadakey
Error inesperado Esperando certificado
El certificado proporcionado es invaacutelido
Es posible leer los datos de un certificado utilizando el comando openssl
openssl x509 -in reingartcrt -noout -text
Deberiacutea mostrar la informacioacuten completa del certificado
Certificate Data Version 3 (0x2) Serial Number 0791000000000000 Signature Algorithm sha1WithRSAEncryption Issuer CN=AFIP-Autoridad Certificante Homologacion C=AR ST=Capital Federal L=Ciudad Autonoma de Buenos Aires O=Administracion Federal de Ingresos Publicos OU=Subdireccion General de Sistemas y TelecomunicacionesemailAddress=ac_homoafipgovarserialNumber=CUIT 33693450239 Validity Not Before Feb 1 174604 2010 GMT Not After Feb 1 174604 2011 GMT Subject CN=Mariano ReingartserialNumber=CUIT 20267565393 O=PyAfipWs-Sistemas Agiles C=AR
Si no lo muestra posiblemente el certificado esteacute en otro formato (ver como convertir desde pk7 en puntosanteriores)
Mensaje de Error Original
M2CryptoX509X509Error 3078817472error0906D06CPEM routinesPEM_read_bionostart linepem_libc650Expecting CERTIFICATE
Error al dar de alta computador
A partir de Agosto de 2016 aparentemente AFIP estaacute solicitando claves maacutes largas pudiendose presentar elsiguiente error al tratar de generar un certificado por WSASS Autoservicio de Acceso a WebServices(TESTINGHOMOLOGACIOacuteN)
ERROR clsCrearComputador (CUIT=20267565393 ALIAS=test_1024) createComputer Error al dar de alta al computador (CUIT=20267565393 ALIAS=test_1024) La longitud de clave puacuteblica debe ser estar comprendida entre 2048 y 8192 bits
En este caso de debe generar la clave con mayor cantidad de bits por ej indicando el paraacutemetro 2048 aInstructivo OpenSSL
Error inesperado Mala Desencriptacioacuten 122
La herramienta WSAA 110g ya crea de manera predeterminada claves de 4096 bits ver Crear Pedido CSR
Se estima que estas cuestiones afectaraacuten en PRODUCCIOacuteN cuando venzan la mayoriacutea de los certificados paraese entorno el 21 de Febrero de 2016 Es posible con este componente revisar el vencimiento de cada crtcon los Metodos para Certificados
Excepcioacuten SSLError X509_load_cert_crl_file
No se puede cargar el archivo afip_ca_infocrt de la lista de autoridades de certificacioacuten de confiaza(CACERT) necesario para verificar el canal seguro como solicita AFIP
Ese archivo en las ultimas actualizaciones se encuentra en la carpeta conf o puede ser descargado desde el el repositorio
El archivo debe ser copiado a la carpeta principal donde esteacute el programa WSAA o configurar el paraacutemetroCACERT con la ruta a la ubicacioacuten completa
Mensaje de Error Original
[Errno 185090050] _sslc345 error0B084002x509 certificateroutinesX509_load_cert_crl_filesystem lib
Falla SOAP WSAA (SoapFault)
En ciertas ocaciones WSAA puede denegar el acceso con los siguientes mensajes
ns1cmscertexpired Certificado expiradobull ns1xmlbad No se ha podido interpretar el XML contra el SCHEMAbull cmscertuntrusted Certificado NO emitido por un AC de confianzabull cmssigninvalid cmsbad y cmsbadbase64 no se esta informando correctamente el mensajecriptograacutefico firmado (Firma invaacutelida o algoriacutetmo no soportado)
bull
Generalmente se esta tratando de usar un certificado invaacutelido o expirado se estaacute pasando mal alguacuten paraacutemetro(servicio o tiempo de vida) o se estaacute tratando de acceder al ambiente equivocado (el cerificado es deproduccioacuten y el servidor de homologacioacuten o viceversa)
Ver consulta tema anterior para revisar el certificado Modo Homologacioacuten Produccioacuten y Comprobacioacuten deAutenticacioacuten WSAA
Errores de Conectividad
Antes las fallas de conexioacuten sobrecarga caiacutedas de internet u otros problemas de comunicacioacuten la interfazpuede devolver los siguientes errores (en su mayoriacutea del lenguaje de programacioacuten Python o sistemaoperativo)
AttributeError NoneType object has no attribute makefile no sepuede establecer el canal de comunicacioacuten (socket) puede que internet no este funcionando en elcliente
bull
socketgaierror [Errno -2] Name or service not known no se puede resolverel nombre del equipo revise los servidores DNS asignados a su conexioacuten de internet
bull
Error al dar de alta computador 123
socketerror [Errno 104] Connection reset by peer la conexioacuten fue cerradapor la contraparte (servidor AFIP) posiblemente por sobrecarga
bull
lturlopen (11001 getaddrinfo failed)gt no se puede resolver el nombre de archivorevise los DNS y si estaacute utiliando alguacuten servidor intermedio (proxy)
bull
ExpatError Not well formed token el servidor posiblemente no esta devolviendo XMLcorrecto debido a un error interno
bull
BadStatusLine ResponseNotReady significa que los servidores de AFIP no contestan algocoherente (compatible con el protocolo HTTP)
bull
AttributeError Tag not Found Body (no elements found) significa que losservidores de AFIP no contestan un XML vaacutelido seguacuten el protocolo de webservices SOAP
bull
SSLError The read operation timed out la conexioacuten SSLTLS supero el tiempo deespera posiblemente es un error de conectividad de Internet o los servidores de AFIP estaacuten caiacutedos
bull
Service Unavailable El servidor de AFIP no estaacute disponible y no devuelve un mensaje XMLcorrecto
bull
ServerNotFoundError Unable to find the server atservicios1afipgovar no estaacute resolviendo el nombre del Servidor de AFIP a la direccioacutenIP revisar la configuracioacuten DNS con su proveedor de Internet
bull
error [Errno 111] Connection refused error [Errno 10061] No sepuede establecer una conexioacuten ya que el equipo de destino denegoacuteexpresamente dicha conexioacuten revisar que no esteacute mal configurado el servidor proxy(comentar o no enviar parametro si no corresponde)
bull
En todos estos casos se recomienda reintentar la operatoria luego de unos instantes despueacutes de verificar laconexioacuten de internet Se puede probar ingresando a la URL del webserice (por ej[ httpsservicios1afipgovarwsfev1serviceasmxWSDL
WSFEv1]) con un navegador y ver si les abre correctamente la paacutegina
Tambieacuten puede haber un tema de antivirus o proxy que esteacute bloqueando la conexioacuten saliente En ese caso(servidor intermedio para poder salir a internet) se debe consultar con los administradores de la red yposiblemente se necesite configurar
El paraacutemetro proxy en el meacutetodo Conectar formato usuarioclaveservidorpuerto (verejemplo)
bull
o seccioacuten [PROXY] en el archivo receini (ver ejemplo)bull
Ver la siguiente seccioacuten si el problema persiste Recordar que a veces funciona o no dependiendo del lugardesde donde se conecta el cliente ya que AFIP tiene una granja de servidores pueden probar reconectandosea internet desde otra IP para ver si los deriva a un servidor que funcione (o esperar a que baje la demanda yover si lo solucionan)
Errores de Protocolo SSL
AFIP estaacute desafectando los protocolos de seguridad obsoletos (SSLv3 requiriendo TLSv1+) por lo que ensistemas operativos antiguos o desactualizados (por ej Windows XP) puede existir una incompatibilidad conque imposibilite la comunicacioacuten segura es recomendable actualizar el sistema operativo lenguaje deprogramacioacuten y componentes
SSLEOFError EOF occurred in violation of protocol (_sslc590)bull SSLHandshakeError [SSL SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alertbull
Errores de Conectividad 124
handshake failure (_sslc581)[Errno 1] _sslc490 error14094410SSLroutinesSSL3_READ_BYTESsslv3 alert handshake failure
bull
Como mitigacioacuten puede utilizare un transporte alternativo basado en la biblioteca CURL que en general tienemejor cobertura para este tipo de cuestiones en Windows
Para ello establecer paraacutemetro wrapper=pycurl en el meacutetodo Conectar si se utilizan loscomponentes
wrapper = pycurlok = WSFEv1Conectar(cache wsdl proxy wrapper)
Si se utilizan las herramientas por linea de comando configurar en el receini
[WSFEv1]wrapper = pycurl
Errores AFIP CUIT Emisor
En caso de problemas con el CUIT emisor y no superar una de las siguientes validaciones excluyentes(verificacioacuten de datos registrales inscripcioacuten en el reacutegimen autorizacioacuten de emisioacuten de comprobantesdomicilio fiscal etc) AFIP devolveraacute un Coacutedigo de Error 10000 con los mensajes posibles
01 LA CUIT INFORMADA NO CORRESPONDE A UN RESPONSABLE INSCRIPTO EN ELIVA ACTIVO
bull
02 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESELECTRONICOS ORIGINALES O EL PERIODO DE INICIO AUTORIZADO ES POSTERIORAL DE LA GENERACION DE LA SOLICITUD
bull
03 LA CUIT INFORMADA REGISTRA INCONVENIENTES CON EL DOMICILIO FISCALbull 04 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESCLASE A
bull
05 EL CUIT INFORMADO COMO EMISOR NO SE ENCUENTRA REGISTRADO DE FORMAACTIVA EN LAS BASES DE LA ADMINISTRACIOacuteN
bull
06 DEBE POSEER AL MENOS UNA ACTIVAD ACTIVAbull
En estos casos debe contactar la mesa de ayuda de AFIP para solucionar el inconveniente que esteacute bloqueandola emisioacuten de facturas electroacutenicas (generalmente no es un tema teacutecnico sino un traacutemite administrativo)
Errores AFIP Punto de Venta
Otros errores relacionados a la emisioacuten de facturas electroacutenicas pueden ser
1501 El Punto de Venta debe ser del tipo habilitado para el reacutegimen CAE Codificacioacuten de Productos- Web Services o del reacutegimen CAEA
bull
Errores de Protocolo SSL 125
En este caso se debe revisar que el tipo de punto de venta dado de alta coincida con el servicio web aconsumir (campo sistema de facturacioacuten asociado)
RECE para aplicativo y web services (CAE WSFEv1 factura electroacutenica mercado interno tradicionalsin detalle)
bull
RECE para aplicativo y web services EXPORTACION (CAE WSFEXv1 factura electroacutenicaexportacioacuten con detalle)
bull
Codificacioacuten de Productos Web Services (CAE WSMTXCA factura electroacutenica mercado interno condetalle)
bull
CAEA - Codificacioacuten de Productos (CAE anticipado WSMTXCA factura electroacutenica mercado internocon detalle)
bull
No debe figurar Factura en Linea porque ese punto de venta solo permite operar por Clave Fiscal serviciointeractivo de Comprobantes en Liacutenea
Errores de tipos de datos
Se recuerda que este componente es dinaacutemico y generalmente no realiza conversioacuten ni ajustes en los tipos dedatos por lo que la aplicacioacuten que lo utilice debe revisarlos y verificar que sean correctos para ser enviadosrespetando las especificaciones y validaciones de AFIP
Debido a que los distintos lenguajes de programacioacuten pueden almacenar y pasar los valores de formasdiferentes (eventualmente en registros recordsets campos fields o similares) es recomendable que seconviertan todos los datos a string (cadenas de caracteres) para evitar errores de conversioacuten y redondeoTambieacuten se pueden usar otros tipos de datos baacutesicos como enteros (integer) flotantes (float)numeacutericomoneda (currencydecimal) que son los que en definitiva reconoce AFIP Las fechas deben pasarseen formato string seguacuten el formato de cada webservice Los importes deben pasarse con punto decimal (nocoma y sin separadores de miles ni signo pesos)
En VB se pueden convertir los valores con CStr (string) CLng (long) CCur (currency) etc o incluso lasfunciones str o val en ciertos casos ejemplo
tipo_cbte = CInt(rstipo_cbte)
Para un ejemplo concreto ver la implentacioacuten completa de referencia factura_electronicamdb (Access 2k osuperior)
En caso de enviar los tipos de datos incorrectos en Traceback (ver Manejo de Excepciones) podraacuteencontrarse algunos de los mensajes frecuentes
AttributeError PyIDispatch object has no attribute strip se envioacuteun dato que no puede convertirse a string
bull
PyIDispatch at 0x10531678 with obj at 0x0C997832 se usoacute un tipo de datos noconvertidosoportado ver Mensajes XML
bull
TypeError int() argument must be a string or a number notNoneType se envioacute un nulo en un campo que necesitaba un nuacutemero
bull
ValueError invalid literal for int() with base 10 A se envioacute un stringen un campo que necesitaba un nuacutemero
bull
Errores AFIP Punto de Venta 126
Errores internos de AFIP
Ocasionalmente pueden producirse errores no documentados en las especificaciones teacutecnicas de AFIP Por ejcuando se intenta utilizar la URL de un webservice obsoleto como WSBFE en vez de WSBFEv1 el servidorde AFIP ha devuelto el siguiente error
soapServer Server was unable to process request ---ampgt Object reference not set to an instance ofan object
bull
Otros problemas internos de los servidores de AFIP que los resuelve dicho organismo automaacuteticamente (sinintervencioacuten necesaria generalmente en el transcurso del diacutea) son
500 Error general DB (InsertandAuthorize - fex_pckprc_ins_rcel_comprobantes OEX ) - (1654) -ORA-01654 unable to extend index MIGRARCEL_CMP_UNC_INDEX by 4 in tablespaceFISCO_DATOS ORA-06512 at MIGRAFEX_PCK line 353 ORA-06512 at line 1
bull
500 Error interno DB - fex_Rece_Pckget_ctzbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
500 Error general DB (InsertandAuthorize - prc_ws_ins_cab) BFEErrorbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-12535 TNSoperationtimed out
bull
500 Error interno de aplicacioacuten - Metodo FECAESolicitar - Index was outside the bounds of thearray
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-00257 archiver error Connect internalonly until freed ORA-02063 preceding line from GHOST ORA-06512 at ORARECE_V1_PCKline 1651 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-28000 the account is lockedORA-02063 preceding line from E15K_PADR ORA-06512 at ORARECE_V1_PCK line 1806ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLEinitialization or shutdown in progress
bull
501 Error interno de base de datos - CAECabInsert ORA-02068 following severe error fromCONTRIB ORA-03113 end-of-file communication channel ORA-06512 atORARECE_V1_PCK
bull
501_ Error interno de base de datos - CAECabInsert ORA-01001 invalid cursor ORA-06512 atORARECE_V1_PCK line 580 ORA-06512 at ORARECE_V1_PCK line 1070 ORA-06512 atline 1
bull
501 Error interno de base de datos - CAEDetInsert ORA-03233 unable to extend tableORAF136_DETALLES_FACTE subpartition F136_DET_2011_CLAVE_08 by 128 in tablespaceUSERS
bull
501 Error interno de base de datos - CAESequenceGenerarORA-01502 indexORAF136_DET_CAE_UK or partition of such index is in unusable state ORA-06512 atORARECE_V1_PCK line 1477 ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace FISCO_DATOS ORA-06512 at ORARECE_V1_PCK line1168 ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLE initializationor shutdown in progress
bull
501 Error interno de base de datos - AlicIvaCAEInsertORA-14400 inserted partition key does notbull
Errores internos de AFIP 127
map to any partition ORA-06512 at ORARECE_V1_PCK line 1308 ORA-06512 at line 1501 Error interno de base de datos - CuitsEnPadronSet ORA-12541 TNSno listener ORA-06512 atORARECE_V1_PCK line 1831 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-04031 unable to allocate 20528 bytesof shared memory (shared poolunknown objectsga heap(10)KTI SGA freeable small pool)ORA-02062 preceding line from SEFI ORA-06512 at ORARECE_V1_PCK line 1898ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace USERS at ORARECE_V1_PCK line 1202
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-12505 TNSlistener could notresolve SID given in connect descriptor
bull
501 Error interno de base de datos - CAECompConsultarORA-01502 indexORAIX_F136_DETALLES_TPN or partition of such index is in unusable state
bull
501 Error interno de base de datos - CAECabInsert ORA-01502 index ORAF136_CAB_CUIT_IDor partition of such index is in unusable state
bull
501 DataBase - Resultado inesperadobull 501 Error interno de base de datos - CAESequenceGenerarORA-01654 unable to extend indexORAF136_DET_CAE_UK by 1024 in tablespace FISCO_FE ORA-06512 atORARECE_V1_PCK line 1781 ORA-06512 at line 1
bull
502 Error interno de base de datos - Autorizador CAE - Transaccioacuten Activabull Error interno de aplicacioacuten - Metodo FECompConsultarORA-01034 ORACLE not availableORA-27101 shared memory realm does not exist
bull
Error interno de aplicacioacuten - Metodo FECompConsultarORA-01035 ORACLE only available tousers with RESTRICTED SESSION privilege
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-28000 the account is lockedbull soapenvServer Error de conexin DB [Cd A001]bull soapenvClient Error de acceso a la base de datosbull soapenvClient business0010bull soapenvClient orgapacheaxis2databindingADBExeption unexpected subelementconsultarCTGDatos
bull
Tambieacuten pueden ocurrir Errores de Conectividad a nivel de sistema operativo socket error ioerror timeout connection refused ssl handshake server not found etc (verarriba) especialmente cuando los servidores de AFIP se saturan por cambios y actualizaciones
Realizar la consulta con la mesa de ayuda de AFIP sriafipgovar (produccioacuten) y webservicesafipgovar(homologacoacuten) para dejar constancia del problema y si corresponde ver de utilizar los meacutetodos tradicionalespara emitir comprobantes seguacuten RG248508 Artiacuteculo 33
En el caso de inoperatividad del sistema se deberaacute emitir y entregar el comprobanterespectivo utilizando el controlador fiscal o los comprobantes manuales seguacuten correspondahasta tanto esta Administracioacuten Federal apruebe otro procedimiento alternativo de respaldo
Importante en general es obligatorio informar los comprobantes emitidos manualemente por formulariomultinota en dependencia de AFIP a traveacutes de servicios en linea o como AFIP disponga en casos particularesConsultar con el contador la normativa y legislacioacuten vigente
Errores internos de AFIP 128
Errores de Permisos
Dependiendo de las poliacuteticas de seguridad puede ser necesario dar permisos de acceso a la carpeta cache(archivos temporales) o aquellas donde se almacenen los archivos de intercambio (entrada salida PDF oXML)
IMPORTANTE los certificados y claves privadas no deben ser expuestas en una carpeta puacuteblica delservidor web o similar Utilizar passphrase (ver Meacutetodos WSAA) para mayor proteccioacuten y seguridad
Linux
En GNULinux generalmente es necesario que el usuario del servidor web (www-data o similar) puedaacceder a la carpeta
Por ejemplo se podriacutea utilizar los siguientes comandos
chown www-data -R optpyafipwschmod a+xr -R optpyafipwschmod a+xwrt -R optpyafipwscache
Revisar los permisos con su administrador de sistemas
Windows
Acceso Denegado (Archivos)
Error IOError [Errno 13] Permission denied cArchivos deProgramaPyAfipWSCacheTAXML
En general es recomendable utilizar una carpeta con permisos de escritura para la aplicacioacuten
Si esto no es posible se puede configurar los permisos de acceso
Explorador de Archivosbull Buscar carpeta de instalacioacuten (CArchivos de ProgramaPyAfipWS)bull Propiedades (click derecho)bull Solapa Seguridadbull Seleccionar Usuarios que ejecutan la aplicacioacutenbull Editarbull Modificar (habilitar)bull Aceptarbull
Ejemplo
Acceso Denegado (CreateObjectCreateInstance)
En ciertos servidores (Windows 7 o superior) dependiendo de la configuracioacuten debe permitir inicio yactivacioacuten de los componentes
Errores de Permisos 129
Error al llamar a CreateObject CreateInstance o similar Acceso Denegado(HRESULT0x80070005 E_ACCESSDENIED
Solucioacuten
Inicio buscar Servicios de Componentes (o via el Panel de Control HerramientasAdministrativas)
bull
Equipos Mi PC Configuracioacuten DCOMbull Buscar WSAA WSFEv1 o el componente que desee configurarbull Propiedades (Click Derecho)bull Solapa Seguridadbull Permisos de inicio y activacioacuten Personalizado Editarbull Agregar los usuarios que deben tener permisos necesariosbull Aceptarbull
Repetir para Permisos de Acceso y Configuracioacuten de ser necesario
Ejemplo
Acceso Denegado (CreateObjectCreateInstance) 130
Aplicativos Geneacutericos y Herramientas Avanzadasbull PyRece Aplicativo visual simil SIAP - RECE (CSV PDF Email)diams FEpy Herramienta universal unificada e integradadiams FacturaLibre Aplicacion online (web2py)diams PyFactura Aplicativo visual y simple (gui2py) para CAE y PDF factura electroacutenicadiams LibPyAfipWs Biblioteca DLL para lenguajes C C++ y similaresdiams Factura Electroacutenica en Python Informacioacuten Teacutecnica (SOAP XML PDF DBF etc)diams
Emisioacuten y almacenamiento electroacutenico de comprobantes originales AFIP - Argentina Resolucioacuten General136102 226507 228907 248508 RG257009 255709 275810 290410 306711 341912 353613357113 RG366814 RG368914 RG374915 RG377915 RG4109-E17 RG436718 RG440119
2008-2019 copy Mariano Reingart Febrero de 2019
Iacutendice
Importante leer primero antes de comenzar
Historial de Cambios
Para el detalle completo de los ajustes modificaciones y mejoras al coacutedigo fuente ver Versiones Publicacadasy Conjuntos de Cambios (Sitio del Proyecto en GitHub)
Julio 2021
Implementacioacuten de coacutedigo QR a partir del 01032021 seguacuten RG48922020 Procedimiento Reacutegimenespecial de emisioacuten y almacenamiento electroacutenico de comprobantes originales RG Ndeg 4291Implementacioacuten del coacutedigo QR
bull
Julio 2020
AFIP anuncia la desafectacioacuten de protocolos TLS antiguos (v10 y 11) a partir del 2772020 seguacutencronograma Se actualizan libreriacuteas a tal efecto
bull
Junio 2020
RG454019 Procedimiento Facturacioacuten Emisioacuten de notas de creacutedito yo deacutebito Se agregan meacutetodosWSFEv1AgregarPeriodoComprobantesAsociadosWSMTXCAAgregarPeriodoComprobantesAsociados
bull
Febrero 2019
RG436718 Factura de Creacutedito Electroacutenica MiPyMEs FEv213 FCE Se agrega fecha en meacutetodoWSFEv1AgregarCmpAsoc y datos opcionales CBU
bull
RG440119 WSFEXv150 Se agrega meacutetodo WSFEXv1GetParamMonConCotizacion y ejemploRECEX1 monctz para consultar cotizacioacuten moneda aduana por fecha
bull
Aplicativos Geneacutericos y Herramientas Avanzadas 2
Agosto 2018
RG 4109-E Bienes Muebles Registrables Se agrega meacutetodo WSFEv1AgregarComprador y formatointercambio texto dbf
bull
Febrero 2018
Se incluye la nueva Autoridad Certificante -CA- que utilizaacute AFIPbull
Agosto 2017
Se agrega RG 4109-E COMPG_v2_10 Venta de Bienes Muebles Registrables Se agrega meacutetodoAgregarComprador y formato Registro Compradores TXT CompradoresDBF y pseudocoacutedigo deejemplo WSFEv1
bull
Marzo 2017
Se agrega documentacioacuten sobre Actualizaciones (Service Pack 2) WSFEv29 (Cuit en CbteAsoc yRG 4004-E Alquileres Impuesto a las Ganancias) y Release v05 (WSMTX)
bull
Nuevo campo CUIT en meacutetodo AgregarCmpAsoc para WSFEv1 y WSMTXbull
Febrero 2017
Documentacioacuten sobre Instaladores Firmados Digitalmente (Editor Comprobado)bull
Septiembre 2016
Se agrega documentacioacuten sobre Actualizaciones (Service Pack 1)bull
Agosto 2016 (hasta revisioacuten interna 739)
Se agregan comentarios sobre Eventos y COMPGv28 para maacutes info ver Novedades WSFEv1bull Se documentan meacutetodos para solicitud de muacuteltiples CAE por enviobull Se agregan mensajes de errores frecuentes y posibles soluciones (Protocolo SSLCERTIFICATE_VERIFY_FAILED fallas soap service unavailable tag not found IO errorsincronizar relojes etc)
bull
Se ajusta cambio de generacioacuten de claves con longitud de 2048 bits por cambio en AFIPbull Se ajustan links por desafectacioacuten de Google Code (histoacuterico)bull Se agregan aclaraciones sobre obtencioacuten de CAE reproceso (incluyendo ejemplo avanzado para VFPy VBNET) cache etc
bull
Se agrega documentacioacuten sobre meacutetodos para certificados automatizacioacuten de generacioacuten y anaacutelisis(por ej vencimiento)
bull
Se agrega datos opcionales RG 3779 RG 3668bull
Junio 2015 (hasta revisioacuten interna 638)
Se agrega Aclaraciones Generales PDF (IVA leyendas RG2845 Art 27 Comprobante Autorizadoetc)
bull
Se agrega logotipo AFIP al PDF y otras modificaciones a la plantilla de facturas electroacutenicasbull Se agrega atributos auxiliares y ejemplos de campos personalizables a generacioacuten de PDFbull Se unifico formato intercambio PDF y se agrega descripcioacuten de cada campobull
Historial de Cambios 3
Se agrega video explicativo WSASS y actualiza instructivo certificadosbull Se actualizan paraacutemetros WSAA SignTRA (passphrase y contenido archivos)bull Se agregan ejemplos simples de reutilizacioacuten de TA para VFP y VBbull Se ajustan links al coacutedigo fuente hacia repositorio GitHub por baja de GoogleCodebull Se agregan ejemplos de RECE1 y PYFEPDFbull Se ajusta descripcioacuten obtencioacuten de CAE WSFEv1bull Se agregan errores internos de AFIPbull Se realizan correcciones menores de tipeo (motivos_obs base_imp)bull Se actualiza infomacioacuten para Factura C Exentos (RG3749)bull
Abril 2015 (hasta revisioacuten interna 504)
Se agrega metodo WSFEv1EstablecerCampoFacturabull Se ajusta formato de intercambio WSMTXCAbull Se ajustan instaladoresbull Se agregan maacutes errores frecuentes de AFIPbull
Octubre 2014 (hasta revisioacuten interna 479)
Se agrega informacioacuten y ejemplo datos opcionales RG 3668 WSFEv1bull Se agrega campos opcionales RG3668 al formato de RECE1bull Se ajusta manejo de errores (ejemplo VFP y simplificacion)bull Se agregan errores internos de AFIP (shared pool ora account locked) punto de venta y temasmenores
bull
Diciembre 2013 (hasta revisioacuten interna 389)
Se ajusta tabla comparativa (RG3536 y RG3571)bull Se agregan errores internos de AFIP ORA-12535bull Se ajusta formato RECE1 y temas menores (estilo)bull
Abril 2013 (hasta revisioacuten interna 343)
Se agrega ejemplo WSAA sobre reuso del ticket de accesobull Se agrega ejemplo WSAA sobre verificacioacuten de canal segurobull Se actualiza info sobre autoridades certificantebull Se actualiza info sobre renovacioacuten de certificadosbull Se ajusta links WSBFEbull Cambios menoresbull
NoviembreDiciembre 2011 (hasta revisioacuten interna 319)
Se ajusta seccioacuten WSFEXv1 Versioacuten 1bull Se agrega secciones Ajustes de WSFEX a WSFEXv1 y RECEX vs RECEX1bull Se ajusta ejemplo WSFEX (WSFEXv1)bull Se actualiza Mensajes XML con instrucciones para enviar campos vacios o nulosbull Cambios menores (coealreadyAuthenticated)bull
Julio 2011 (hasta revisioacuten interna 281)
Se agrega seccioacuten Version 1 (WSFEXv1) a WSFEX y se ajusta al nuevo webservicebull
Historial de Cambios 4
Se agrega seccion PyI25 Generador de Coacutedigos de Barrasbull Se agrega seccioacuten PyEmail Envio de correo electroacutenicobull Se agrega seccioacuten Nuevas Validaciones a WSFEv1bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
AbrilMayo 2011 (hasta revisioacuten interna 221)
Se agrega seccioacuten Manejo de Excepcionesbull Se agrega seccioacuten Verificacioacuten del Canal de Comunicacioacuten Segurobull Se agrega seccioacuten Tabla Comparativa Webservicesbull Se agrega seccioacuten Reutilizacioacuten de Ticket de Acceso a WSAAbull Se agrega seccioacuten Obtencioacuten de atributos avanzados a WSAA y WSFEv1bull Se agrega seccioacuten Factura C Monotributo a WSFEv1bull Se actualiza secciones WSAA (meacutetodos atributos errores)bull Se actualiza secciones WSFEv1 (meacutetodos atributos errores)bull Se actualiza secciones WSFEX (meacutetodos atributos errores)bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
FebreroMarzo 2011 (hasta revisioacuten interna 155)
Se agrega seccioacuten WSMTXCA (objeto meacutetodos atributos ejemplo errores) y RECEMbull Se agrega seccioacuten Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)bull Se actualiza seccioacuten WSFEv1 y RECE1bull Se agrega seccioacuten PyFEPDF (interfaz COM herramient CLI archivos de texto tablas DBFconfiguracioacuten y disentildeador visual)
bull
Se ajusta seccioacuten Interfase por archivos de texto siacutemil SIAP - RECE (configuracioacuten tablas DBF)bull
Ver historial completo desde revisioacuten 1 -2009- (solo usuarios autorizados)
Funcionamiento del campo ID
Importante El ID no aplica a los nuevos webservices (WSFEv1 ni WSMTXCA) igualmente se aconseja leery seguir las siguientes recomendaciones Si bien los nuevos webservices tampoco tienen reprocesamiento lainterfaz lo realiza internamente verificando los datos enviados y recibidos (ver informacioacuten adicional en cadawebservice)
El ID es el Identificador del requerimiento requerido por AFIP un nuacutemero interno de secuencia controladopor el emisor que permite identificar de manera uacutenica cada operacioacuten de autorizacioacuten (solicitud de CAE)Este dato es de vital importancia para poder recuperar un CAE frente a problemas de comunicacioacuten o fallasdel hardwaresoftware Sin el eacutes imposible recuperar un CAE y se puede llegar a bloquear todo el circuito defacturacioacuten electroacutenica en los servidores de AFIP Por ello es recomendable que sea un dato propio delsistema de facturacioacuten almacenado en un soporte permanente (base de datos en el disco riacutegido o similares)
El ID debe ser uacutenico para cada comprobante autorizado y debe cambiar si hubo rechazo previo Los ID nodeben reutilizarse salvo para realizar reprocesos (recuperar un CAE ya emitido) La AFIP almacena lastransacciones seguacuten su ID a mismo ID mismo resultado y CAE (independientemente de los otros datos de laoperacioacuten de transaccioacuten)
En el caso de fallas los webservices poseen meacutetodos para recuperar el uacuteltimo ID informado (por ej verUltNro o GetLastID)
Funcionamiento del campo ID 5
Si bien los ejemplos (incluyendo los oficiales) utilizan generalmente el uacuteltimo ID + 1 esto es solo para ilustrarel meacutetodo en general no es recomendable su uso en produccioacuten ademaacutes de requerir comunicacioacuten extra (noes obligatorio llamar al meacutetodo uacuteltimo ID) ya que puede generar inconvenientes en caso de muacuteltiples equipossolicitando autorizacioacuten simultaacuteneamente fallas de comunicacioacuten o problemas de almacenamiento Seriacutearecomendable por ej que el ID sea un campo autonumeacuterico autoincremental o serial secuencial queacompantildee a la factura
El ID es arbitrario y no tiene relacioacuten con el nordm de factura La uacutenica condicioacuten es que debe ser uacutenico pero noes necesario que sea creciente o secuencial
Validez de Comprobantes Electronicos emitidos
El uso incorrecto de los servicios web (no respetando el funcionamiento de los campos en especial el IDreproceso motivos de observacioacuten y errores) puede ocasionar comportamientos erraacuteticos (facturas noautorizadas o autorizadas con otros datos) Se recomienda revisar el funcionamiento general de su sistema enproduccioacuten utilizando las validaciones que prevee la AFIP
Consulta interactiva de CAE httpsservicioswebafipgobargenericoscomprobantescaeaspxbull Consulta interactiva de CAE Anticipado httpsservicioswebafipgobargenericoscomprobantescaeaaspx
bull
Por Clave Fiscal servicio Verificacioacuten de validez de comprobantes emitidos (solo receptores)bull Por servicio web para Facturas E A y B (Bono Fiscal) Meacutetodo Recuperar comprobante (para facturasde exportacioacuten solo emisores)
bull
Para maacutes informacioacuten y automatizacioacuten del proceso ver servicio web Constatacioacuten de ComprobantesWSCDC
Mensajes XML
Los mensajes XML contienen la comunicacioacuten transmitida entre el sistema y la AFIP en el formato deintercambio de los servicios web
Atributo XmlRequest (requerimientoxml) incluye credenciales de acceso y la solicitud remota(meacutetodo a utilizar paraacutemetros etc)
bull
Atributo XmlResponse (respuestaxml) incluye los datos devueltos por el proceso remotoincluyendo mensajes de error (si corresponde)
bull
Almacenar estos archivos es de vital importancia para el registro de las operaciones realizadas por webservicey su eventual verificacioacuten depuracioacuten o solucioacuten de inconvenientes La informacioacuten contenida en estosarchivos es solo relevante a los desarrolladores no es necesario que sean enviados al usuario final
Dependiendo de la interfaz se pueden recuperar estos mensajes en forma de cadenas de texto para su posterioralmacenamiento o generar los archivos correspondientes
Para maacutes informacioacuten ver atributos XmlRequest y XmlResponse o paraacutemetros xml --trace
Guardar WSFEv1XmlRequest y WSFEv1XmlResponse (ver Manejo de Excepciones para unarutina completa)
bull
RECE1EXE xml --trace generaraacute los archivos con la extensioacuten xml en el directorio de laherramienta (ver Paraacutemetros para maacutes informacioacuten)
bull
Validez de Comprobantes Electronicos emitidos 6
Nota de Seguridad los mensajes pueden incluir datos sensibles (credenciales de acceso a AFIP token ysign) que pueden ser vaacutelidos por varias horas auacuten despueacutes de efectuada la comunicacioacuten En caso compartirestos archivos (por ej en el foro puacuteblico de consultas) se deberiacutean tomar las medidas necesarias para evitarinconvenientes (recortar el campo sign es suficiente para que no se puedan reutilizar las credenciales deacceso)
Importante En ciertos casos para determinados webservices AFIP solicita tag vacios (por ejpermiso_existente en WSFEXv1) por lo que se ha ajustado en la biblioteca de comunicacioacuten SOAP(versioacuten 127 y superiores) para manejar tres escenarios
Enviar un dato por ej permiso_existente = Sltpermiso_existentegtSltpermiso_existentegt
bull
Enviar un tag vacio completando con string vacio por ej permiso_existente = ltpermiso_existentegtltpermiso_existentegt
bull
No enviar un tag (valor NULL NIL None Void etc) por ej permiso_existente = NULL(no genera XML)
bull
En caso de no seguir las especificaciones de AFIP el webservice retornaraacute un mensaje de error del tipoServer was unable to read request ---gt There is an gt error in XMLdocument (5 1353) ---gt Input string was not in a correct format dondeindica revisar el XmlRequest liacutenea 5 columna 1353 (en este caso puntual) para corregir el dato enviado
Documentacioacuten Oficial AFIP
Recomendamos revisar y seguir los lineamientos y normativa de AFIP
httpwwwafipgovarfebull httpwwwafipgovarwsbull
Recordamos que la interfaz y bibliotecas (PyAfipWs) no realizan ninguacuten tipo de chequeo o validacioacutenadicional (ya que esta tarea la realizan los servidores de AFIP) y tampoco convierte entre distintos tipos dedatos (salvo conversioacuten trivial a cadenas -strings- para ser enviadas por XML) por lo que es responsabilidadde la aplicacioacuten principal cumplir con las especificaciones y legislacioacuten vigente referidas a los servicios webde AFIP proporcionando los datos correctos que correspondan
Modos Homologacioacuten y Produccioacuten
Por disentildeo el instalador para Windows publicado de la interfaz COM (pyafipwspy) y herramientas por liacuteneade comando (recepy recexpy recebpy rece1py) funcionaraacute inicialmente solo en modo homologacioacuten(testing) ya que su objetivo es simplemente facilitar las pruebas para que los usuarios que no concen Pythonpuedan evaluar el producto antes de interiorizarse en el lenguaje yo contratar el soporte comercial
Con los instaladores de evaluacioacuten en modo de homologacioacuten (pruebas) se ignoraraacute las URLsproporcionadas a CallWSAA Conectar o especificadas en receini En ese caso para activar modo produccioacuten(definitivo) es necesario ajustar el coacutedigo fuente ver instrucciones de Instalacioacuten desde Coacutedigo Fuente( video explicativo) Ofrecemos soporte comercial contemplando el acceso al instalador compilado ampajustado para produccioacuten para los clientes que asiacute lo requieran Ver Costos y Condiciones
Mensajes XML 7
Configuracioacuten para Produccioacuten
Para entrar en el ambiente de produccioacuten de AFIP ademaacutes de utilizar el instalador correcto (no el deevaluacioacuten ver arriba) se debe usar las URLWSDL correspondientes para cada webservice (modohomologacioacuten deshabilitado)
WSAA httpswsaaafipgovarwsservicesLoginCmswsdlbull WSFE httpsservicios1afipgovarwsfeserviceasmx -obsoleto desde 2011 por AFIP-bull WSFEv1 httpsservicios1afipgovarwsfev1serviceasmxWSDLbull WSFEXv1 httpsservicios1afipgovarwsfexv1serviceasmxWSDLbull WSMTXCA httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAServicewsdlbull WSBFEv1 httpsservicios1afipgovarwsbfev1serviceasmxWSDLbull
Ejemplo en el receini
[WSAA]CERT=reingartcrtPRIVATEKEY=reingartkeyURL=httpswsaaafipgovarwsservicesLoginCmsCACERT=confafip_ca_infocrt
[WSFEv1]CUIT=20267565393ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
Ejemplo en Visual Basic o similar (segundo paraacutemetro del meacutetodo Conectar)
Certificado = reingartcrt certificado de produccioacutenClavePrivada = reingartkey clave privada de produccioacutencms = WSAASignTRA(WSAACreateTRA(wsfe) Certificado ClavePrivada)
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlok = WSAAConectar(cache wsaa_url)ta = WSAALoginCMS(cms)
wsfev1_url = httpsservicios1afipgovarwsfev1serviceasmxWSDLok = WSFEv1Conectar(cache wsfev1_wsdl)
WSFEv1Cuit = 20267565393 CUIT del emisor (segun certificado)
Luego de configurar las opciones para produccioacuten se puede verificar el correcto funcionamiento de lascredenciales y URL utilizando los meacutetodos auxiliares por ej consultando los puntos de venta habilitados
parametros RECE1 ptosventabull meacutetodo ParamGetPtosVentabull
Aclaracioacuten No es obligatorio usar el instalador ni realizar compilacioacuten se puede bajar revisar modificar yejecutar directamente el coacutedigo fuente Python publicado en modo homologacioacuten o produccioacuten
Configuracioacuten para Produccioacuten 8
Importante Los CAE obtenidos en modo homologacioacuten no tienen validez fiscal
Advertencia Teoacutericamente no deberiacutea ser posible conectarse a produccioacuten con certificados de homologacioacuten(y viceversa) pero en la praacutectica han sucedido casos (obteniendo CAE de homologacioacuten sin validez fiscal)por lo que recomendamos extremar las medidas de seguridad y control (verificando certificados yconfiguracioacuten de URL de servidores) para generar las facturas en el ambiente correcto Ver Verificar ValidezCAE y Comprobacioacuten WSAA
Manejo de Excepciones
Las versiones recientes de WSAA (202) WSFEv1 (110) WSMTXCA (101) y WSFEX (126123) incluyenmejoras y unificaciograven en el manejo de excepcioneserrores (atributos LanzarExcepciones Excepciony Traceback) permitiendo un control maacutes simple de los Unexpected Python Error (errores noesperados que informa Python el lenguaje de programacioacuten de la interfaz generalmente por problemas deconexioacuten o tipos de datos invaacutelidos) sobre todo para lenguajes que no soportar mensajes de Error COM(previniendo mensajes por errores no controlados como Error fatal coacutedigo de excepcion=C0000005 y elcierre del programa)
Dependiendo de cada caso (en especial para lenguajes de programacioacuten legados) es conveniente deshabilitarlos errores no manejados (LanzarExcepciones = False) y controlar manualmente las excepciones y el valorretornado luego de llamar a cada meacutetodo
Ejemplo para Visual Basic
Dim ta as Variant
WSAALanzarExcepciones = Falseta = WSAALoginCMS(cms)If WSAAExcepcion ltgt Then
muestro al usuario solo el mensaje de error no la traza MsgBox WSAAExcepcion vbCritical Excepcioacuten
Exit SubEnd If
Mismo ejemplo para Visual Fox Pro
WSAALanzarExcepciones = Fta = WSAALoginCMS(cms)IF LEN(WSAAExcepcion) gt 0 THEN WSAATraceback MESSAGEBOX(WSAAExcepcion 5 + 48 Excepcion) CANCELENDIF
Tambieacuten se puede verificar que la respuesta del meacutetodo (en este caso en la variable ta notar que es del tipoVariant) no sea nula en ese caso se ha producido una excepcioacuten y el mensaje deberiacutea estar en el atributoExcepcion con su traza en Traceback
Nota dependiendo de la version los atributos Excepcion y Traceback pueden estar disponibles solo luego deocurrido el error (utilizar las ulitmas versiones para poder consultar estos atributos en cualquier momento)
Es recomendable que se muestre al usuario solo la Excepcioacuten (la traza es informacioacuten teacutecnica que no tieneutilizad para el operador) y para facilitar la depuracioacuten en todos los casos es uacutetil guardar los Mensajes XML
Manejo de Excepciones 9
y excepcioacuten ya que a veces los lenguajes de programacioacuten cortan el mensaje y se dificulta saber el motivo delerror Ademaacutes es recomendable siempre verificar que los objetos hayan sido creados (para no generar nuevoserrores) y que estos sean compatibles con la versioacuten que manejamos (si tenemos varias instalaciones distintaspara no solicitar atributos inexistentes)
Por ej para VB (cambiar WSAA por el webservice que corresponda)
verifico que el objeto haya sido creadoIf Not WSAA Is Nothing Then
verifico que la versioacuten del objeto sea compatibleIf WSAAVersion gt= 102a Then creo el archivo guardo alliacute todos los atributos para depuracioacuten
fd = FreeFile Open cerrortxt For Append As fd Print fd WSAAExcepcion Print fd WSAATraceback Print fd WSAAXmlRequest Print fd WSAAXmlResponse Close fd
End IfEnd If
Ejemplo para VFP (cambiar WSAA por el webservice que corresponda)
-- Depuracioacuten (grabar a un archivo los datos de prueba)gnErrFile = FCREATE(cerrortxt) =FWRITE(gnErrFile WSAAToken + CHR(13))=FWRITE(gnErrFile WSAASign + CHR(13)) =FWRITE(gnErrFile WSAAXmlRequest + CHR(13))=FWRITE(gnErrFile WSAAXmlResponse + CHR(13))=FWRITE(gnErrFile WSAAExcepcion + CHR(13))=FWRITE(gnErrFile WSAATraceback + CHR(13))=FCLOSE(gnErrFile)
Error Handler
Importante este meacutetodo no es estrictamente necesario si su programa ya tiene incorporado el manejo deerrores seguacuten el lenguaje de programacioacuten que utilicie (especialmente si utiliza el control de excepcionesmencionado en la seccioacuten anterior)
Todas estas consideraciones no quitan que se deba tener previsto el controlador de errores habitual dellenguaje para capturar los errores graves (por ej al no poder crear el objeto enviar un tipo de dato incorrectoo llamar un meacutetodoatributo inexistente) ya sea utilizando
Visual Basic ON ERROR GOTO bull Visual Fox Pro ON ERROR DO bull o bloques TRY EXCEPT CATCH o similaresbull
Lo mismo aplica a WSFEv1 WSMTXCA y WSFEX Para maacutes informacioacuten ver los ejemplos actualizados
Para VB
On Error GoTo ManejoError
Crear objeto interface (WSAA WSFEv1 etc)
Error Handler 10
Set WSAA = CreateObject(WSAA) llamar a los meacutetodos de WSAA
Exit Sub
ManejoError
Si hubo error (tradicional no controlado)
Mostrar mensajes de Depuracioacuten en ventana de inmediatoIf Not WSAA Is Nothing Then
If WSAAVersion gt= 102a Then DebugPrint WSAAExcepcion DebugPrint WSAATraceback DebugPrint WSAAXmlRequest DebugPrint WSAAXmlResponse
End IfEnd IfIf Not WSFEv1 Is Nothing Then
If WSFEv1Version gt= 110a Then DebugPrint WSFEv1Excepcion DebugPrint WSFEv1Traceback DebugPrint WSFEv1XmlRequest DebugPrint WSFEv1XmlResponse DebugPrint WSFEv1DebugLog()
End IfEnd If
Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipSelect Case MsgBox(ErrDescription vbCritical + vbRetryCancel Error amp ErrNumber - vbObjectError amp en amp ErrSource)
Case vbRetry DebugAssert False
ResumeCase vbCancel
DebugPrint ErrDescriptionEnd Select
Para VFP (con procedimiento para captura de errores automaacutetica)
ON ERROR DO errhand2-- Crear objeto interface Web Service de Factura ElectroacutenicaWSFE = CREATEOBJECT(WSFEv1) -- llamar a los meacutetodos de WSFE
-- Procedimiento para manejar errores WSFEPROCEDURE errhand2 --PARAMETER merror mess mess1 mprog mlineno
-- Depuracioacuten (mostrar los mensajes de error en la ventana principal)
WSFEv1XmlRequest WSFEv1XmlResponse WSFEv1Excepcion WSFEv1Traceback
Error number + LTRIM(STR(ERROR()))
Error Handler 11
Error message + MESSAGE() Line of code with error + MESSAGE(1) Line number of error + LTRIM(STR(LINENO())) Program with error + PROGRAM()
-- Preguntar Aceptar o cancelar ch = MESSAGEBOX(WSFEExcepcion 5 + 48 Error) IF ch = 2 ampamp Cancelar ON ERROR CLEAR EVENTS CLOSE ALL RELEASE ALL CLEAR ALL CANCEL ENDIF ENDPROC
Es posible seguir utilizando para las versiones anteriores o por compatibilidad hacia atraacutes LanzarExcepciones= Verdadero (predeterminado) en dicho caso se generaraacute un Error COM que deberaacute ser capturado por laaplicacioacuten y el mensaje estaraacute en ErrDescription (para VB) o MESSAGE() (para VFP)
Time-Out
En casos de falla de los servidores de AFIP la respuesta se puede demorar por lo que se puede configurar elparametro timeout (tiempo de espera) en el meacutetodo Conectar(cache wsdl proxy wrappercacert timeout) para controlar el periacuteodo y minimizar los bloqueos
De manera predeterminada el tiempo de espera en las uacuteltimas versiones es de 30 segundos pero se puedenpasar otros valores como 300 para que espere hasta 5 minutos (si los servidores de AFIP estaacuten muycongestionados) o reducir a 15 o 10 para esperar un tiempo maacutes reducido y dar una respuesta raacutepida alusuario (ver en ese caso Reproceso Automaacutetico para reintentarconsultar en caso de fallas en AFIP)
Es recomendable establecer la propiedad LanzarExcepciones a Falso y comprobar el valor deExcepcion (ver arriba) que generalmente informaraacute el error del sistema operativo por timeout Varioswebservices de AFIP tienen un meacutetodo Dummy que se pueden combinar con el timeout para detectar si elservidor de AFIP esta funcionando correctamente o no (justamente ese meacutetodo tambieacuten puede fallar desdeAFIP y es necesario controlar el tiempo de espera para un chequeo raacutepido)
Ver Errores de Conectividad y Errores internos de AFIP para mayor informacioacuten sobre los problemasfrecuentes con la comunicacioacuten hacia los servidores de AFIP
Importante Si no se utiliza los paraacutemetros cache proxy wrapper y cacert deberiacutean ser pasados como stringvacio (no saltear) Para poder utilizar estos paraacutemetros se deberiacutea usar una versioacuten actualizada de loscomponentes (2015)
Verificacioacuten del Canal de Comunicacioacuten Seguro
Por nueva Especificacioacuten Teacutecnica WSAA 122(Requerimientos de canal seguro comunicacioacuten para los CEE WSAA y WSN) se debe verificar la identidaddel servidor de AFIP (transformando lo que antes era una sugerencia (no documentada) en una verificacioacutenobligatoria de comprobar el certificado y URL del servidor)
Time-Out 12
Para ello los meacutetodos Conectar reciben dos paraacutemetros adicionales (actualmente solo para uacuteltimasversiones de desarrollo de WSAA 204 y WSFEv1 112 o superiror)
wrapper libreriacutea http con soporte avanzado de ssl (por el momento pycurl)bull cacert ruta al certificado de la autoridad certificante a verificar geotrustcrt ocomodocrt Puede utilizar el archivo con ambos certificados afip_ca_infocrt que lomantenemos actualizado con todos los certificados requeridos
bull
IMPORTANTE es recomendable empezar a utilizar el archivo geneacuterico de entidades certificantes pasandocacert=True o cacert=default De este modo si AFIP cambia el certificado o se vence algunaCA es probable que el nuevo certificado esteacute en el archivo generico por lo que no habriacutea que modificar elcoacutedigo y agregarlo manualmente (siempre que se este utilizando una versioacuten actualizada del proyecto)
Como solucioacuten provisoria se pueden descargar cacertpem desde el siguiente link httpscurlhaxxsedocscaextracthtml Esos son los certificados de Firefox (Mozilla) que contiene todos loscertificados existentes Se deberiacutea reemplazar por el archivo afip_ca_infocrt
Ejemplo en Visual Basic
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlwrapper = pycurl para situaciones especiales o versiones anteriores (instalador lt 27)proxy = formato usuarioclaveservidorpuertocacert = WSAAInstallDir + confafip_ca_infocrt Indicar ruta completa (directorio conf instalador gt 27)WSAAConectar(cache wsaa_url proxy wrapper cacert)
Ejemplo en RECEINI (solo se agrega los paraacutemetros de configuracioacuten CACERT y WRAPPER el resto seusa normalmente)
[WSAA]URL=httpswsaaafipgovarwsservicesLoginCmswsdlCACERT=confafip_ca_infocrtWRAPPER=pycurl
Nota De realizar la verificacioacuten debe agregar los paraacutemetros a todas las secciones que se conecten con loswebservices [WSAA] [WSFEv1] [WSLPG] etc y usar un instalador actualizado
Para verificar la Autoridad Certificante (CACERT) se recomienda probar el uacuteltimo ejemplo interactivo(cambiando httplib2 por pycurl para validar el nuevo certificado de wsaa) Para maacutes informacioacuten ver EjemploInteractivo de Autenticacioacuten (requiere instalacioacuten)
De encontrarse alguna inconsistencia el meacutetodo Conectar devolveraacute falso y en Excepcioacuten estaraacute el motivo deerror
No verifica el certificado (60 SSL certificate problem verify that the CAcert is OK Details error14090086SSLroutinesSSL3_GET_SERVER_CERTIFICATEcertificate verify failed)
bull
No verifica URL (51 SSL certificate subject namewsaahomoafipgovar does not match target host namewsaahomoafipgobar)
bull
El archivo de autoridades certificantes (paraacutemetro cacert) es incorrecto SSLError [Errno185090050] _sslc344 error0B084002x509 certificate
bull
Verificacioacuten del Canal de Comunicacioacuten Seguro 13
routinesX509_load_cert_crl_filesystem lib error (77 )SSLHandshakeError [ SSL CERTIFICATE_VERIFY_FAILED ] certifiacutecateverify failed (_sslc581 ) o WindowsError [Error 2] El sistema nopuede encontrar el archivo especificado IOError [Errno 2] No suchfile or directory (usar alternativamente confafip_ca_infocrt)
Se utiliza una libreriacutea de transporte distinta (pycurl) y posiblemente sea reemplazada en el futuro por lo querecomendamos dejar parametrizado este tema para evitar inconvenientes (pudiendo usar cualquier libreriacutea httpyo deshabilitar la comprobacioacuten de autoridad certificante al no pasarle los nuevos paraacutemetros a Conectarpara mantener compatibilidad con versiones anteriores yo en caso de que AFIP instale un certificadoincompatible en sus servidores)
Tabla comparativa Webservices
A continuacioacuten se presenta un resumen de webservices herramientas atributos y meacutetodos soportados
Caracteriacutestica WSFE v0 WSFE v1 v11 v2 v26 WSBFE v0 y v1 WSFEX v0 y v1 WSMTXCA
Normativa AFIP RG2485RG2485 RG2926 RG2959RG2975 RG3067 RG3571RG3668 RG3749 RG3779
RG2557 RG2758 RG3066RG3689 RG2904 RG2926 RG3536
Reacutegimen Mercado Internooriginal
Mercado interno (sin informardetalle)
Bono Fiscal - Bienes deCapital Exportacioacuten Mercado Interno (informar detalle
codificacioacuten de artiacuteculos)Clases de Facturas A B C M A B C M A B E A B
Sujetos comprendidos RI (obsoleto desde172011)
Responsables InscriptosExentos y MonotributoReacutegimen General
ResponsablesInscriptos inscriptos enla Secretariacutea deComercio
Exportadores inscriptosen los RegistrosEspeciales Aduaneros(V1 obligatorio desde31122011)
Responsables Inscriptos Notificadospor Juez Administrativo AFIP
Objeto COM(Windows) WSFE WSFEv1 WSBFE o WSBFEv1 WSFEX o WSFEXv1 WSMTXCA
Biblioteca COM(Windows) wsfedll wsfev1dll pyafipwsdll o
wsbfev1dllpyafipwsdll owsfexv1dll wsmtxdll
Modulo Python(Linux) wsfepy wsfev1py wsbfepy o wsbfev1py wsfexpy o wsfexv1py wsmtxpy
Herramienta siacutemilSIAPRECE(WindowsLinux)
receexe recepy rece1exe rece1py recebexe recebpy recexexe recexpy recemexe recempy
Informacioacuten General PyAfipWs Proyecto Version 1 Bonos FiscalesElectroacutenicos
Factura ElectroacutenicaExportacioacuten Proyecto Matrix
DocumentacioacutenTeacutecnica (Manual) WSFE WSFEv1 WSBFE WSFEX WSMTXCA
Nombre de servicioparaWSAACreateTRA
wsfe wsfe wsbfe wsfex wsmtxca
Meacutetodo Solicitud deAutorizacioacuten CAE oinformacioacuten deCAEA
Aut (CAE) CAESolicitar CAEARegInformativo
Authorize (CAE) Authorize (CAE) AutorizarComprobante InformarComprobanteCAEA
Tabla comparativa Webservices 14
Meacutetodos para CAEA(anticipado)
CAEASolicitarCAEAConsultar
SolicitarCAEAConsultarCAEAEntreFechasConsultarCAEA (emulado)
Campo ID(identificador uacutenico) en Aut en Authorize en Authorize
Reproceso siacute (realizado por AFIP) automaacutetico (emulado en lainterfaz) siacute (realizado por AFIP) siacute (realizado por AFIP) automaacutetico (emulado en la interfaz)
Campoproductosservicios presta_serv=SN concepto=123 tipo_expo=123 concepto=123
Campomonedacotizacioacuten moneda_id moneda_ctz imp_moneda_id
imp_moneda_ctz moneda_id moneda_ctz moneda_id moneda_ctz
MeacutetodoCrearFactura oAut
id presta_servtipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_totalimp_tot_concimp_neto impto_liqimpto_liq_rniimp_op_exfecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta
concepto tipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_total imp_tot_concimp_neto imp_iva imp_tribimp_op_ex fecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz
tipo_doc nro_doczona tipo_cbtepunto_vta cbte_nrofecha_cbte imp_totalimp_neto impto_liqimp_tot_concimpto_liq_rniimp_op_ex imp_percimp_iibbimp_perc_munimp_internosimp_moneda_idImp_moneda_ctz
tipo_cbte punto_vtacbte_nro fecha_cbteimp_total tipo_expopermiso_existentedst_cmp clientecuit_pais_clientedomicilio_clienteid_impositivomoneda_id moneda_ctzobs_comerciales obsforma_pago incotermsidioma_cbteincoterms_dsfecha_pago)
concepto tipo_doc nro_doctipo_cbte punto_vta cbt_desdecbt_hasta imp_total imp_tot_concimp_neto imp_subtotal imp_tribimp_op_ex fecha_cbtefecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz obs
MeacutetodoAgregarItem(detalle de artiacuteculo)
ncm sec ds qtyumed precio bonifiva_id imp_total
codigo ds qty umedprecio imp_total bonif
u_mtx cod_mtx codigo ds qtyumed precio bonif cod_ivaimp_iva imp_subtotal
MeacutetodoAgregarCbteAsoc(comprobantesasociados)
tipo_cbte pto_vta nro_cbteCUIT fecha
tipo_cbte pto_vtanro_cbte cuit_cbte tipo_cbte pto_vta nro_cbte fecha
MeacutetodoAgregarPermiso(permisos deembarque)
permiso_id pais_dst
MeacutetodoAgregarIVA(subtotales de aliacutecuotade iva)
iva_id base_imp importe iva_id base_imp importe
MeacutetodoAgregarTributo(otros impuestos)
tributo_id ds base_imp alicimporte tributo_id ds base_imp alic importe
Meacutetodo para consultarpuntos de ventahabilitados
ParamGetPtosVentaConsultarPuntosVentaCAEConsultarPuntosVentaCAEA
Meacutetodo pararecuperar un
CompConsultar GetCMP GetCMP ConsultarComprobante
Tabla comparativa Webservices 15
comprobanteMeacutetodo para obteneruacutetlimo nordmcomprobante
RecuperaLastCMP CompUltimoAutorizado GetLastCMP GetLastCMP CompUltimoAutorizado
Meacutetodos para obtenertablas de paraacutemetros
ParamGetTiposCbteParamGetTiposConceptoParamGetTiposDocParamGetTiposIvaParamGetTiposMonedasParamGetTiposOpcionalParamGetTiposTributosParamGetCotizacionParamGetPtosVenta
GetParamMonGetParamTipoCbteGetParamUMedGetParamTipoIVAGetParamNCM
GetParamMonGetParamTipoCbteGetParamTipoExpoGetParamIdiomasGetParamUMedGetParamIncotermsGetParamDstPaisGetParamDstCUITGetParamCtz
ConsultarComprobanteConsultarTiposComprobanteConsultarTiposDocumentoConsultarAlicuotasIVAConsultarCondicionesIVAConsultarMonedasConsultarUnidadesMedidaConsultarTiposTributoConsultarCotizacionMoneda
SEUO
Notas Generales
Convencioacuten de nombres si bien por transparencia se tratoacute de utilizar los nombres de los meacutetodosdefinidos en las especificaciones teacutecnicas se han cambiado los nombres de paraacutemetros y meacutetodosauxiliares para simplificar y unificar las interfaces manteniendo cierta coherencia entre los distintoswebservices por lo que algunas denominaciones internas pueden variar respecto a lasespecificaciones teacutecnicas de AFIP
bull
Esta tabla contiene un resumen de las consideraciones generales revisar la normativa vigenteespecificaciones y documentacioacuten teacutecnica actualizada para contemplar los casos particulares Ademaacutesse respetan las descripciones de servicios (WSDL) por ej si bien AFIP publica la especificacioacutenteacutecnica RG 2485 - Manual para el desarrollador V25 el webservice sigue siendo WSFEv1 ver RG 2485 - WSFEV1 - Manual para el desarrollador V26 RG 2904 - WSMTXCA - Manual para elDesarrollador - V02 RG 2758 - wsfex - Manual del desarrollador - V011 WSBFEV1 BonosFiscales Electroacutenicos Manual para el desarrollador V11
bull
Todas las facturas generadas en PDF o formatos similares pueden incluir el detalle de las operaciones(artiacuteculos coacutedigos descripcioacuten precio unitario etc) independientemente de lo que obligue ainformar AFIP en cada webservice No se podriacutea optar por utilizar el WSMTXCA (con detalleRG2904) si no ha recibido notificacioacuten por juez administrativo de AFIP en general corresponde elWSFEv1 (sin detalle RG2485 etal) para la mayoriacutea de los contribuyentes Para emitir facturas conCAEA (coacutedigo de autorizacioacuten electroacutenico anticipado) se deben cumplir ciertas condiciones(cantidad miacutenima de facturas por mes) en general solo aplicable a Auto-Impresores y GrandesContribuyentes
bull
La numeracioacuten de los comprobantes comienza de 1 por cada punto de venta y tipo de comprobante(no se comparten talonarios como con la facturacioacuten tradicional) Incluso cada webservicegeneralmente requiere dar de alta un punto de venta exclusivo No se puede continuar la numeracioacutenprevia ni de otro webservice
bull
La fecha de los comprobantes no puede ser anterior al uacuteltimo emitido pero generalmente se puedeautorizar facturas con fecha entre 5 a 10 diacuteas en el pasado o en el futuro por contingencias(dependiendo del webservice y si es servicios o productos) Ver meacutetodo de consultas y recupero decomprobantes No se podraacute emitir comprobantes antes de la fecha indicada en el formulario deEmpadronamiento (por ej si se eligioacute el inicio en Julio2015 no se pueden emitir facturas con fechade junio)
bull
En caso de inoperatividad del servidor de AFIP se deberiacutea emitir facturas tradicionales y presentar unformulario multinota en la agencia indicando las facturas realizadas manualmente y dejandoconstancia del motivo Para maacutes informacioacuten ver RG2485 Art 33
bull
Notas Generales 16
Se debe confirmar los temas de normativaslegislacioacuten con un Contador Puacuteblico Nacional debidamentehabilitado y con experiencia en el tema
Disclaimer - Aviso Legal
Toda informacioacuten es proporcionada a Titulo Informativo El programa es software libre liberado bajo licenciaGPLv3 y se entrega como estaacute sin garantiacuteas expliacutecitas ni implicitas de ninguacuten tipo incluyendo sin limitacioacutenpeacuterdida de ganancias interrupcioacuten de negocios peacuterdida de programas u otros datos en sistemas decomputacioacuten o cualquier otro reclamo Al usarlo acepta hacerlo bajo su propia responsabilidad conociendo lanormativa y reglamentaciones existentes
Instalacioacuten
Descargas
Bajar y Ejecutar el instalador
Importante ver Actualizaciones para novedades importantes instaladores y cambios recientes
Recomendado Instalador unificado (conteniendo la interfaz para todos los servicios web para homologacioacuten-solo evaluacioacutenpruebas-)
Windows 32 bits
PyAfipWs-272171-32bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSFEv1 WSMTXCAWSFEXv1WSBFEv1 WSCT WSFECred WSCDC WSCOC PyFEPDF PYI25 y PYEMAILWS_SR_Padron COT IIBB Arba Granos -WSLPG y WSCTG- Pecuarios- WSLSP WSLUMWSLTV Trazabilidad Medicamentos Trazabilidad de Productos Meacutedicos Trazabilidad dePrecursores Quiacutenicos Trazabilidad de Productos Agroquiacutemicos Fitosanitarios Trazabilidad deProductos Veterinarios) Recomendado para desarrolloevaluacioacuten
bull
PyAfipWs-271949-32bit+wsaa_211c+wsfev1_119a-typelibexe Instalador de desarrolloactualizado -para referenciar viacutea libreriacutea de tipos- (TypeLib) Soacutelo incluye WSAA y WSFEv1
bull
Windows 64 bits
PyAfipWs-271872-64bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSBFE WSFEv1 WSFEXv1WSMTXCA PyFEPDF PYI25 y PYEMAIL Granos -WSLPG y WSCTGv3- COT IIBB ArbaTrazabilidad Medicamentos y Agroquimicos) Recomendado para desarrolloevaluacioacuten
bull
Consultar por otros webservices y sistemas operativos
IMPORTANTE Los instaladores publicados son solo para evaluacioacuten por lo que pueden no estaractualizados con los uacuteltimos ajustes en los servidores yo ejemplos Ver instructivo Instalacioacuten Codigo Fuente( video explicativo) o consultar por soporte comercial
Los ejemplos completos del uso de la interfase en Visual Basic Visual Foxpro y otros lenguajes se puededescargar desde
Disclaimer - Aviso Legal 17
GitHub (repositorio actualizado) o Google Code (histoacuterico)bull
Para guias iniciales ver base de datos con ejemplos completos de WSFEv1 y WSFEX (implementacioacuten dereferencia)
factura_electronicamdb MS Access 2000 o sup programado en VBAbull pyafipwsmdb MS Access 97 programado en VBA (nuevo con FCE)bull pyafipws2kmdb MS Access 2000 o sup programado en VBA (versioacuten anterior)bull
IMPORTANTE las uacuteltimas versiones incorporan nuevas funcionalidades y deben ser testeadas con susistema antes de ser instaladas en produccioacuten De encontrar problemas de instalacioacuten (por causas del sistemaoperativo o similar) que impidan crear el objeto o conectarse al webservice se recomienda utilizar lasversiones anteriores o registrar manualmente los componentes de forma autoacutenoma con --register VerInstalacioacuten Manual para maacutes detalles Recordamos que este tipo de incidentes pueden ser consultados con elsoporte comercial o soporte comunitario ver Maacutes Informacioacuten
Incidencias Conocidas Dado que existen varias versiones dependiendo de que sistema operativo se utiliceen general no deberiacutea haber problemas de instalacioacuten pero puede haber cuestiones de permisos de acceso poliacuteticas de seguridad en algunos entornos Windows (por ej Permission Denied) En esos casosrecomendamos instalarlo como Administrador o darle permisos de modificacioacuten (Propiedades Solapa deSeguridad) al usuario del sistema operativo en la carpeta del componente (generalmente CArchivos deprogramaPyAfipWs o Program Files) Ver Permisos en Windows para mayor informacioacuten
Se recomienda desinstalar cualquier versioacuten anterior y borrar la carpeta de instalacioacuten para evitar archivostemporales residentes o temas similares
Instalacioacuten Manual Avanzada
Para la interfaz COM cada webservice tiene su DLL o EXE que puede ser instalado manualmente (norecomendado en general ya que no verifica si el archivo esta en uso no desinstala automaacuteticamente la versioacutenanterior entre otros temas que pudieran surgir)
Instalacioacuten manual pyafipwsexe --register o utlizar regsvr32 pyafipwsdllbull Desinstalacioacuten manual pyafipwsexe --unregister o utlizar regsvr32 upyafipwsdll
bull
El proceso es similar para instalar la interfaz a otros webservices (cambiando pyafipws por wsfev1wsfexv1 etc seguacuten corresponda por ej wsfexv1exe --register) Tambieacuten se puede registrardirectamente con python python wsaapy --register
Ambos comandos de instalacioacuten son similares pero instalan la interfaz de manera distinta
Embebida (InProcServer) registrando la biblioteca DLL con regsvr32 cuando se invoque a lainterfaz se carga en el mismo proceso del programa principal
bull
Independiente (LocalServer) ejecutando el programa EXE con --register cuando se invoque a lainterfaz se crea un nuevo proceso externo al programa principal (se veraacute el ejecutable por ej en eladministrador de tareas)
bull
NOTA solo es necesario registrar el EXE o la DLL (no ambas) En general es conveniente registrar las DLLpara que se cargue como una libreriacutea compartida embebida (InProcServer) y evitar temas de
Descargas 18
permisosfirewall ya que el EXE registra un proceso independiente (LocalServer) con sus implicancias(pueden surgir temas de permisosfirewall en ciertos sistemas operativos pero se ejecuta independientementeeliminando inconvenientes de dependencias y errores de carga)
Instalacioacuten Silenciosa (Desatendida)
Si bien el instalador muestra un asistente para la instalacioacuten (seleccioacuten del idioma licencia y directorioprogreso) es posible instalarlo sin intervencioacuten del usuario en segundo plano sin mostrar pantalla algunacon
instalador-PyAfipWs-125c-homoexe S D=CPyAfipWS
Las opciones son
S indica instalacioacuten silenciosabull D indica el directorio de instalacioacutenbull
Guiacutea de Instalacioacuten
La interfase se instala automaacuteticamente en CArchivos de Programa en el directorio elegido en elsegundo paso de instalacioacuten como se describe a continuacioacuten
Firma Digital (Editor Comprobado)
Como paso previo de seguridad al ejecutar el instalador verificar que el mismo haya sido firmado pornosotros debiendo aparecer
Editor Comprobado Sistemas Agiles (Mariano Reingart)bull
Consultar en caso de no comprobarse (o mencionar Editor Desconocido) ya que no seriacutea un instaladorcompilado originalmente por nosotros sin alteraciones
Paso 1 Seleccionar idioma
Idiomas disponibles I
Spanish espantildeol (predeterminado)bull English ingleacutesbull
Paso 2 Licencia
Para utilizar el software debe leer y aceptar la licencia
Paso 3 Direcorio de instalacioacuten
De manera predeterminada la interfaz se instalaraacute en una carpeta bajo el directorio estaacutendard de windows (porej CArchivos de Programa o CProgram Files) Se recomienda instalarla directamente en
Instalacioacuten Manual Avanzada 19
el directorio raiz (por ejCPYAFIPWS) para simplificar el acceso a las herramientas por linea de comandos
Paso 3 Finalizar instalacioacuten
Por uacuteltimo el instalador realizaraacute la instalacioacuten
Desinstalar versiones anterioresbull Crear el directorio de destinobull Extraer y copiar los archivosbull Crear desinstaladorbull Copiar configuracioacuten (RECEINI si corresponde)bull Registrar DLLbull
Puede ver el avance y estado final presionando el botoacuten Ver Detalles
Referenciar TypeLib
Ciertos instaladores (-typelib) incluyen una libreriacutea de tipos que es posible referenciar por ej en VB
Importante En general no es necesario referenciar el componente Invocando CreateObject deberiacuteafuncionar y devolveriacutea el objeto dinaacutemico en la mayoriacutea de los lenguajes de programacioacuten (VB VFP etc)
Maacutes informacioacuten
Soporte Comercial (asesoramiento inicial sin cargo de cortesiacutea -limitado y sin compromisos-)Web httpwwwsistemasagilescomartracwikiPyAfipWsdiams Por email facturaelectronicasistemasagilescomardiams Telefoacutenicamente (011) 4450-0716 y (011) 15-3048-921diams
bull
Soporte comunitario (gratuito)Sitio del proyecto httpwwwpyafipwscomardiams Grupo de noticiasdiscusiones httpgroupsgooglecomgrouppyafipwsdiams Coacutedigo Fuente httpsgithubcomreingartpyafipws (actual) y httpcodegooglecomppyafipws (histoacuterico)
diams
Incidencias httpsgithubcomreingartpyafipwsissuesdiams
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA)
Este servicio es necesario para acceder al resto de los servicios de negocios (ej Factura Electroacutenica) ofrecidospor la AFIP
Se debe generar un Ticket de Requerimiento de Acceso (TRA) firmarlo criptograacuteficamente (generando unmensaje CMS) que es enviacutea al servicio web para obtener un Ticket de Acceso (TA)
Esta interfase crea el mensaje en XML lo firma criptograacuteficamente y lo codifica en base-64 como lo requierela AFIP por lo que en general no es necesario realizar ninguno de estos pasos
Paso 3 Direcorio de instalacioacuten 20
Para maacutes informacioacuten oficial ver especificaciones teacutecnicas del WSAA y Arquitectura WS en el sitio de laAFIP
Importante es requerido tramitar los certificados para poder operar este webservice Para maacutes informacioacutenver Instructivos sobre Certificados
Objeto
El objeto COM se crea invocando a CreateObject(WSAA)bull
Meacutetodos
CreateTRA(service ttl) recibe el nombre del servicio (wsfe wsbfe wsfex wsctg etc) y eltiempo de vida (en segundos por defecto 2400) y devuelve un ticket de requerimiento de acceso(string con formato xml) Se puede revisar o modificar el xml devuelto (en general no es necesario)
bull
SignTRA(tra certificado clave_ privada passphrase) recibe el ticket derequerimiento de acceso (string con formato xml creado previamente) y las ubicaciones delcertificado y clave privada (o el contenido de los mismos) Firma el ticket y devuelve el mensaje CMS(string con formato xml) Importante El paraacutemetro opcional passphrase permite protejer la claveprivada por contrasentildea (Disponible a partir de la versioacuten 208) Tambieacuten se puede pasar el contenidode los archivos (como string) en certificado y clave_ privada (pudiendo ser guardados enla base de datos u otro tipo de almacenamiento)
bull
CallWSAA(cms url_webservice) Recibe el mensaje CMS (string con formato xml) y laURL del webservice Se conecta con el servidor remoto ejecuta el meacutetodo remoto LoginCMS ydevuelve el Ticket de Acceso (TA string con formato xml) generado por la AFIP Si no se especifiacutecaurl se utiliza servidores de homologacioacuten
bull
Conectar(cache url_webservice_wsdl proxy wrapper cacert) Nuevo Establece la conexioacuten con el servidor remoto recibe el directorio de archivos temporales la URL delWSDL (descripcioacuten del webservice) y proxy en formato usuarioclaveservidorpuerto Si no seespecifiacuteca url se utiliza servidores de homologacioacuten Parametros adicionales optativos wrapper es lalibreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor (CA)
bull
LoginCMS(cms) Nuevo Recibe el mensaje CMS (string con formato xml) ejecuta el meacutetodoremoto LoginCMS y devuelve el Ticket de Acceso (TA string con formato xml) generado por laAFIP Debe conectarse previamente con Conectar Establece los atributos Token Sign
bull
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido por defecto el ticket deacceso)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Expirado(fecha) Nuevo recibe una fecha (por defecto la fecha de expiracioacuten del uacuteltimo ticketde acceso generado) y verifica contra el reloj del equipo si dicha fecha ha expirado (en cuyo casodevuelve verdadero)
bull
Autenticar(service crt key [wsdl proxy wrapper cacert cachedebug]) Nuevo Meacutetodo unificado para obtener el ticket de acceso Almacena temporalmente elticket de acceso en un archivo en el directorio cache (debe tener permisos de escritura en esedirectorio) y automaacuteticamente lo reutiliza o solicita uno nuevo en caso de que no haya vencidoDisponible a partir de la versioacuten 207
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA) 21
Se recomienda comenzar a utilizar Conectar y LoginCMS en reemplazo de CallWSAA ya que los nuevosmeacutetodos tienen mejor manejo de errores pueden reutilizar la conexioacuten etc
Meacutetodos para Certificados
Los meacutetodos adicionales para el manejo de certificado permiten automatizar el procesamiento y generarpedidos de certificado directamente con este componente sin necesidad de utilizar comandos externosNuevo Disponible a partir de la versioacuten 210
AnalizarCertificado(crt) Carga un certificado digital y extrae los campos maacutesimportantes (establece propiedades Identidad Caducidad Emisor)
bull
CrearClavePrivada(self filename=privadakey key_length=2048pub_exponent=0x10001 passphrase=) Crea una clave privada (private key) necesariapara generar un certificado Queda referenciada internamente para poder crear el CSR (ver siguientemeacutetodo) por lo que las dos operaciones deben hacerse en la misma instancia Puede utilizarse unacontrasentildea (passphrase) para mayor seguridad (especialmente si la clave privada va a alojarse enuna carpeta compartida)
bull
CrearPedidoCertificado(self cuit= empresa=nombre=pyafipwsfilename=empresacsr) Crear un certificate signing request(X509 CSR) - pedido de certificado a gestionar por Clave Fiscal de AFIP para obtener el crt Se debeindicar el CUIT del representante nombre de la empresa (tal cual aparece en la constancia deinscripcioacuten) nombre de fantasia alias del certificado (identificando punto de venta sistema defacturacioacuten etc) y nombre del archivo a generar (recomendable ruta absoluta a una carpeta conpermisos de escritura)
bull
wsaaAnalizarCertificado(reingartcrt)print wsaaIdentidadprint wsaaCaducidad (Fecha de vencimiento)print wsaaEmisorprint wsaaCertX509
Por linea de comando puede ejecutarse el moacutedulo wsaapy con el meacutetodo --analizar
WSAA_cliexe --analizar reingartcrt reingartkey
Atributos
Token el el coacutedigo de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Sign el la firma de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Version versioacuten de la interfase (ej 16)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Identidad Caducidad Emisor CertX509 Nuevo campos del certificado analizado(actualizacioacuten 210 o posterior)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Meacutetodos 22
Ejemplo
Dim WSAA As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA)service = wsfe servicio a accederttl = 2400 tiempo de vida en segundostra = WSAACreateTRA(service ttl) Especificar la ubicacion de los archivos certificado y clavesPath = CurDir() + Certificado = reingartcrt certificado es el firmado por la afipClavePrivada = reingartkey clave privada usada para crear el cert
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
WSAALanzarExcepciones = False revisar Excepcion para controlar errores
Llamar al web service para autenticar anteriormente ta = WSAACallWSAA(cms httpswsaaafipgovarwsservicesLoginCms) Hologacioacuten ahora cache = Directorio para archivos temporales (dejar en blanco para usar predeterminado)wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl homologacioacutenproxy = usar usuarioclaveservidorpuertook = WSAAConectar(cache wsdl proxy)ta = WSAALoginCMS(cms) otener ticket de acceso
If WSAAExcepcion ltgt Then MsgBox WSAAExcepcion vbCritical ExcepcioacutenEnd If
Obtener Token y Sign de autorizacioacutenToken = WSAATokenSign = WSAASign
El Ticket de Acceso contiene el Token (coacutedigo) y Sign (firma) son los elementos que se utilizan en los otrosservicios web para lograr acceso a los mismos
Estos datos se pueden usar por un periacuteodo de tiempo (40 minutos modificable ver Reutilizacioacuten de Ticket deAcceso) siendo necesario volver a invocar el WSAA solo al finalizar este periacuteodo para obtener nuevos Tokeny Sign
Errores
El WSAA informa errores alfanumeacutericos (ErrNumber vbObjectError = 0) debiendo verificar la descripcioacuten(ErrDescription) Entre ellos los maacutes comunes son
cmscertexpired cmscertinvalid cmscertuntrusted El certificado no fue firmado por la AFIPexpiroacute es invaacutelido no se confiacutea en su emisor o no coincide la fuente Se debe revisar o emitircorrectamente los certificados Ver traacutemite de Generacioacuten
bull
xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid El tiempo degeneracioacutenexpiracioacuten es invaacutelido Debe sincronizar relojes con el servidor de la AFIP En Windows
bull
Ejemplo 23
propiedades del reloj habilitar Hora de Internet ingresar timeafipgovarwsnunavailable wsaaunavailable servicio no disponible momentaacuteneamentebull coenotAuthorized Computador no autorizado a acceder los servicios de AFIP Ver traacutemite deAsociacioacuten
bull
cmscertuntrusted Certificado no emitido por AC de confianza Revisar URL para ambiente correcto(produccioacutenhomologacioacuten) y Comprobacioacuten de Autenticacioacuten
bull
wsnnotFound Servicio informado inexistente se debe crear el ticket para un servicio vaacutelido (wsfewsfex etc)
bull
coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (verreutilizacioacuten del ticket de acceso abajo)
bull
Para maacutes errores frecuentes ver Falla SOAP WSAA
Reutilizacioacuten de Ticket de Acceso
Ante problemas de timeout y java socket read failed al intentar solicitar ticket de acceso (WSAA) ons1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (en generalpor sobrecarga o limitacioacuten de AFIP) es posible mitigar el tema reusando un ticket de acceso (token y sign)por hasta 12 hs (40 minutos por defecto) estableciendo el tiempo de vida del ticket pasandolo en el segundoparaacutemetro de CreateTRA (ttl en segundos en este manual esta documentado en secciones previas)
Por ej para un tiempo de vida de 10 hs (103600 segundos valor recomendado para evitar problemas desincronizacioacuten de relojes)
tra = WSAACreateTRA(wsfe 36000)
Luego de solicitar el ticket de acceso el Token y Sign puede ser usado por el periacuteodo especificado (dichosvalores pueden almacenarse en memoria en un archivo o base de datos etc)
Importante se puede guardar WSAAToken y WSAASign en una variable global y luego reutilizarlocada vez que se genera una factura
luego de llamara WSAALoginCMS o WSAACallWSAA o WSAAAutenticar
token = WSAATokensign = WSAASign
guardar token y sign en la base de datos archivo o una variable global
antes de llamar a WSFEv1CAESolicitar WSFEXv1Authorize o similar
WSFEv1Token = tokenWSFEv1Sign = sign
En general no es necesario verificar la fecha del ticket de acceso ya que en general es vaacutelido por 12 horas
Igualmente desde las versiones actualizadas de WSAA (202 o superior) es posible llamar al meacutetodoWSAAExpirado() antes de utilizar el ticket de acceso y este devolveraacute Verdadero si el ticket de accesosigue siendo vaacutelido (dada la fecha del reloj del equipo) o Falso si ha vencido su plazo y debe solicitarse unnuevo ticket de acceso
Errores 24
Por ejemplo luego de obtener el Token y Sign (ya sea por CallWSAA o LoginCMS) obtener y guardar lafecha de expiracioacuten
expiracion = WSAAObtenerTagXml(expirationTime)
Luego antes de usar el Token y Sign (por ej antes de llamar a WSFEv1 WSFEX etc) preguntar si el TA esvaacutelido (no ha expirado)
expiro = WSAAExpirado(expiracion)
Si expiro es True se debe generar otro ticket de acceso porque ha vencido su validez (con este meacutetodo sepuede guardar y verificar independientemente la fecha de expiracioacuten por cada servicio a usar wsfe wsfexwsbfe wsmtxca etc)
Si se comparte el certificado entre distintas maacutequinas o programas debe compartirse el ticket de acceso (porej guardandolo en un archivo o base de datos) y realizar esta verificacioacuten en cada instancia
Ejemplo completo en
reusar_ticket_accesobas (VB) y reusar_ticket_acceso_avanzadoprg (VFP) maacutes avanzadoguardando el TA en un archivo (y poder compartirlo por red o entre varios programas)
bull
reusar_ticket_accesoprg (VFP) y reusar_ticket_acceso_simplebas (VB) simplificado usando el TAen memoria
bull
Nota No es necesario guardar el ticket de acceso completo en un archivo para reutilizarlo Este ejemplo esuacutetil si se debe compartir el ticket entre diferentes programas u equipos en una red Si se usa en un soloprograma y este permanece abierto se puede mantener el valor del Token y Sign directamente en memoria(por ej en una variable) y reusarlo por hasta 12 hs (generalmente solicitandolo al iniciar el programa ymanteniendolo por una jornada de trabajo completa) Tambieacuten se podriacutea almacenar el valor de Token ySign en una base de datos o similar
Ejemplo simple reutilizacioacuten de TA
Ejemplo completo de reuso (usando el ticket de acceso en memoria)
Function Autenticar(TA as String = ) as String Procedimiento para autenticar con AFIP y reutilizar el ticket de acceso Llamar antes de utilizar WSAAToken y WSAASign (WSAA debe estar definido a nivel de moacutedulo)Dim ok expiracion solicitar token sign
cargar ticket de acceso previo (si no se mantiene WSAA instanciado en memoria)If TA ltgt Then
ok = WSAAAnalizarXml(TA)End If
revisar si el ticket es vaacutelido y no ha expirado expiracion = WSAAObtenerTagXml(expirationTime) DebugPrint Fecha Expiracion ticket expiracion
If IsNull(expiracion) Then solicitar = True solicitud inicial
Else solicitar = WSAAExpirado(expiracion) chequear solicitud previa
End If
Reutilizacioacuten de Ticket de Acceso 25
If solicitar Then Generar un Ticket de Requerimiento de Acceso (TRA)
tra = WSAACreateTRA()
uso la ruta a la carpeta de instalaciograven con los certificados de prueba ruta = WSAAInstallDir + DebugPrint ruta ruta
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra ruta + reingartcrt ruta + reingartkey) Cert Demo
ok = WSAAConectar( httpswsaahomoafipgovarwsservicesLoginCms) Homologacion
Llamar al web service para autenticar TA = WSAALoginCMS(cms)
Else DebugPrint no expirado Reutilizando
End If DebugPrint WSAAObtenerTagXml(destination)
Obtener las credenciales del ticket de acceso (desde el XML por si no se conserva el objeto WSAA) token = WSAAObtenerTagXml(token) sign = WSAAObtenerTagXml(sign)
Al retornar se puede utilizar token y sign para WSFEv1 o similar Devuelvo el ticket de acceso (RETURN) para que el programa principal lo almacene si es necesario
Autenticar = TAEnd Function
Importante en este caso WSAA debe ser un objeto global y persistente (al menos por lo que dure elprograma en produccioacuten) no se debe instanciar por cada llamada a Autorizar de lo contrario se perderaacuten elToken y Sign no reutilizando el ticket de acceso Si esto no es posible se debe persistir el Ticket de Accesoen un archivo o base de datos compartida
Ejemplo avanzado reutilizacioacuten de TA
Ejemplo completo de reuso (almacenando el ticket de acceso en un archivo tambieacuten podriacutea usarse una tablaen base de datos sesioacuten u otro medio durable)
inicializo las variablesToken = Sign =
busco un ticket de acceso previamente almacenadoIf Dir(taxml) ltgt Then
leo el xml almacenado del archivo Open taxml For Input As 1 Line Input 1 ta_xml Close 1
analizo el ticket de acceso previo ok = WSAAAnalizarXml(ta_xml)
If Not WSAAExpirado() Then puedo reusar el ticket de acceso
Token = WSAAObtenerTagXml(token) Sign = WSAAObtenerTagXml(sign)
End IfEnd If
Si no reuso un ticket de acceso solicito uno nuevoIf Token = Or Sign = Then
Ejemplo simple reutilizacioacuten de TA 26
Generar un Ticket de Requerimiento de Acceso (TRA) tra = WSAACreateTRA(wsfe 43200) 360012hs
Especificar la ubicacion de los archivos certificado y clave privada cert = reingartcrt certificado de prueba clave = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra cert clave)
If cms ltgt Then Llamar al web service para autenticar (cambiar URL para produccion)
wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl ok = WSAAConectar( wsdl) ta_xml = WSAALoginCMS(cms)
If ta_xml ltgt Then guardo el ticket de acceso en el archivo
Open taxml For Output As 1 Print 1 ta_xml Close 1
End If Token = WSAAToken Sign = WSAASign
End If reviso que no haya errores
DebugPrint Excepcion WSAAExcepcionIf WSAAExcepcion ltgt Then
DebugPrint WSAATracebackEnd If
End If
Imprimir los datos del ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint Token + TokenDebugPrint Sign + Sign
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA
Importante A partir de la actualizacioacuten 207 es posible utilizar el meacutetodo unificado Autenticar (queautomaacuteticamente contempla el tema de reutilizacioacuten al guardar el Ticket de Acceso en un archivo temporal enel directorio cache) en conjuncioacuten con SetTicketAcceso
Crear la instancia (usar CreateObject en VB y similares)wsaa = WSAA()
servidor de AFIP para homologacioacuten (cambiar para produccioacuten)wsaa_url = httpswsaahomoafipgovarwsservicesLoginCmswsdl
parametros opcionalesproxy = solo usar si hay servidor intermediowrapper = httplib2 (default) pycurl (depende proxy)cacert = confafip_ca_infocrt autoridades certificantes (servidores)cache = directorio archivos temporales (verificar permisos)debug = False depuracioacuten interna (en VB es palabra reservada usar otro nombre)
obtener el TA para pruebasta = wsaaAutenticar(wsfe reingartcrt reingartkey wsaa_url proxy wrapper cacert cache debug)
utilizar las credencialesprint wsaaTokenprint wsaaSign
establecer Ticket de Acceso en un solo paso (Nuevo meacutetodo)wsfev1SetTicketAcceso(ta)
Ejemplo avanzado reutilizacioacuten de TA 27
Nota dependiendo del sistema operativo deberaacute conceder permisos de acceso de escritura en la carpeta cachepara poder almacenar el ticket de acceso Tambieacuten es posible pasar el 8vo paraacutemetro cache de Autenticar conotro directorio para los archivos temporales Ver Permisos en Windows para maacutes informacioacuten
Obtencioacuten de Atributos Avanzados WSAA
En versiones recientes (204a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosdel ticket de acceso (uacutetiles para depuracioacuten y solucioacuten de errores)
Origen (Source) WSAAObtenerTagXml(source)bull Destino (Destination) WSAAObtenerTagXml(destination)bull ID Uacutenico WSAAObtenerTagXml(uniqueId)bull Fecha de Generacioacuten WSAAObtenerTagXml(generationTime)bull Fecha de Expiracioacuten WSAAObtenerTagXml(expirationTime)bull
Si ha ocurrido error (llamar previamente a WSAAAnalizarXml(XmlResponse) para analizar larespuesta)
Codigo de Fallo WSAAObtenerTagXml(faultcode)bull Mensaje de Fallo WSAAObtenerTagXml(faultstring)bull Servidor WSAAObtenerTagXml(ns3hostname)bull
Estos datos son uacutetiles para determinar problemas con el certificado ver Comprobacioacuten de AutenticacioacutenWSAA
Servicio Web de Factura Electroacutenica (WSFE)
Este servicio es ofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFE en el sitio de la AFIP
httpwswhomoafipgovarfiscaldocsWSFEWSFE-ManualParaElDesarrollador-090317pdf
Objeto
El objeto COM se crea invocando a CreateObject(WSFE)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA 28
UltNro() recuperar el uacuteltimo nuacutemero de transaccioacuten (id) Devuelve el uacuteltimo valor de secuenciautilizado al pedir autorizacioacuten Uso opcional
bull
Aut(id presta_serv tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto impto_liqimpto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago[fecha_serv_desde] [fecha_serv_hasta]) autoriza la emisioacuten de factura electroacutenicarecibe el id de secuencia (recuperado por UltNro) presta_serv en 1 si se esta facturando servicios (eneste caso es obligatorio el uso de la fecha de servicio desde y hasta) los datos de la factura a emitir ydevuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) Ver ejemplo para el detalle de losparaacutemetros
bull
RecuperaLastCMP(punto_venta tipo_comprobante) recibe el punto de venta y tipode comprobante (stringsenteros) devuelve el uacuteltimo nuacutemero de comprobante autorizado Usoopcional
bull
RecuperaQty() recupera cantidad maacutexima de registros de detalle (por el momento no es demayor utilidad ya que por simplicidad se enviacutea 1 registro de detalle por autorizacioacuten) Uso opcional
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Motivo Reproceso valores complementarios que retorna Autbull CbtDesde CbtHasta FechaCbte` nuacutemeros y fecha de comprobante autorizado queretorna Aut
bull
ImpTotal ImpNeto ImptoLiq` importes total neto e IVA que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 16)bull
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a realizar (ej Factura A solopara tipo_doc = 80 CUIT Facturas B por lote hasta $1000- etc)
bull
Ver especificaciones teacutecnicas del WSFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Meacutetodos 29
Ejemplo
Autorizar una factura electroacutenica nacional a modo de ejemplo (ficticia)
Crear objeto interface Web Service de Factura Electroacutenica
Set WSFE = CreateObject(WSFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEToken = WSAATokenWSFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSFECuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (servidor de homologacioacuten)ok = WSFEConectar(httpswswhomoafipgovarwsfeserviceasmx)
Llamo a un servicio tonto para obtener el estado (opcional)WSFEDummyDebugPrint appserver status WSFEAppServerStatusDebugPrint dbserver status WSFEDbServerStatusDebugPrint authserver status WSFEAuthServerStatus
Recupera cantidad maacutexima de registros (opcional)qty = WSFERecuperarQty()
Recupera uacuteltimo nuacutemero de secuencia IDLastId = WSFEUltNro()
Recupero uacuteltimo nuacutemero de comprobante (opcional)tipo_cbte = 1 punto_vta = 1LastCBTE = WSFERecuperaLastCMP(punto_vta tipo_cbte)
Establezco los valores de la factura o lote a autorizar 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000fecha_cbte = Fecha fecha_venc_pago = Fecha Fechas del periacuteodo del servicio facturado (solo si presta_serv = 1)fecha_serv_desde = Fecha fecha_serv_hasta = Fecha
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEAut(id presta_serv _ tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ impto_liq impto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desde fecha_serv_hasta) solo pasar si presta_serv=0MsgBox CAE amp cae amp Vencimiento amp WSFEVencimientoExit Sub
ManejoError Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipMsgBox ErrDescription vbCritical + vbRetryCancel _
Error amp (ErrNumber - vbObjectError) amp en amp ErrSource
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz (ver aclaracioacuten)
Ejemplo 30
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE)
Se debe llamar al meacutetodo Aut con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a UltNro puede utilizarse un dato local secuencial
bull
presta_serv 0 o 1 para indicar si es una factura de serviciosbull tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (1 Factura A 6 Factura B etc)bull punto_vta Nordm de punto de venta (debe estar autorizado)bull cbt_desde cbt_hasta Nordm de comprobante (si es un solo comprobante repetir Nordm)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 5 diacuteas)bull fecha_venc_pago Fecha liacutemite de vencimiento para el pago de la facturabull fecha_serv_desde fecha_serv_hasta Fechas del periacuteodo de servicios prestadobull
Ver todos los tipos de comprobante httpwswhomoafipgovarfiscaldocsWSFECodCpbtetxt
Ver todos los tipos de documentos httpwswhomoafipgovarfiscaldocsWSFECodDocIDtxt
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEResultado =A (Aceptado) y WSFEVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o los servidores de la AFIP no funcionan o nodevuelven la respuesta esperada
bull
cae = NULL El servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEResultado = R (Rechazado) y WSFEMotivo con los diversos motivos de rechazoproporcionados por el webservice
WSFEMotivo = 00 o NULL no hay error (solo como referencia)diams WSFEMotivo = 01 CUIT informada no es RIdiams WSFEMotivo = 02 CUIT no autorizada a facturar electroacutenicamentediams WSFEMotivo = 03 CUIT registra inconvenientes con domicilio fiscaldiams WSFEMotivo = 04 Punto de venta no se encuentra declaradodiams WSFEMotivo = 05 Fecha del comprobante incorrectadiams WSFEMotivo = 06 CUIT no puede emitir comprobantes clase Adiams WSFEMotivo = 07 para comprobantes clase A debe indicar CUITdiams WSFEMotivo = 08 CUIT informada es invaacutelidadiams WSFEMotivo = 09 CUIT informada no existe en el padroacutendiams WSFEMotivo = 10 CUIT informada no corresponde a un RIdiams WSFEMotivo = 11 el nordm de comprobante no es correlativo o fecha no correspondediams WSFEMotivo = 12 el rango informado se encuentra autorizadodiams WSFEMotivo = 13 LA CUIT INDICADA SE ENCUENTRA COMPRENDIDA EN ELREGIMEN ESTABLECIDO POR LA RESOLUCION GENERAL Ndeg 2177 YO EN ELTITULO I DE LA RESOLUCION GENERAL Ndeg 1361 ART 24 DE LA RG Ndeg 2177-
diams
bull
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE) 31
Para ver la lista completa de coacutedigos de motivos F136 httpwswhomoafipgovarfiscaldocsWSFEF136_MOTIVOStxt
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia En el caso de que la conexioacuten se interrumpa luego de que la AFIP registre la factura y antes deque la informacioacuten del CAE llegue al equipo la uacutenica alternativa es repetir la llamada a Aut con los mismosdatos (incluido el ID original) para obtener el CAE generado anteriormente En ese caso se WSFEReprocesoes S para indicar que el CAE se ha recuperado Por esto es importante guardar el ID o utilizar un dato local
Ver httpwswhomoafipgovarfiscaldocsWSFEWSFE-GuiaAdicionalParaElProgramadorpdf
Servicio Web de Bono Fiscal Electroacutenico (WSBFE)
EL WSBFE (Bonos Fiscales Electroacutenicos) es un Servicio Web de la AFIP para Facturas Electroacutenicas deBienes de Capital correspondiente al Artiacuteculo 3 de la Resolucioacuten General 25572009Este servicio esofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de cada item
A su vez el WSBFE devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva producto seguacuten NCM zonas unidades de medida Estas tablaspueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha devigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia delWSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSBFE en el sitio de la AFIP
httpwwwafipgovarwsWSBFEWSBFE-ManualParaElDesarrolladorpdf
httpwwwafipgovarwsWSBFEWSBFE-GuiaAdicionalParaElProgramadorpdf
La programacioacuten de la interfase WSBFE es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSBFE)bull
Servicio Web de Bono Fiscal Electroacutenico (WSBFE) 32
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(tipo_doc nro_doc zona tipo_cbte punto_vtacbte_nro fecha_cbte imp_total imp_neto impto_liq imp_tot_concimpto_liq_rni imp_op_ex imp_perc imp_iibb imp_perc_munimp_internos imp_moneda_id Imp_moneda_ctz) crea internamente una factura paraluego poder autorizarla recibe los datos de la factura a emitir Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarItem(ncm sec ds qty umed precio bonif iva_idimp_total) agrega internamente un item (linea de factura) a una factura para luego poderautorizarla recibe los datos del item a factura a emitir Ver ejemplo para el detalle de los paraacutemetros
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoIVA() GetParamUMed()GetParamNCM() recupera valores referenciales de coacutedigos de las tablas de paraacutemetros devuelveuna lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde- (verejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpNeto importe neto del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImptoLiq impuesto liquidado (IVA) del comprobante (del comprobante recuperado devuelto porGetCmp)
bull
Meacutetodos 33
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSBFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura de bienes de capital (bono fiscal electroacutenico) a modo de ejemplo (ficticia)
Dim WSAA As Object WSBFE As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSBFEtra = WSAACreateTRA(wsbfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada) Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten Una vez obtenido se puede usar el mismo token y sign por 24 horas
Crear objeto interface Web Service de Factura ElectroacutenicaSet WSBFE = CreateObject(WSBFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSBFEToken = WSAATokenWSBFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSBFECuit = 20267565393
Conectar al Servicio Web de Facturacioacutenok = WSBFEConectar(httpwswhomoafipgovarwsbfeserviceasmx) homologacioacuten
Establezco los valores de la factura a autorizarfecha = 20090530tipo_doc = 80 nro_doc = 23111111113zona = 0 Ver tabla de zonas
Errores 34
tipo_cbte = 1 Ver tabla de tipos de comprobantepunto_vta = 2 cbte_nro = 16fecha_cbte = fechaimp_total = 12100 imp_tot_conc = 000 imp_neto = 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000imp_perc = 000 imp_iibb = 000 imp_perc_mun = 000imp_internos = 000imp_moneda_id = 10 Ver tabla de tipos de monedaImp_moneda_ctz = 10000 cotizacioacuten de la moneda
Creo una factura (internamente no se llama al WebService)ok = WSBFECrearFactura(tipo_doc nro_doc _ zona tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total imp_neto impto_liq _ imp_tot_conc impto_liq_rni imp_op_ex _ imp_perc imp_iibb imp_perc_mun imp_internos _ imp_moneda_id Imp_moneda_ctz)
Agrego un itemncm = 73081000 Ver tabla de coacutedigos habilitados del NCMsec = Coacutedigo de la Secretariacutea (no usado por el momento)ds = Prueba Descripcioacuten completa del artiacuteculo (hasta 4000 car)umed = 1 kg Ver tabla de unidades de medidaqty = 10 cantidadprecio = 1050 precio neto (FacA) precio final (Facuras B)bonif = 500 descuentos (en positivo)iva_id = 5 21 ver tabla aliacutecuota de ivaimp_total = 12100 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSBFEAgregarItem(ncm sec ds qty umed precio bonif iva_id imp_total)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSBFEAuthorize(id)
If cae = Or WSBFEResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyElseIf WSBFEObs ltgt And WSBFEObs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyEnd If
MsgBox Resultado amp WSBFEResultado amp CAE amp cae amp _ Reproceso amp WSBFEReproceso amp _ Obs amp WSBFEObs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)
For Each evento In WSBFEEventosIf evento ltgt 0 Then
MsgBox Evento amp evento vbInformationEnd If
Next
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales del Nomenclador Comuacuten Mercosur habilitados
recupero tabla del nomenclador comuacuten del mercosur
Ejemplo 35
(codigo descripcioacuten (vigencia desde - hasta)) Ej 99999999 (item no incluiacutedo en el Beneficio Fiscal) (20070524 - 20091231)For Each x In WSBFEGetParamNCM() DebugPrint x Next
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSBFE)bull cbt_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull zona_id Zona (seguacuten tabla de paraacutemetros) - Por el momento 0bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull imp_moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull imp_moneda_ctz Cotizacioacuten de la moneda de la facturabull imp_perc Importe de las precepcionesbull imp_iibb Importe de las percepciones de ingresos brutosbull imp_perc_mun Importe de las percepciones municipalesbull imp_internos Importe de los impuestos internosbull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
ncm coacutedigo habilitado seguacuten el Nomenclador Comuacuten del Mercosur (NCM)bull sec coacutedigo de la secretariacutea (no utilizado por el momento pasar )bull ds Descripcioacuten completabull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull bonif Bonificacioacutenbull iva_id Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_total Importe total (incluyendo descuentos e IVA)bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEUltNro puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSBFEResultado =A (Aceptado) y WSBFEVencimiento Sino devuelve
Descripcioacuten de la obtencioacuten de CAE 36
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSBFEObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX)
EL WSFEX es un Servicio Web de la AFIP para Facturas Electroacutenicas de Exportacioacutencorrespondiente a la Resolucioacuten General 27582010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSBFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar los datos de exportacioacutenpermisos comprobantes asociados y el detalle de cada item
A su vez el WSFEX devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
Al igual que el WSBFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda idiomas terminos de comercio exterior paises y cuits unidades de medida etc Estastablas pueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen unafecha de vigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (adiferencia del WSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEX en el sitio de la AFIP
Manual para el desarrolladorpdf (version 0) Informacioacuten importante sobre la operatoriabull Manual para el desarrolladorpdf (version 1) Informacioacuten importante sobre la operatoria ( NuevaVersioacuten)
bull
FacturaElectronicaExportacion Informacioacuten general cambios ejemplos descargas y paraacutemetrosvigentes (puede estar ligeramente desactualizado)
bull
La programacioacuten de la interfase WSFEX es similar a WSBFE se recomienda revisarlo
WSFEX Versioacuten 1 (WSFEXv1)
Seguacuten RG306611 AFIP publicoacute una nueva versioacuten 1 (WSFEXv1) a entrar en vigencia obligatoria el31-12-2011 para maacutes informacioacuten ver Cambios WSFEXv1 respecto a WSFEXv0
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX) 37
Ambos webservices son muy similares por lo que se documenta en esta seccioacuten solo las diferenciasintroducidas
Importante Si bien se mantiene retrocompatibilidad para conectarse al nuevo webservice es necesarioutilizar el objeto WSFEXv1 y usar las nuevas URL
httpswswhomoafipgovarwsfexv1serviceasmxWSDL (homologacioacuten)bull httpsservicios1afipgovarwsfexv1serviceasmxWSDL (producciograven)bull
Aclaracioacuten WSFEXv1 es un nuevo webservice y AFIP ha agregado campos (bonificacioacuten) ha cambiadovarios tipos de datos (en importes cantidad de decimales) ha agregado coacutedigos de tablas de paraacutemetros(unidades de medida) y comprobantes asociados (remitos de tabaco) y ademaacutes realiza nuevas validacionespor lo que recomendamos probar exhaustivamente la interfaz con el desarrollo para exportacioacuten
Ajustes desarrollos de WSFEX a WSFEXv1
Si no utiliza las caracteriacutesticas nuevas es posible utilizar el coacutedigo desarrollado para WSFEX con nuestrainterfaz WSFEXv1
Coacutedigo Anterior (WSFEX)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEX)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar(httpswswhomoafipgovarwsfexserviceasmx) homologacioacuten
Coacutedigo Nuevo (WSFEXv1)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL) homologacioacuten
RECEX vs RECEX1
Por linea de comando tenemos disponible la herramienta RECEX1EXE que reemplaza a RECEXEXE yutiliza praacutecticamente el mismo formato de archivo y campos El nuevo formato esta documentado la seccioacutenRECEX1 - WSFEXv1
Objeto
El objeto COM se crea invocando a CreateObject(WSFEX) para Versioacuten 0 (hasta 30-12-2011)bull El objeto COM se crea invocando a CreateObject(WSFEXv1) para Versioacuten 1 (desde 31-12-2011)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica url se utiliza servidores de homologacioacuten Importante para WSFEXv1 los paraacutemetros soncache url proxy httpwrapper y cacert ver WSFEv1 Nuevo
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
WSFEX Versioacuten 1 (WSFEXv1) 38
CrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte imp_totaltipo_expo permiso_existente dst_cmp cliente cuit_pais_clientedomicilio_cliente id_impositivo moneda_id moneda_ctzobs_comerciales obs forma_pago incoterms idioma_cbteincoterms_ds fecha_pago) crea internamente una factura para luego poder autorizarlarecibe los datos de la factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importantefecha_pago se agrega en WSFEXv1 Modificado
bull
AgregarItem(ncodigo ds qty umed precio imp_total bonif) agregainternamente un item (linea de factura) a una factura para luego poder autorizarla recibe los datos delitem a factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importante bonif se agrega enWSFEXv1 Modificado
bull
AgregarPermiso(id dst) agrega internamente un permiso de exportacioacuten a una factura paraluego poder autorizarla recibe identificacioacuten y paiacutes destino de la mercaderia Ver ejemplo para eldetalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccuit_cbte_asoc) agrega internamente un comprobante asociado a una factura para luego poderautorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de losparaacutemetros Importante cuit_cbte_asoc se agrega en WSFEXv1 Nuevo
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoExpo()GetParamIdiomas() GetParamUMed() GetParamIncoterms()GetParamDstPais() GetParamDstCUIT() recupera valores referenciales de coacutedigos de lastablas de paraacutemetros devuelve una lista de strings con el idcoacutedigo o CUIT y descripcioacuten delparaacutemetro (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
GetParamCtz(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada como paraacutemetrobull GetParamMonConCotizacion(fecha) devuelve la cotizacioacuten consultada de la base de datosaduanera de todas las monedas que posean cotizacioacuten a la fecha indicada Nuevo
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Vencimiento fecha devuelta junto con el CAEbull CbteNro nuacutemero de comprobante (del comprobante autorizado)bull
Meacutetodos 39
FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull Version versioacuten de la interfase (ej 111)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Errores
La interfase procesa los errores WSFEX y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
500 Error interno DB - FEXGetLadt_CMP - get_last problemas internos de los servidores de AFIP(se debe esperar a que lo solucionen)
bull
Operation FEXGetLast_CMP not found in WSDL la URL que se estaacute utilizando no es correcta(verificar URL para el ambiente que se estaacute utilizando)
bull
505 Error general (lockeo) problemas internos de los servidores de AFIP (se debe esperar a que losolucionen)
bull
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSFEX para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura electroacutenica de exportacioacuten a modo de ejemplo (ficticia)
Dim WSAA As Object WSFEX As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEXtra = WSAACreateTRA(wsfex)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service para autenticar (Homologacioacuten)ta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms)
Atributos 40
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1) Setear tocken y sing de autorizacioacuten (pasos previos)WSFEXToken = WSAATokenWSFEXSign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEXCuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (homologacioacuten)ok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEXDummyDebugPrint appserver status WSFEXAppServerStatusDebugPrint dbserver status WSFEXDbServerStatusDebugPrint authserver status WSFEXAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 19 FC Expo (ver tabla de paraacutemetros)punto_vta = 7 Obtengo el uacuteltimo nuacutemero de comprobante y le agrego 1cbte_nro = WSFEXGetLastCMP(tipo_cbte punto_vta) + 1 16fecha_cbte = Format(Date yyyymmdd)tipo_expo = 1 tipo de exportacioacuten (ver tabla de paraacutemetros)permiso_existente = Ndst_cmp = 203 paiacutes destinocliente = Joao Da Silvacuit_pais_cliente = 50000000016domicilio_cliente = Rua 76 km 345 Alagoasid_impositivo = PJ54482221-lmoneda_id = 012 para reales DOL o PES (ver tabla de paraacutemetros)moneda_ctz = 05obs_comerciales = Observaciones comercialesobs = Sin observacionesforma_pago = 30 diasincoterms = FOB (ver tabla de paraacutemetros)idioma_cbte = 1 (ver tabla de paraacutemetros)imp_total = 25000
Creo una factura (internamente no se llama al WebService)ok = WSFEXCrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total tipo_expo permiso_existente dst_cmp _ cliente cuit_pais_cliente domicilio_cliente _ id_impositivo moneda_id moneda_ctz _ obs_comerciales obs forma_pago incoterms _ idioma_cbte incoterms_ds fecha_pago )
Agrego un itemcodigo = PRO1ds = Producto Tipo 1 Exportacion MERCOSUR ISO 9001qty = 2precio = 12500umed = 1 Ver tabla de paraacutemetros (unidades de medida)imp_total = 25000 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSFEXAgregarItem(codigo ds qty umed precio imp_total)
Ejemplo 41
Agrego un permiso (ver manual para el desarrollador)id = 99999AAXX999999Adst = 225 paiacutes destino de la mercaderiaok = WSFEXAgregarPermiso(id dst)
Agrego un comprobante asociado (ver manual para el desarrollador)tipo_cbte_asoc = 19punto_vta_asoc = 2cbte_nro_asoc = 1ok = WSFEXAgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc)
id = 99000000000100 nuacutemero propio de transaccioacuten obtengo el uacuteltimo ID y le adiciono 1 (advertencia evitar overflow y almacenar)id = CStr(CCur(WSFEXGetLastID()) + 1)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEXAuthorize(id)
Verifico que no haya rechazo o advertencia al generar el CAEIf cae = Or WSFEXResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyElseIf WSFEXobs ltgt And WSFEXobs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyEnd If
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato) si es posible almacenar para referencias futurasDebugPrint WSFEXXmlRequest DebugPrint WSFEXXmlResponse
MsgBox Resultado amp WSFEXResultado amp CAE amp cae amp _ Reproceso amp WSFEXReproceso amp _ Obs amp WSFEXobs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEXEventos
If evento ltgt 0 Then MsgBox Evento amp evento vbInformation
End IfNext
Recuperar la facturacae2 = WSFEXGetCMP(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEXFechaCbteDebugPrint Importe Total WSFEXImpTotal
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIPElse MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales de paiacuteses destino habilitados
Ejemplo 42
recupero tabla de coacutedigo de pais destino (codigo descripcioacuten) Ej 203 BRASILFor Each x In WSFEXGetParamDstPais() DebugPrint xNext
Ejemplo para obtener la fecha y cotizacioacuten de una moneda
busco la cotizacioacuten del dolar (ver Parametro Mon) Ej 20100708 3937moneda_id = DOLctz = WSFEXGetParamCtz(moneda_id)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_cbte coacutedigo de comprobante (19 Facturas de Exportacioacuten 20 Nota de Deacutebito por Operacionescon el Exterior 21 Nota de Creacutedito por Operaciones con el Exterior
bull
punto_vta Nordm de punto de venta (debe estar autorizado para WSFEX)bull cbte_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull imp_total Importe total de la facturabull tipo_expo Tipo de exportacion (1 Exportacioacuten definitiva de Bienes 2 Servicios 4 Otros)bull permiso_existente Indica si se posee documento aduanero de exportacioacuten (permiso de embarque)Posibles Valores S N NULL (vaciacuteo)
bull
dst_cmp Paiacutes de destino del comprobante (200 ARGENTINA 203 BRASIL 212 ESTADOSUNIDOS etc)
bull
cliente Apellido y Nombre oacute Razoacuten Social del compradorbull cuit_pais_cliente CUIT del paiacutes destinoContribuyente (Ej 50000000059 BRASIL - PersonaFxedsica 51600000059 BRASIL - Otro tipo de Entidad etc)
bull
domicilio_cliente Domicilio comercial clientebull id_impositivo Clave de identificacioacuten tributaria del compradorbull moneda_id Moneda de la factura (DOL Doacutelar Estadounidense PES Pesos Argentinos 012Real etc)
bull
moneda_ctz Cotizacioacuten de la moneda de la facturabull obs_comerciales observaciones comerciales (texto arbitrario)bull obs observaciones (texto arbitrario)bull forma_pago texto arbitrario (ej 30 diacuteas)bull incoterms clausula de venta terminos de comercio exterior (DAF DDP CIF FCA FAS DESCPT EXW CIP DDU FOB DEQ CFR)
bull
incoterms_ds informacioacuten adicional de terminos comercialesbull idioma_cbte idioma del comprobante 1 Espantildeol 2 Ingleacutes 3 Portugueacutesbull fecha_pago Fecha de pago (yyyymmdd)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
codigo coacutedigo del productobull ds Descripcioacuten completabull precio Precio Unitariobull
Descripcioacuten de la obtencioacuten de CAE 43
qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull imp_total Importe totalbull bonif bonificacion sobre el producto (importe)bull
Consideraciones especiales (soacutelo WSFEXv1 Nuevo )
Para descuentos utilizar umed 99 y los importes en negativo sin cantidad ni preciobull Para sentildeas o adelantos utilizar umed 97 y los importes en negativo o positivo (seguacuten corresponda)sin cantidad ni precio
bull
Para gratificaciones utilizar umed 0 sin importes cantidad ni preciobull Para bonificaciones por item el caacutelculo es precio qty - bonifbull
Adicionalmente se puede llamar al meacutetodo AgregarPermiso para detallar los permisos de embarque ydestinaciones de la mercaderiacutea con los siguientes paraacutemetros
id Coacutedigo de despacho Permiso de Embarque formato 99999AAXX999999A (donde XX podraacutenser nuacutemeros o letras)
bull
dst Paiacutes de destino de la mercaderiacuteabull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los permisos de embarque y destinacionesde la mercaderiacutea con los siguientes paraacutemetros
cbte_tipo Coacutedigo de tipo de comprobante (remitos solo WSFEXv1 Nuevo )bull cbte_punto_venta Punto de ventabull cbte_numero Numero de comprobantebull cbte_cuit CUIT emisor del comprobante (solo WSFEXv1 Nuevo )bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEXGetLastID puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEXResultado =A (Aceptado) y WSFEXVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSFXEResultado = R (Rechazado) y WSFEXObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
IMPORTANTE Revisar las especificaciones teacutecnicas de la AFIP en el Manual para el desarrolladorpdf porlo relativo a tablas de paraacutemetros meacutetodos adicionales y operatoria en general (incluyendo obligatoriedadformatos de los campos y validaciones)
Descripcioacuten de la obtencioacuten de CAE 44
Servicio Web de Factura Electroacutenica Mercado InternoVersioacuten 1 (WSFEv1)
EL WSFEv1 es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten B (sin detalle de factura) de la Resolucioacuten General 29042010 -RG248508 obligatorio a partir de 1-7-2011
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los impuestos(IVA) y tributos
A su vez el WSFEv1 devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva Estas tablas pueden sufrir modificaciones realizadas por la AFIP conaltas y bajas loacutegicas por lo que tienen una fecha de vigencia (desde hasta) y se proveen meacutetodos paraconsultarlas por el mismo servicio web (a diferencia del WSFE que las tablas eran documentadasestaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiProyectoWSFEv1
La programacioacuten de la interfase WSFEv1 es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSFEv1)bull
Meacutetodos
Meacutetodos baacutesicos de WSFEv1
Conectar(cache wsdl proxy wrapper cacert) realiza la conexioacuten a losservidores de la AFIP (primer paso esencial) Si no se especifica url del wsdl se utiliza servidores dehomologacioacuten El paraacutemetro cache es un directorio donde se almacenan internamente la descripcioacutendel servicio (archivo WSDL) para mayor optimizacioacuten Parametros adicionales optativos wrapper esla libreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor(CA)
bull
Servicio Web de Factura Electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 45
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto imp_ivaimp_trib imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz caea fecha_hs_gen) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetros
bull
AgregarIva(iva_id base_imp importe) agrega internamente un subtotal de IVA auna factura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible eimporte Ver ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(tributo_id Desc base_imp alic importe) agregainternamente un subtotal de tributo a una factura para luego poder autorizarla recibe los datos delimpuesto nacional provincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo parael detalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc cuitfecha) agrega internamente un comprobante asociado a una factura para luego poder autorizarlarecibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de los paraacutemetrosEl campo cuit fueacute agregado seguacuten FEv29 13-03-2017 disponible desde actualizacioacuten 119a yrefiere al CUIT emisor del comprobante asociado El campo fecha fueacute agregado seguacuten FEv21320-02-2019 disponible desde actualizacioacuten 122a y refiere a la fecha del comprobante asociado
bull
AgregarOpcional(opcional_id valor) agrega internamente un dato opcional a unafactura para luego poder autorizarla recibe el id del tipo de dato opcional y valor (dependiendo de sise trata de proyectos promovidos bienes usados RG 3411 DDJJ F8001 presuncioacuten de novinculacioacuten con la actividad gravada RG366814) Ver tabla de paraacutemetros Disponible desdeactualizacioacuten 115a
bull
AgregarComprador(doc_tipo=80 doc_nro=0 porcentaje=10000) agregainternamente un dato de comprador a una factura para luego poder autorizarla recibe el tipo dedocumento (80 CUIT) nuacutemero de documento y porcentaje (Bienes Usados Registrables RG 4109 E)Ver COMPG 210 Disponible desde actualizacioacuten 120a
bull
EstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura (ver paraacutemetros del meacutetodo CrearFactura) devuelve True siel campo pertenece al encabezado y se ha actualizado correctamente (ver ejemplo) Disponible desdeactualizacioacuten 116a
bull
ObtenerCampoFactura(campo [[campo2 [campo3]]) devuelve individualmente elvalor de un campo del encabezado u otras sub-estructuras de la factura (ver ejemplo) Uacutetil luego dellamara a CompConsultar Disponible desde actualizacioacuten 117a
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125b 200620
bull
Meacutetodos principales de WSFEv1
CAESolicitar() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo de AutorizacioacutenElectroacutenico (CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
CompConsultar(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle de los paraacutemetros yvalores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos baacutesicos de WSFEv1 46
CAEASolicitar(periodo orden) solicita un CAE Anticipado para la quincenacorrespondiente Devuelve cadena vacia si no se ha solicitado A partir de COMPGv26 estableceel campo Observaciones
bull
CAEAConsultar(periodo orden) recupera un CAE Anticipado emitido con anterioridadDevuelve cadena vacia si no se ha solicitado
bull
CAEARegInformativo informa un comprobante emitido con CAE Anticipado Se debe crear elcomprobante previamente con CrearFactura consignando el CAEA Actualiza los atributos(Resultado Obs etc) de manera similar a CAESolicitar Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
Meacutetodos alternativos para solicitud de muacuteltiples CAE
IniciarFacturasX() inicializa lista interna de facturas (comprobantes) para Solicitar muacuteltiplesCAE (llamar una uacutenica vez antes de CrearFacturaAgregarFacturaX)
bull
AgregarFacturaX() agrega el uacuteltimo comprobante cargado internamente con CrearFacturaa la lista para Solicitar muacuteltiples CAE
bull
CAESolicitarX() autoriza la emisioacuten de muacuteltiples facturas electroacutenicas (varios CAE porsolicitud) devuelve la cantidad de registros enviadosrecibidos a AFIP
bull
LeerFacturaX(indice) activa internamente una factura (dada su posicioacuten en la lista) pararevisar los datoss devuelto por AFIP usando ObtenerCampoFactura luego de haber llamado aCAESolicitarX
bull
Meacutetodos Auxiliares del webservice
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull ParamGetTiposMonedas() ParamGetTiposCbte() ParamGetTiposDoc()ParamGetTiposIva() ParamGetTiposOpcional() ParamGetTiposTributos()ParamGetTiposPaises() recupera valores referenciales de coacutedigos de las tablas de paraacutemetrosdevuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde-(ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros ParamGetTiposPaises agregadopara COMPGv26
bull
ParamGetCotizacion(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada comoparaacutemetro
bull
ParamGetPtosVenta() devuelve los puntos de venta autorizados para factura electroacutenicabull
Meacutetodos Utilitarios provistos por este componente
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Atributos
El componente tiene las siguientes propiedades que pueden ser consultadas o modificadas
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull
Meacutetodos principales de WSFEv1 47
AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull CAEA coacutedigo de autorizacioacuten anticipado (si corresponde)bull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTribimportes del comprobante
bull
ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull Reprocesar habilita reproceso automaacutetico (habilitado por defecto ver abajo)bull EmisitonTipo tipo de coacutedigo de autorizacioacuten (CAE o CAEA)bull
Errores
La interfase procesa los errores WSFEv1 y los almacena en las propiedades Errores y ErrCodeErrMsg (porej motivo de rechazo al intentar solicitar CAE) AFIP tambieacuten puede enviar errrores o advertencias por lacomo Observaciones propiedad Obs Se recomienda revisarlos luego de llamar a los Webservices
Ver ejemplos y especificaciones teacutecnicas del WSFEv1 para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ver Manejo de Excepciones para conocer las tecnicas para controlar las distintas excepciones que puedenocurrir (ver atributos Excepcion y Traceback en general por problemas de conectividad) y como proceder yalmacenar los mensajes XML para depuracioacuten y futuras consultas (atributos XmlRequest y XmlResponse)
Validaciones WSFEv1
AFIP realiza varias validaciones a los datos enviados muchas agregadas recientemente por lo que para evitarinconvenientes se recomienda revisar las siguientes validaciones y consideraciones generales
10063 Factura individual DocTipo 80 DocNro XXXXXXXXX no se encuentra inscripto encondicion ACTIVA en el impuesto Las facturas A solo pueden ser emitidas a ResponsablesInscriptos consignando el CUIT vaacutelido y registrado (tipo_doc=80)
bull
10014 Para facturas B (CbteDesde distinto a CbteHasta) el resultado de la operacioacuten ImpTotal (CbteHasta - CbteDesde + 1 ) debe ser menor a $1000 y 10015 Para facturas B (CbteDesde distintoa CbteHasta) menor a $1000 el campo DocNro deberaacute ser cero (0) y el campo DocTipo 99 Los lotesde facturas B menores a $1000- pueden ser emitidos a soacutelo a Consumidor Final (tipo_doc=99 ynro_doc=0) indicando el importe total del reango de facturas
bull
10043 El campo ImpTotConc (Importe Total del Concepto) para comprobantes tipo C debe ser iguala cero (0) y 10047 El campo ImpIVA (Importe de IVA) para comprobantes tipo C debe ser igual a
bull
Atributos 48
cero (0) 10071 Para comprobantes tipo C el objeto IVA no debe informarse Para emitir FacturasC no se informa iva ni imp_tot_conc ver caso especial Monotributo10048 El campo Importe Total ImpTotal debe ser igual a la suma de ImpTotConc + ImpNeto +ImpOpEx + ImpTrib + ImpIVA La sumatoria de los campos imp_neto impto_iva imp_op_eximp_tot_conc imp_trib contra imp_total no debe diferir en maacutes de 1 centavo (o 001)
bull
10051 Los importes informados en AlicIVA no se corresponden con los porcentajes La baseimponible por la aliacutecuota de IVA no debe diferir en maacutes de 1 centavo con el impuesto liquidado deIVA (para cada tasa ver AgregarIVA)
bull
10020 El campo BaseImp en AlicIVA es obligatorio y debe ser mayor a 0 cero Si el imp_neto es 0no se debe enviar subtotal de IVA ni para la tasa 0 (no usar AgregarIVA)
bull
10018Si ImpIva es igual a 0 el objeto Iva y AlicIva son obligatorios Id iva = 3 (iva 0) Si elimp_neto es ltgt0 y el iva liquidado es 0 se debe enviar coacutedigo de alicuota 3 (0) -por ej casoespecial de hacer factura de 1 centavo- Si no corresponde IVA (exento o no gravado) se debe enviarimp_iva NULO (vbNull null o similar) y no enviar aliacutecuotas
bull
Consideraciones especiales
Para emitir Facturas B a Responsables No Inscriptos debe informarse en Tributos el importecorrespondiente (ver AgregarTributo)
bull
Para factura E no corresponde este webservice por maacutes que sea a Tierra del Fuego Ver WSFEXbull imp_tot_conc debe utilizarse para los importes no gravados (por ej cheques rechazados)bull IVA 0 es distinto a No Gravado (seriacutea imp_tot_conc) o Exento (imp_op_ex) En esos casos no vaalicuota de iva e imp_iva = NULL y imp_neto = 0 (ver validaciones arriba)
bull
Si se usa IVA 0 en el subtotal de la aliacutecuota iva_id=3 se debe pasar base_imp = 100 e importe = 0Ademaacutes imp_neto = 100 (gravado aunque no liquide IVA)
bull
Recordamos que si la AFIP detecta una validacioacuten no obligatoria (por ej no corresponde emitir factura A)devolvera un mensaje (en el atributo WSFEv1Obs) y el IVA liquidado no puede computarse como creacuteditofiscal (la factura debe incorporar dichos mensajes)
Dependiendo del caso los mensajes de validacioacuten pueden ser enviados por AFIP tanto en WSFEv1Obs o enWSFEv1ErrMsg se deben revisar ambos campos
Nota estas consideraciones pueden variar en cada caso dependiendo de cada situacioacuten particular frente aAFIP Recomendamos consultar con el contador los aspectos legales y la normativa vigente
Ejemplo
Ejemplo Solicitud CAE WSFEv1
Autorizar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSFEv1 As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1tra = WSAACreateTRA(wsfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() +
Validaciones WSFEv1 49
Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service WSAA para autenticarcache = directorio temporal (usar predeterminado)url_wsdl = httpswsaahomoafipgovarwsservicesLoginCms usar wsaaafipgovar en produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSAAConectar(cache url_wsdl proxy wrapper)ta = WSAALoginCMS(cms)
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSFEv1 = CreateObject(WSFEv1)DebugPrint WSFEv1version
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEv1Token = WSAATokenWSFEv1Sign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEv1Cuit = 20267565393
Conectar al Servicio Web de Facturacioacutencache = directorio temporal (usar predeterminado)url_wsdl = httpswswhomoafipgovarwsfev1serviceasmxWSDL usar servicios1 para produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSFEv1Conectar(cache url_wsdl proxy) homologacioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEv1DummyDebugPrint appserver status WSFEv1AppServerStatusDebugPrint dbserver status WSFEv1DbServerStatusDebugPrint authserver status WSFEv1AuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4001cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta) + 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 20267565393cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Ejemplo Solicitud CAE WSFEv1 50
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
datos de compradores RG 4109-E bienes muebles registrables ()If False Then solo productos y si hay maacutes de un comprador ok = WSFEv1AgregarComprador(80 30500010912 9999) ok = WSFEv1AgregarComprador(80 30999032083 001)End If
Solicito CAEcae = WSFEv1CAESolicitar()
DebugPrint Resultado WSFEv1ResultadoDebugPrint CAE WSFEv1cae
DebugPrint Numero de comprobante WSFEv1CbteNro
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSFEv1XmlRequestDebugPrint WSFEv1XmlResponse
MsgBox Resultado amp WSFEv1Resultado amp CAE amp cae amp Venc amp WSFEv1Vencimiento amp Obs amp WSFEv1obs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEv1eventos MsgBox evento vbInformation EventoNext
Ejemplo Consultar CAE WSFEv1
Recuperar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia continua elejemplo anterior) CAE normal
Buscar la facturacae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEv1FechaCbteDebugPrint Fecha Vencimiento CAE WSFEv1VencimientoDebugPrint Importe Total WSFEv1ImpTotal
comparar con los datos del ejemplo anterior
Ejemplo Consultar CAE WSFEv1 51
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIP amp cae amp vs amp cae2Else MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
obtener datos del encabezado (a partir de actualizacioacuten 117a)cae = wsfev1ObtenerCampoFactura(cae)tipo_doc = wsfev1ObtenerCampoFactura(tipo_doc)nro_doc = wsfev1ObtenerCampoFactura(nro_doc)imp_total = wsfev1ObtenerCampoFactura(imp_total) obtener primer alicuota de IVAimp_iva1 = wsfev1ObtenerCampoFactura(iva 0 importe) obtener primer tributoimp_trib1 = wsfev1ObtenerCampoFactura(tributos 0 importe) obtener primer opcionalvalor_opcional1 = wsfev1ObtenerCampoFactura(opcionales 0 valor) obtener primer coacutedigo de observacion de AFIPobs_code1 = wsfev1ObtenerCampoFactura(obs 0 code) pruebo obtener el segundo mensaje de observacion inexistenteobs_code2 = wsfev1ObtenerCampoFactura(obs 1 msg)debugPrint wsfev1Excepcion El campo 1 solicitado no existe
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1
Ejemplo para obtener las tablas de parametros en este caso puntos de venta habilitados (uacutetil en produccioacutenpara verificar el acceso al webservice)
recupero tabla de paraacutemetros de punto de venta habilitado (3|EmisionTipoCAE|BloqueadoN|FchBajaNULL)For Each x In WSFEv1ParamGetPtosVenta() DebugPrint xNext
Ejemplo Solicitud CAEA y registro informativo WSFEv1
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE Anticipado
PASO 1 Solicito CAE Anticipado para el periacuteodo NOTA solicitar por uacutenica vez para un determinado periacuteodo consultar si se ha solicitado previamente
periodo = 201102 Antildeo y mesorden = 2 Segunda Quincena
consulto CAEA ya solicitadoCAEA = WSFEv1CAEAConsultar(periodo orden)If CAEA = Then
solicito nuevo CAEA CAEA = WSFEv1CAEASolicitar(periodo orden)End If
MsgBox Periodo amp periodo amp Orden amp orden amp vbCrLf amp CAEA amp CAEA amp vbCrLf amp _Obs amp WSFEv1Obs amp vbCrLf amp _Errores amp WSFEv1ErrMsg
Si no tengo CAEA terminoIf CAEA = Then End
PASO 2 Establezco los valores de la factura a informar
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1 52
tipo_cbte = 6punto_vta = 4005cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta)If cbte_nro = Then cbte_nro = 0 no hay comprobantes emitidosElse cbte_nro = CLng(cbte_nro) convertir a entero largoEnd Iffecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
creo una factura (con CAEA)ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz CAEA fecha_hs_gen)
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
Informo comprobante emitido con CAE anticipadocae = WSFEv1CAEARegInformativo()
DebugPrint Resultado WSFEv1Resultado
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura o completar el registro de encabezado (ver archivo deintercambio) con los siguiente paraacutemetros
Ejemplo Solicitud CAEA y registro informativo WSFEv1 53
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc seguacuten tabla de paraacutemetros de AFIP) y nuacutemero deDocumento del cliente (receptor de la factura) Usar tipo_doc=99 y nro_doc=0 para consumidoresfinales (Factura B lt $1000)
bull
tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSFE)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta generalmente el mismo nuacutemero si es unafactura individual o un rango si son Factura B lt $ 1000 a Consumidor Final -en este uacuteltimo caso seobtiene un uacutenico CAE para el lote-)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la factura (debe ser igual a la suma de imp_tot_conc + imp_op_ex +imp_neto + imp_iva + imp_trib)
bull
imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la factura (igual a la suma de base_imp para todas lasalicuotas)
bull
imp_iva Importe del IVA liquidado (igual a la suma de importe_iva para todas las aliacutecutoas) Enviarnull o similar si no corresponde y no se enviacutean subtotales por aliacutecuota
bull
imp_trib Importe de otros tributos (incluyendo percepciones de IVA retenciones IVA no inscriptoetc)
bull
imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros actualmente solo PES)bull moneda_ctz Cotizacioacuten de la moneda de la factura (actualmente solo 100)bull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull caea codigo de autorizacioacuten anticipado (si corresponde)bull
Luego por cada alicuota de IVA (excepto para no gravado y exento) se debe llamar al meacutetodo AgregarIva ocompletar el registro respectivo con los siguientes paraacutemetros
iva_id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros AFIP)bull base_imp base imponible (importe)bull importe_iva importe liquidado (base_imp por alicuota)bull
De existir otros tributos (percepcionesretenciones o similares) se debe llamar al meacutetodo AgregarTributo ocompletar el registro respectivo con los siguientes paraacutemetros
tributo_id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros AFIP)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc o completar el registro respectivo para detallar loscomprobantes asociados a una nota de creacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo CAESolicitar o CAEARegInformativo dependiendo de lamodalidad (o ejecutar el programa RECE1 si se esta utilizando la herramienta por linea de comando)
Descripcioacuten de la obtencioacuten de CAE CAEA 54
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEv1Resultado= A (Aceptado) y WSFEv1Vencimiento del CAE (fch_venc_cae) Sino devuelve cae = La interfase nopudo procesar la respuesta del WebService o bien la conexioacuten a internet esta caiacuteda las direcciones de losservidores son incorrectas o el servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEv1Resultado = R (Rechazado) y WSFEv1Obs (o WSFEv1ErrMsg) con los diversos motivos derechazo proporcionados por el webservice (ver WSFEMotivo)
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Como requisito previo para la modalidad CAE Anticipado se debe llamar a CAEASolicitar oCAEAConsultar con los datos del periodo y orden (antes de comenzar la quincena) para obtener el uacutenicoCAEA para los comprobantes del periacuteodo
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (CompConsultar) o usar la rutina deReproceso Automaacutetico incluida en este componente
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEV1 en el sitio de la AFIP
Minisitio Factura Electroacutenica AFIP informacioacuten generalbull Manual para el desarrolladorpdf Informacioacuten importante sobre la operatoriabull
Reproceso Automaacutetico
Importante En el caso de que la conexioacuten se interrumpa al llamar a CAESolicitar luego de que la AFIPregistre la factura y antes de que la informacioacuten del CAE llegue al equipo se debe llamada aCompConsultar con los paraacutemetros de la factura (tipo_cbte punto_vta cbte_nro) para recuperar el CAEgenerado anteriormente (ver ejemplo pseudocoacutedigo y por RECE1 get)
Este procedimiento puede ser realizado automaacuteticamente por la interfaz (de manera similar a como realizabaAFIP originalmente en WSFEv0) habilitando el atributo Reprocesar = True (valor predeterminado) conlo que la interfaz automaticamente
Solicita un nuevo CAE en caso de que no exista en los registros de la AFIPbull Consulta y obtiene el CAE anterior en caso de que ya exista en los registros de AFIPbull
En ese caso si se da un reprocesamiento automaacutetico como se mencionoacute en el primer parrafoWSFEReproceso se establece a S para indicar que el CAE se ha recuperado
Si bien no se utiliza un ID por lo que se minimizan los errores al reprocesar los comprobantes igualmente serecomienda revisar el atributo de Reproceso ya que un incorrecto uso puede generar inconvenientes alregistrar los comprobantes en AFIP Para ello la interfaz cuenta con los atributos CbteNro FechaCbteImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTrib o XmlRequest yXmlResponse que deben ser contrastados contra la informacioacuten enviada en el caso de interrupciones oinconvenientes en la comunicacioacuten (a partir de la versioacuten 107d si Reproceso = S la interfaz verificoacuteautomaacuteticamente todos los datos enviados con los registrados en la AFIP y estos concuerdan)
Se recomienda almacenar los datos en un medio durable para poder enviar la misma factura que fuera
Reproceso Automaacutetico 55
interrumpida salvo que se tenga certeza de que la misma no ha sido procesada por AFIP Especialmente sedeberiacutea guardar el nuacutemero de factura antes de solicitar CAE y no utilizar ult o el meacutetodoCompUltimoAutorizado para consultar el uacuteltimo nuacutemero de comprobante emitido ya que ante cualquierinterrupcioacuten se no se podriacutea recuperar los datos registrados en AFIP (o se podriacutean generar duplicados)
En siacutentesis al re-enviar los datos de un comprobante que por alguacuten motivo no ha devuelto CAE (cuando lacomunicacioacuten se ha interrumpido y no ha sido aceptado o rechazado formalmente con Resultado=A o R)se recomienda revisar el reproceso y los datos registrados (devueltos por la interfaz) o en su defectodeshabilitar Reprocesar con False e implementar un procedimiento propio de recuperacioacuten ante fallas
Si el reproceso estaacute habilitado no es necesario modificar la aplicacioacuten en caso de fallas simplementereintentar la solicitud de CAE o informacioacuten de CAEA y la interfaz realizaraacute los meacutetodos pertinentes seguacutense describioacute anteriormente
En caso de que no haya sido necesario reprocesar el requerimiento el atributo Reproceso quedaraacute vacioEn caso de que haya sido necesario reprocesar pero no ha sido exitoso (ocurrioacute un error o validacioacuten que nopermitioacute recuperar el CAE o los datos enviados no concuerdan con los registrados en AFIP) Reprocesoseraacute N y se informaraacute el error original
Lo expuesto anteriormente aplica tambieacuten a CAEA -anticipado- al informar los comprobantes emitidos(CAEARegInformativo)
En ambas ocasiones se puede consultar el atributo EmisionTipo que contiene CAE o CAEA dependiendodel caso
Nota El Reproceso automaacutetico estaacute incluido internamente en CAESolicitar y CAEARegInformativopor lo que estaacute disponible tanto en la biblioteca Python Interfaz COM la herramienta por liacutenea de comandoRECE1EXE y al aplicativo PyRece
Advertencia El Reproceso automaacutetico es una caracteriacutestica adicional propia de la interface por lo tantopuede sufrir variaciones o mejoras se recuerda que la informacioacuten expuesta en esta documentacioacuten aplica a lauacuteltima versioacuten de los instaladores
Factura C Monotributo Exento
Seguacuten RG 30672011 se adiciona la posibilidad de autorizar comprobantes clase C (monotributistas) aWSFEv1 (RG2485)
Seguacuten RG 37492015 se incluye a los sujetos exentos en el impuesto al valor agregado Para poder emitircomprobantes clase C ademaacutes de seguir las pautas sentildealadas en esta seccioacuten el punto de venta debe estardado de alta como Factura Electroacutenica - Exento en IVA - Web Services
Los siguientes coacutedigos de comprobantes (tipo_cbte) pueden ser utilizados en este caso
11 Factura Cbull 12 Nota de Deacutebito Cbull 13 Nota de Creacutedito Cbull 15 Recibo Cbull
Los requisitos fundamentales para poder validar un comprobante informado son las los siguientes
Factura C Monotributo Exento 56
Ingresar siempre imp_tot_conc = 01 Ingresar siempre imp_op_ex = 02 Ingresar siempre imp_iva = 03 Informar en imp_neto el importe subtotal de la factura4 No informar subtotales de IVA (AgregarIVA)5
Coacutedigo de Ejemplo
Establezco los valores de la factura a autorizartipo_cbte = 11punto_vta = 4002cbte_nro = 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 10000 imp_tot_conc = 000 imp_neto = 10000imp_iva = 000 imp_trib = 000 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 2 o 3)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Solicito CAECAE = WSFEv1CAESolicitar()
Documentacioacuten Oficial Facturacioacuten Electroacutenica RG 2485 Proyecto FE v25 - Manual para el desarrollador(Revisioacuten correspondiente al 01 de Abril de 2015)
Datos Opcionales AFIP WSFEv1
El componente permite enviar los datos opcionales requeridos por las diversas resoluciones de AFIP seguacuten latabla de paraacutemetros Disponible desde actualizacioacuten 115b
Datos opcionales para proyectos promovidos
WSFEv1AgregarOpcional(2 1234) identificador del proyecto
Datos opcionales para RG Bienes Usados 3411 (del vendedor)
WSFEv1AgregarOpcional(91 Juan Perez) Nombre y Apellido WSFEv1AgregarOpcional(92 200) Nacionalidad (coacutedigo de paiacutes)WSFEv1AgregarOpcional(93 Balcarce 50) Domicilio
Datos opcionales para RG 3668 Impuesto al Valor Agregado - Art12 (presuncioacuten de no vinculacioacuten con laactividad gravada FORM 8001)
WSFEv1AgregarOpcional(5 02) IVA Excepciones (01 LocadorPrestador 02 Conferencias 03 RG 74 04 Bienes de cambio 05 Ropa de trabajo 06 Intermediario)
Datos Opcionales AFIP WSFEv1 57
WSFEv1AgregarOpcional(61 80) Firmante Doc Tipo (80 CUIT 96 DNI etc)WSFEv1AgregarOpcional(62 20267565393) Firmante Doc NroWSFEv1AgregarOpcional(7 01) Caraacutecter del Firmante (01 Titular 02 DirectorPresidente 03 Apoderado 04 Empleado)
Datos opcionales para RG 3749 (RG 3368 Establecimientos de educacioacuten puacuteblica de gestioacuten privada)
WSFEv1AgregarOpcional(10 1) Actividad ComprendidaWSFEv1AgregarOpcional(1011 80) Tipo de Documento (titular del pago)WSFEv1AgregarOpcional(1012 20267565393) Nuacutemero de Documento (titular del pago)
Datos opcionales para RG4520
WSFEv1AgregarOpcional(5 01) Actividad
Datos opcionales para FEv213 (RG 4367 Factura de Creacutedito Electroacutenica MiPyMEs (FCE))
WSFEv1AgregarOpcional(2101 2850590940090418135201) CBUWSFEv1AgregarOpcional(2102 pyafipws) aliasWSFEv1AgregarOpcional(27 SCA) tipo de transmisioacuten (desde el 01042021) if tipo_cbte in (203 208 213) WSFEv1AgregarOpcional(22 S) Anulacioacuten
Obtencioacuten de Atributos Avanzados WSFEv1
En versiones recientes (112a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosde la respuesta (uacutetiles para depuracioacuten y solucioacuten de errores) con los meacutetodos AnalizarXml yObtenerTagXml
Ejemplo para recuperar datos puntuales de un comprobante emitido (moneda cotizacioacuten CUIT etc)
cae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)ok = WSFEv1AnalizarXml(XmlResponse)If ok Then
datos del encabezado DebugPrint CAE WSFEv1ObtenerTagXml(CodAutorizacion) WSFEv1CAE DebugPrint CbteFch WSFEv1ObtenerTagXml(CbteFch) WSFEv1FechaCbte DebugPrint Moneda WSFEv1ObtenerTagXml(MonId) DebugPrint Cotizacion WSFEv1ObtenerTagXml(MonCotiz) DebugPrint DocTipo WSFEv1ObtenerTagXml(DocTipo) DebugPrint DocNro WSFEv1ObtenerTagXml(DocNro)
ejemplos con arreglos (primer elemento = 0 segundo = 1 etc) DebugPrint Primer IVA (alci id) WSFEv1ObtenerTagXml(Iva AlicIva 0 Id) DebugPrint Primer IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 0 Importe) DebugPrint Segundo IVA (alic id) WSFEv1ObtenerTagXml(Iva AlicIva 1 Id) DebugPrint Segundo IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 1 Importe) DebugPrint Primer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 0 Desc) DebugPrint Primer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 0 Importe) DebugPrint Segundo Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 1 Desc) DebugPrint Segundo Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 1 Importe) DebugPrint Tercer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 2 Desc) DebugPrint Tercer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 2 Importe)End If
Obtencioacuten de Atributos Avanzados WSFEv1 58
Servicio Web de Factura Electroacutenica Mercado InternoPrograma Matrix (WSMTXCA)
EL WSMTXCA es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten A (con detalle de factura) de la Resolucioacuten General 29042010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYY-MM-DD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los artiacuteculos losimpuestos (IVA) y tributos (similar a WSFEX y WSBFE)
A su vez el WSMTXCA devuelve mensajes de eventos (mantenimiento programado advertencias etc) losque deben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva tributos unidades de medida Estas tablas pueden sufrirmodificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha de vigencia(desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia del WSFE quelas tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiFacturaElectronicaMTXCAService
La programacioacuten de la interfase WSMTXCA es similar a WSFE WSFEX WSBFE y WSFEv1 serecomienda revisarlos
Objeto
El objeto COM se crea invocando a CreateObject(WSMTXCA)bull
Meacutetodos
Meacutetodos principales
Conectar(cache wsdl proxy) realiza la conexioacuten a los servidores de la AFIP (primerpaso esencial) Si no se especifica url del wsdl se utiliza servidores de homologacioacuten El paraacutemetrocache es un directorio donde se almacenan internamente la descripcioacuten del servicio (archivo WSDL)para mayor optimizacioacuten Proxy es un string con la informacioacuten del servidor intermediousuarioclaveservidorpuerto
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto
bull
Servicio Web de Factura Electroacutenica Mercado Interno Programa Matrix (WSMTXCA) 59
imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pagofecha_serv_desde fecha_serv_hasta moneda_id moneda_ctz obs) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetrosEstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura devuelve True si el campo pertenece al encabezado y se haactualizado correctamente (ver ejemplo)
bull
AgregarIva(id base_imp importe) agrega internamente un subtotal de IVA a unafactura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible e importeVer ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(id Desc base_imp alic importe) agrega internamente unsubtotal de tributo a una factura para luego poder autorizarla recibe los datos del impuesto nacionalprovincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccbte_cuit fecha) agrega internamente un comprobante asociado a una factura para luegopoder autorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detallede los paraacutemetros El campo cuit fueacute agregado seguacuten Release v05 15-03-2017 disponible desdeactualizacioacuten 113a El campo fecha fue agregado en Realse v010 01072019
bull
AgregarItem(u_mtx cod_mtx codigo ds qty umed precio bonifcod_iva imp_iva imp_subtotal) agrega internamente un item (linea de factura) a unafactura para luego poder autorizarla recibe los datos del item a factura a emitir Ver ejemplo para eldetalle de los paraacutemetros
bull
EstablecerCampoItem(campo valor) establece individualmente el valor de un campo deldetalle de la factura (uacuteltimo item agregado) devuelve True si el campo pertenece al encabezado y seha actualizado correctamente (ver ejemplo)
bull
AutorizarComprobante() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo deAutorizacioacuten Electroacutenico (CAE) Ver ejemplo
bull
AutorizarAjusteIVA() autoriza un ajuste de IVA (notas de creacutedito deacutebito) Se debe informarel coacutedigo 7790001001139 e informar solo el importe de IVA ajustado
bull
SolicitarCAEA(periodo orden) permite obtener un CAEA y su respectivo periacuteodo devigencia (fecha de validez desde y fecha de validez hasta)
bull
ConsultarCAEA(periodo orden caea) permite consultar la informacioacutencorrespondiente a un CAEA previamente otorgado (recibe periacuteodoorden o CAEA)
bull
InformarComprobanteCAEA() enviacutea la informacioacuten del comprobante emitido y asociado a unCAEA (ver AutorizarComprobante)
bull
InformarAjusteIVACAEA() enviacutea la informacioacuten del comprobante de ajuste de IVA emitidospara un CAEA (ver AutorizarAjusteIVA)
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125a 200620
bull
Meacutetodos secundarios
ConsultarComprobante(tipo_cbte punto_vta cbte_nro) recupera los datos deuna factura autorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobanteoriginal y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vezestablece los datos de la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle delos paraacutemetros y valores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos 60
ConsultarMonedas() ConsultarTiposComprobante()ConsultarTiposDocumento() ConsultarAlicuotasIVA()ConsultarCondicionesIVA() ConsultarUnidadesMedida()ConsultarTiposTributo() recupera valores referenciales de coacutedigos de las tablas deparaacutemetros devuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -sicorresponde- (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
ConsultarCotizacionMoneda(moneda_id) devuelve cotizacioacuten y fecha de la monedaindicada como paraacutemetro
bull
ConsultarPuntosVentaCAE() permite consultar los puntos de venta habilitados para CAE eneste WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPuntosVentaCAEA() permite consultar los puntos de venta habilitados para CAEAen este WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPtosVtaCAEANoInformados(caea) permite consultar que puntos de venta auacutenno fueron informados para un CAEA determinado devuelve una lista (array de strings) con los datosdel numero_punto_venta
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importes del comprobantebull ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull
Errores
La interfase procesa los errores WSMTXCA y los almacena en las proipedades Errores y ErrCodeErrMsgVer especificaciones teacutecnicas del WSMTXCA para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ejemplo
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSMTXCA As Object
Atributos 61
On Error GoTo ManejoError
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSMTXCAtra = WSAACreateTRA(wsmtxca)DebugPrint tra
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)DebugPrint cms
Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten (cambiar para produccioacuten)
Imprimir el ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint taDebugPrint Token WSAATokenDebugPrint Sign WSAASign
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSMTXCA = CreateObject(WSMTXCA)DebugPrint WSMTXCAversion
Setear tocken y sing de autorizacioacuten (pasos previos)WSMTXCAToken = WSAATokenWSMTXCASign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSMTXCACuit = 20267565393
Conectar al Servicio Web de FacturacioacutenWSDL = httpsserviciosjavaafipgovarwsmtxcaservicesMTXCAServicewsdlok = WSMTXCAConectar( WSDL) produccioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSMTXCADummyDebugPrint appserver status WSMTXCAAppServerStatusDebugPrint dbserver status WSMTXCADbServerStatusDebugPrint authserver status WSMTXCAAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4000cbte_nro = WSMTXCACompUltimoAutorizado(tipo_cbte punto_vta)fecha = Format(Date yyyy-mm-dd)concepto = 3tipo_doc = 80 nro_doc = 30000000007cbte_nro = CLng(cbte_nro) + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000
Ejemplo 62
imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs = Observaciones Comerciales libre
ok = WSMTXCACrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz obs)
Agrego los comprobantes asociadosIf False Then solo si es nc o nd tipo = 19 pto_vta = 2 nro = 1234 ok = WSMTXCAAgregarCmpAsoc(tipo pto_vta nro)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSMTXCAAgregarTributo(id Desc base_imp alic importe)
Agrego subtotales de IVAid = 5 21base_im = 10000importe = 2100ok = WSMTXCAAgregarIva(id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890codigo = P0001ds = Descripcion del producto P0001qty = 10000umed = 7precio = 10000bonif = 000cod_iva = 5imp_iva = 2100imp_subtotal = 12100ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx DESC Descuento 0 _
99 0 0 cod_iva -2100 -12100)
Solicito CAEcae = WSMTXCAAutorizarComprobante()
verifico que no haya erroresFor Each er In WSMTXCAErrores MsgBox er vbInformation ErrorNext
Ejemplo 63
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSMTXCAXmlRequestDebugPrint WSMTXCAXmlResponse
MsgBox Resultado amp WSMTXCAResultado amp CAE amp cae amp _ Venc amp WSMTXCAVencimiento amp Obs amp WSMTXCAobs _
vbInformation + vbOKOnly
Ejemplo para obtener coacutedigos referenciales (tabla moneda)
recupero tabla de paraacutemetros de moneda (id descripcioacuten)For Each x In WSMTXCAConsultarMonedas() DebugPrint xNext
busco la cotizacioacuten del dolar (ver Param Mon)ctz = WSMTXCAConsultarCotizacionMoneda(DOL)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSMTX factura electroacutenica con detalle)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta ambos el mismo nuacutemero si es una facturaindividual)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull imp_subtotal subtotal sin ivabull imp_trib Importe de otros tributosbull imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull moneda_ctz Cotizacioacuten de la moneda de la facturabull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull obs observaciones comerciales (campo libre)bull caea debe completarse si se informa una factura en esta modalidad (obtenido con SolicitarCAEA)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
u_mtx cantidad de unidades(ej 123456)bull cod_mtx codigo mtx del producto (ej 1234567890)bull codigo codigo opcional del producto (ej P0001)bull ds Descripcioacuten completabull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull
Descripcioacuten de la obtencioacuten de CAE CAEA 64
bonif Bonificacioacutenbull cod_iva Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_iva importe liquidado de IVAbull imp_subtotal = Importe total (incluyendo descuentos e IVA)bull
Para items descriptivos utilizar umed = 0 Para anticipos o descuentos utilizar umed = 99
Por cada alicuota de IVA se debe llamar al meacutetodo AgregarIva con los siguientes paraacutemetros
id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull base_imp base imponible (importe)bull importe importe liquidadobull
De existir otros tributos se debe llamar al meacutetodo AgregarTributo con los siguientes paraacutemetros
id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los comprobantes asociados a una nota decreacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobantebull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo AutorizarComprobante o InformarComprobanteCAEA
Si no hubiere inconvenientes la llamada debe devolver el CAE CAEA y se establece el atributoWSMTXCAResultado = A (Aceptado) y WSMTXCAVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSMTXCAObscon los diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (ConsultarComprobante)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSMTX en el sitio de la AFIP
Manual Desarrollador Informacioacuten importante sobre la operatoriabull
Descripcioacuten de la obtencioacuten de CAE CAEA 65
Establecer campos individualmente (ejemplo WSMTXCA)
Para lenguajes que no soporten el pasaje de varios parametros a un meacutetodo (por ej SERVOY por sulimitacioacuten de 6 argumentos) desde la versioacuten 106a es posible crear la factura en blanco (todos los camposvacios) y luego establecer los campos individualmente
ok = WSMTXCACrearFactura()ok = WSMTXCAEstablecerCampoFactura(concepto concepto)ok = WSMTXCAEstablecerCampoFactura(tipo_doc tipo_doc)ok = WSMTXCAEstablecerCampoFactura(nro_doc nro_doc)ok = WSMTXCAEstablecerCampoFactura(tipo_cbte tipo_cbte)ok = WSMTXCAEstablecerCampoFactura(punto_vta punto_vta)ok = WSMTXCAEstablecerCampoFactura(cbt_desde cbt_desde)ok = WSMTXCAEstablecerCampoFactura(cbt_hasta cbt_hasta)ok = WSMTXCAEstablecerCampoFactura(imp_total imp_total)ok = WSMTXCAEstablecerCampoFactura(imp_tot_conc imp_tot_conc)ok = WSMTXCAEstablecerCampoFactura(imp_neto imp_neto)ok = WSMTXCAEstablecerCampoFactura(imp_subtotal imp_subtotal)ok = WSMTXCAEstablecerCampoFactura(imp_trib imp_trib)ok = WSMTXCAEstablecerCampoFactura(imp_op_ex imp_op_ex)ok = WSMTXCAEstablecerCampoFactura(fecha_cbte fecha_cbte)ok = WSMTXCAEstablecerCampoFactura(fecha_venc_pago fecha_venc_pago)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_desde fecha_serv_desde)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_hasta fecha_serv_hasta)ok = WSMTXCAEstablecerCampoFactura(moneda_id moneda_id)ok = WSMTXCAEstablecerCampoFactura(moneda_ctz moneda_ctz)ok = WSMTXCAEstablecerCampoFactura(observaciones Obs)ok = WSMTXCAEstablecerCampoFactura(caea CAEA)ok = WSMTXCAEstablecerCampoFactura(vencimiento vencimiento)
Para los items de detalle seriacutea similar
ok = WSMTXCAAgregarItem()ok = WSMTXCAEstablecerCampoItem(u_mtx u_mtx)ok = WSMTXCAEstablecerCampoItem(cod_mtx cod_mtx)ok = WSMTXCAEstablecerCampoItem(codigo codigo)ok = WSMTXCAEstablecerCampoItem(ds ds)ok = WSMTXCAEstablecerCampoItem(qty qty)ok = WSMTXCAEstablecerCampoItem(umed umed)ok = WSMTXCAEstablecerCampoItem(precio precio)ok = WSMTXCAEstablecerCampoItem(bonif bonif)ok = WSMTXCAEstablecerCampoItem(iva_id cod_iva)ok = WSMTXCAEstablecerCampoItem(imp_iva imp_iva)ok = WSMTXCAEstablecerCampoItem(imp_subtotal imp_subtotal)
Interfase por archivos de texto siacutemil SIAP - RECE
Para lenguajes donde no es posible utilizar objetos COM se desarrolloacute una interfaz de texto (command lineinterfase) para poder utilizar los Web Services de la AFIP que funciona como un programa independientemanteniendo las ventajas y caracteriacutesticas presentadas anteriormente
Formatos de archivos de intercambio soportados
Archivos TXT de Texto plano estilo COBOL y aplicativos SIAP AFIPbull Tablas DBF para dBase III Fox Clipper Harbour (xBase) etcbull Formato JSON para lenguajes de programacioacuten maacutes modernos (PHP JAVA JavaScript etc)bull
Establecer campos individualmente (ejemplo WSMTXCA) 66
La herramienta es multiplataforma (LinuxWindows)
Ver secciones anteriores sobre la descripcioacuten de las opciones de configuracioacuten campos y procedimientos
Consideraciones Generalesbull Autenticacioacuten (WSAA) ticket de acceso certificados y claves privadasbull Gestioacuten de CAE (WSFEv1) mercado interno sin detalle (version 1)bull Gestioacuten de CAE (WSMTXCA) mercado interno con detalle (matrix)bull Gestioacuten de CAE (WSFEX) exportacioacutenbull
Configuracioacuten
Editar el archivo RECEINI en la carpeta de la intefase (CPYAFIPWS)
CERT ubicacioacuten del archivo certificado (ver WSAA)bull PRIVATEKEY ubicacioacuten del archivo de la clave privada (ver WSAA)bull CUIT CUIT del emisorbull ENTRADA ubicacioacuten del archivo de texto de entrada (para cada webservice)bull SALIDA ubicacioacuten del archivo de texto de salida (para cada webservice)bull URL direccioacuten de los servicios web de produccioacuten (para cada webservice)bull Seccion [DBF] configura los nombres de archivos con las tablas requeridasbull
Ejemplo
[WSAA]CERT=CSISTEMAempresacrtPRIVATEKEY= CSISTEMAempresakeyURL=httpswsaaafipgovarwsservicesLoginCmswsdl[WSFEv1]CUIT=30000000000CBU=2222222222222222222222ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
[WSMTXCA]CUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtReprocesar= SURL=httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAService
[WSBFE] aplica tambieacuten a WSBFEv1CUIT=30000000000ENTRADA= CSISTEMAentradatxtSALIDA= CSISTEMAsalidatxtURL=httpsservicios1afipgovarwsbfev1serviceasmxWSDL
[WSFEXv1] aplica tambieacuten a WSFEXCUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfexv1serviceasmxWSDL
Interfase por archivos de texto siacutemil SIAP - RECE 67
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalles = detallesdbfDatos Opcionales = opcionalesdbf
Seccioacuten [WSAA]
Configuracioacuten referente al web service de autenticacioacuten
CERT ubicacioacuten del archivo que contiene el certificadobull PRIVATEKEY ubicacioacuten de la clave privada correspondiente al certificadobull URL direccioacuten del servidor de AFIP Por ej para produccioacuten httpswsaaafipgovarwsservicesLoginCmswsdl
bull
Seccioacuten [WSFEv1]
Configuracioacuten referente al web service de factura nacional
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfev1serviceasmxWSDL
bull
Seccioacuten [WSFEX]
Configuracioacuten referente al web service de factura exportacioacuten
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfexserviceasmx
bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull
Seccioacuten [PROXY]
Configuracioacuten referente al servidor intermedio de salida a internet (firewall antivirus proxy etc) ej
Configuracioacuten 68
HOST = localhostbull PORT = 8000bull USER = marianobull PASS = reingartbull
NOTA solo debe configurarse esta seccioacuten si corresponde contactar al administrador de red de la empresapara determinar los paraacutemetros correctos de cada caso Para maacutes informacioacuten ver Errores de Conectividad
Formato de archivos de entrada y salida
Factura electroacutenica normal (WSFE)
El formato utilizado es similar a RECE pero extendido con algunos campos necesarios para utilizar losServicios Web A continuacioacuten se detalla nombre del campo posicioacuten inicial longitud y tipo
fecha_cbte (28A)bull tipo_cbte (102N)bull punto_vta (134N)bull cbt_desde (178N)bull cbt_hasta (258N)bull tipo_doc (362N)bull nro_doc (3811N)bull imp_total (7915I)bull imp_tot_conc (9415I)bull imp_neto (10915I)bull impto_liq (12415I)bull impto_liq_rni (13915I)bull imp_op_ex (15415I)bull cae (26114N)bull fecha_vto (2758A)bull resultado (2911A)bull motivo (2922A)bull reproceso (2941A)bull fecha_venc_pago (2958A)bull presta_serv (3031N)bull fecha_serv_desde (3048A)bull fecha_serv_hasta (3128A)bull id (32015N)bull
Tipos de campo
A Alfanumericobull N Numericobull I Importes con 2 decimales (sin incluir punto)bull
Los espacios no definidos se ignoran (completar con un espacio en blanco)
Para maacutes informacioacuten sobre los campos ver paraacutemetros y valores que retorna el meacutetodo Aut en el presentemanual
Seccioacuten [PROXY] 69
Como formato de entrada es posible utilizar el mismo archivo generado para el aplicativo SIAPRECE perono se podraacuten facturar servicios ya que los campo presta_serv y fecha_serv_desde y fecha_serv_hasta no estaacutencontemplados en dicho formato
Factura electroacutenica bienes de capital (WSBFE)
El formato es similar al de factura electroacutenica normal pero variacutea el tipo de registro (0 Encabezado 1 Detallede cada Item)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 0bull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numericobull Campo tipo_doc Posicioacuten 24 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 26 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 37 Longitud 15 Tipo Importebull Campo imp_tot_conc Posicioacuten 52 Longitud 15 Tipo Importebull Campo imp_neto Posicioacuten 67 Longitud 15 Tipo Importebull Campo impto_liq Posicioacuten 82 Longitud 15 Tipo Importebull Campo impto_liq_rni Posicioacuten 97 Longitud 15 Tipo Importebull Campo imp_op_ex Posicioacuten 112 Longitud 15 Tipo Importebull Campo impto_perc Posicioacuten 127 Longitud 15 Tipo Importebull Campo imp_iibb Posicioacuten 142 Longitud 15 Tipo Importebull Campo impto_perc_mun Posicioacuten 157 Longitud 15 Tipo Importebull Campo imp_internos Posicioacuten 172 Longitud 15 Tipo Importebull Campo imp_moneda_id Posicioacuten 187 Longitud 3 Tipo Alfanumericobull Campo imp_moneda_ctz Posicioacuten 190 Longitud 10 Tipo Importebull Campo zona Posicioacuten 200 Longitud 5 Tipo Alfanumericobull Campo cae Posicioacuten 205 Longitud 14 Tipo Numericobull Campo fecha_vto Posicioacuten 219 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 227 Longitud 1 Tipo Alfanumericobull Campo obs Posicioacuten 228 Longitud 2 Tipo Alfanumericobull Campo reproceso Posicioacuten 230 Longitud 1 Tipo Alfanumericobull Campo id Posicioacuten 231 Longitud 15 Tipo Numericobull
Detalle (por cada item)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 1bull Campo ncm Posicioacuten 2 Longitud 15 Tipo Alfanumericobull Campo sec Posicioacuten 17 Longitud 15 Tipo Alfanumericobull Campo qty Posicioacuten 32 Longitud 15 Tipo Importebull Campo umed Posicioacuten 47 Longitud 5 Tipo Numericobull Campo precio Posicioacuten 52 Longitud 15 Tipo Importebull Campo bonif Posicioacuten 67 Longitud 15 Tipo Importebull Campo imp_total Posicioacuten 82 Longitud 15 Tipo Importebull Campo iva_id Posicioacuten 97 Longitud 5 Tipo Numericobull Campo ds Posicioacuten 102 Longitud 200 Tipo Alfanumericobull
Factura electroacutenica normal (WSFE) 70
Si se informa el campo ID la factura se genera con dicho nuacutemero de secuencia De lo contrario para evitarproblemas y poder reprocesar el CAE se genera con un nuacutemero de secuencia del formatoTPPPPNNNNNNNN (tipo de comprobante punto de venta y nuacutemero de comprobante)
Factura electroacutenica exportacioacuten (WSFEX)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Formato
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 3bull Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo obs Posicioacuten 1618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 2618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 2668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 2671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 2691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 2692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 2706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 2714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 2715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 2716 Longitud 40 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 2756 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 2771 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 32 Longitud 12 Tipo Importe Decimalesbull Campo umed Posicioacuten 44 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 46 Longitud 12 Tipo Importe Decimales 3bull Campo imp_total Posicioacuten 58 Longitud 14 Tipo Importe Decimales 3bull Campo ds Posicioacuten 72 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica bienes de capital (WSBFE) 71
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Nota se utilizan 3 decimales para los importes y 6 para la cotizacioacuten de la moneda
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Tributo 2 IVA 3 Comprobante asociado 6 Opcionales 8 Periodo Comprobante asociado) y no tienedetalle de artiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbt_desde Posicioacuten 16 Longitud 8 Tipo Numericobull Campo cbt_hasta Posicioacuten 24 Longitud 8 Tipo Numericobull Campo concepto Posicioacuten 32 Longitud 1 Tipo Numericobull Campo tipo_doc Posicioacuten 33 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 35 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 46 Longitud 15 Tipo Importe Decimales 2bull Campo no_usar Posicioacuten 61 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 76 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 91 Longitud 15 Tipo Importe Decimales 2bull Campo imp_iva Posicioacuten 106 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 121 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 136 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 151 Longitud 3 Tipo Alfanumericobull Campo moneda_ctz Posicioacuten 154 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 164 Longitud 8 Tipo Alfanumericobull Campo cae Posicioacuten 172 Longitud 14 Tipo Alfanumericobull Campo fch_venc_cae Posicioacuten 186 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 194 Longitud 1 Tipo Alfanumericobull Campo motivos_obs Posicioacuten 195 Longitud 1000 Tipo Alfanumericobull Campo err_code Posicioacuten 1195 Longitud 6 Tipo Alfanumericobull Campo err_msg Posicioacuten 1201 Longitud 1000 Tipo Alfanumericobull Campo reproceso Posicioacuten 2201 Longitud 1 Tipo Alfanumericobull Campo emision_tipo Posicioacuten 2202 Longitud 4 Tipo Alfanumericobull Campo fecha_serv_desde Posicioacuten 2206 Longitud 8 Tipo Alfanumericobull
Factura electroacutenica exportacioacuten (WSFEX) 72
Campo fecha_serv_hasta Posicioacuten 2214 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 2222 Longitud 3 Tipo Numericobull Campo punto_vta Posicioacuten 2225 Longitud 5 Tipo Numericobull Campo fecha_hs_gen Posicioacuten 2230 Longitud 14 Tipo Alfanumerico formato yyyymmddhhmiss(pCAEA contingencia)
bull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tributo_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo desc Posicioacuten 18 Longitud 100 Tipo Alfanumericobull Campo base_imp Posicioacuten 118 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 133 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 148 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo iva_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo base_imp Posicioacuten 18 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 33 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numericobull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numericobull Campo nro Posicioacuten 9 Longitud 8 Tipo Numericobull Campo fecha Posicioacuten 17 Longitud 8 Tipo Numericobull Campo cuit Posicioacuten 25 Longitud 11 Tipo Numericobull
Opcionales Disponible desde actualizacioacuten 133b
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Compradores Disponible desde actualizacioacuten 137a (RG-4109-E Bienes Muebles Registrables)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo doc_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo doc_nro Posicioacuten 5 Longitud 80 Tipo Numerico Decimalesbull Campo porcentaje Posicioacuten 85 Longitud 6 Tipo Importe Decimales 2bull
Periodo Cbte Asoc Disponible desde actualizacioacuten 138a
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_desde Posicioacuten 2 Longitud 8 Tipo Numericobull Campo fecha_hasta Posicioacuten 10 Longitud 8 Tipo Numericobull
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 73
Factura electroacutenica Mercado Interno Matrix (WSMTXCA)
El formato es similar al de factura electroacutenica mercado interno version 1 pero variacutea el tipo de registro (0Encabezado 1 Tributo 2 IVA 3 Comprobante asociado 4 Detalle de cada item) y tiene detalle deartiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 10 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 12 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 14 Longitud 4 Tipo Numerico Decimalesbull Campo cbt_desde Posicioacuten 18 Longitud 8 Tipo Numerico Decimalesbull Campo cbt_hasta Posicioacuten 26 Longitud 8 Tipo Numerico Decimalesbull Campo concepto Posicioacuten 34 Longitud 1 Tipo Numerico Decimalesbull Campo tipo_doc Posicioacuten 35 Longitud 2 Tipo Numerico Decimalesbull Campo nro_doc Posicioacuten 37 Longitud 11 Tipo Numerico Decimalesbull Campo imp_total Posicioacuten 48 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 63 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 78 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 93 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 108 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 138 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 141 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 151 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_desde Posicioacuten 161 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_hasta Posicioacuten 171 Longitud 10 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 181 Longitud 14 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 195 Longitud 10 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 205 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 206 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 1206 Longitud 6 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 1212 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo reproceso Posicin 2212 Longitud 1 Tipo Alfanumerico Decimalesbull Campo emision_tipo Posicin 2213 Longitud 4 Tipo Alfanumerico Decimalesbull Campo observaciones Posicioacuten 2217 Longitud 1000 Tipo Alfanumerico Decimalesbull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tributo_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull Campo desc Posicioacuten 5 Longitud 100 Tipo Alfanumerico Decimalesbull Campo base_imp Posicioacuten 105 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 120 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 135 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo iva_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Mercado Interno Matrix (WSMTXCA) 74
Campo base_imp Posicioacuten 5 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 20 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Opcionales
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Detalle de item
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo u_mtx Posicioacuten 2 Longitud 10 Tipo Numerico Decimalesbull Campo cod_mtx Posicioacuten 12 Longitud 30 Tipo Alfanumerico Decimalesbull Campo codigo Posicioacuten 42 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 72 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo umed Posicioacuten 87 Longitud 3 Tipo Numerico Decimalesbull Campo precio Posicioacuten 90 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo bonif Posicioacuten 105 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo iva_id Posicioacuten 120 Longitud 3 Tipo Numerico Decimalesbull Campo imp_iva Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 138 Longitud 15 Tipo Importe Decimales 2bull Campo ds Posicioacuten 153 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo pais_dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo nombre_cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 2bull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1) 75
Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 4000 Tipo Alfanumerico Decimalesbull Campo obs_generales Posicioacuten 4618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 5618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 5668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 5671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 5691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 5692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 5706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 5714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 5715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 5716 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 6716 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 6731 Longitud 8 Tipo Alfanumerico Decimalesbull Campo excepcion Posicioacuten 6739 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 6839 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 6939 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo fecha_pago Posicioacuten 7939 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 50 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 52 Longitud 12 Tipo Importe Decimales 6bull Campo umed Posicioacuten 64 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 66 Longitud 12 Tipo Importe Decimales 6bull Campo importe Posicioacuten 78 Longitud 13 Tipo Importe Decimales 2bull Campo bonif Posicioacuten 91 Longitud 12 Tipo Importe Decimales 6bull Campo ds Posicioacuten 103 Longitud 4000 Tipo Alfanumerico Decimalesbull
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull Campo cbte_cuit Posicioacuten 17 Longitud 11 Tipo Numerico Decimalesbull
Formato Tablas xBase DBF (dBase III Fox Clipper)
Las ultimas versiones de la interfaz ademas de manejo por archivo de texto soporta manejo por tablas DBFEstas tablas pueden ser generadas con cualquier libreriacutea o aplicacioacuten compatible (incluso pueden ser abiertascon planillas de caacutelculo)
Formato Tablas xBase DBF (dBase III Fox Clipper) 76
Los tipos de campos son
C(l) caracter (longitud)bull N(ld) numerico (longitud y decimales)bull M camos memo (usado para errores y mensajes extensos gt250 caracteres)bull D campos fechabull
Los nombres de los campos son los mismos que se manejan para el archivo de texto pero sin el guioacuten bajo yrecortados a 10 caracteres
Se utiliza la libreriacutea Python dBase (dbf-08819) que soporta los siguientes tipos de archivos
dBase III Plusbull dBase III Plus wmemosbull dBase IVbull dBase IV SQLbull dBase IV wmemosbull dBase IV wmemosbull dBase IV wSQL tablebull dBase Vbull FoxBASEbull FoxPro wmemosbull Visual FoxProbull Visual FoxPro (auto increment field)bull
Reconoce archivos con extensioacuten DBF DBT FPT entre otros
Factura electroacutenica mercado interno (WSFEv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
IMPORTANTE algunos campos han cambiado su denominacioacuten en las uacuteltimas versiones para hacerloscompatibles con las tablas PDF (solo se muestra el nombre de campo perteneciente a la uacuteltima actualizacioacuten)
Encabezado (encabezadbf)
Encabezado (datos generales de la factura)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtdesde N(80)bull Campo cbthasta N(80)bull Campo concepto N(10)bull Campo tipodoc N(20)bull Campo nrodoc N(110)bull Campo imptotal N(152)bull Campo nousar N(152)bull Campo imptotconc N(152)bull
Factura electroacutenica mercado interno (WSFEv1) 77
Campo impneto N(152)bull Campo impiva N(152)bull Campo imptrib N(152)bull Campo impopex N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo fechavencp C(8)bull Campo cae C(14)bull Campo fchvenccae C(8)bull Campo resultado C(1)bull Campo motivosobs Mbull Campo errcode C(6)bull Campo errmsg Mbull Campo reproceso C(1)bull Campo emisiontip C(4)bull Campo fechaservd C(8)bull Campo fechaservh C(8)bull
Tributo (tributodbf)
Detalle de otros tributos
Campo tiporeg N(10)bull Campo tributoid N(160)bull Campo desc C(100)bull Campo baseimp N(152)bull Campo alic N(152)bull Campo importe N(152)bull
Iva (ivadbf)
Detalle de subtotales por aliacutecuota de IVA
Campo tiporeg N(10)bull Campo ivaid N(160)bull Campo baseimp N(152)bull Campo importe N(152)bull
Comprobante Asociado (comprobadbf)
Comprobante Asociado
Campo tiporeg N(10)bull Campo tipo N(30)bull Campo ptovta N(40)bull Campo nro N(80)bull
Opcionales (opcionaldbf)
Datos opcionales (adicionales seguacuten cada nueva RG 3411 3668 4004-E etc)
Encabezado (encabezadbf) 78
Campo tiporeg N(10)bull Campo opcionalid C(4)bull Campo valor C(250)bull
Compradores (compradodbf)
Datos para Venta de bienes muebles registrables (RG 4109-E)
Campo tiporeg N(10)bull Campo doctipo N(30)bull Campo docnro N(800)bull Campo porcentaje N(62)bull
Factura electroacutenica mercado interno matrix (WSMTXCA)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Tabla Encabezadbf Encabezado (datos generales de la factura)
tiporeg N(10)bull fechacbte C(10)bull tipocbte N(20)bull puntovta N(40)bull cbtdesde N(80)bull cbthasta N(80)bull concepto N(10)bull tipodoc N(20)bull nrodoc N(110)bull imptotal N(152)bull imptotconc N(152)bull impneto N(152)bull impsubtota N(152)bull imptrib N(152)bull impopex N(152)bull monedaid C(3)bull monedactz N(106)bull fechavencp C(10)bull fechaservd C(10)bull fechaservh C(10)bull cae N(140)bull fchvenccae C(10)bull resultado C(1)bull motivosobs Mbull errcode C(6)bull errmsg Mbull reproceso C(1)bull emisiontip C(4)bull observacio Mbull
Tabla Tributodbf Detalle de otros tributos
Opcionales (opcionaldbf) 79
tiporeg N(10)bull tributoid C(3)bull desc C(100)bull baseimp N(152)bull alic N(152)bull importe N(152)bull
Tabla Ivadbf Detalle de subtotales por aliacutecuota de IVA
tiporeg N(10)bull ivaid C(3)bull baseimp N(152)bull importe N(152)bull
Tabla Comprobadbf Comprobante Asociado
tiporeg N(10)bull tipo N(30)bull ptovta N(40)bull nro N(80)bull
Tabla Detallesdbf Detalles del item
tiporeg N(10)bull umtx N(100)bull codmtx C(30)bull codigo C(30)bull qty N(153)bull umed N(30)bull precio N(153)bull bonif N(153)bull ivaid N(30)bull impiva N(152)bull impsubtota N(152)bull ds Mbull
Factura electroacutenica exportacioacuten (WSFEXv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Encabezado (encabezadbf)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtenro N(80)bull Campo tipoexpo N(10)bull Campo permisoexi C(1)bull Campo paisdstcmp N(30)bull
Factura electroacutenica mercado interno matrix (WSMTXCA) 80
Campo nombreclie C(200)bull Campo cuitpaiscl N(110)bull Campo domicilioc Mbull Campo idimpositi C(50)bull Campo imptotal N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo obscomerci Mbull Campo obsgeneral Mbull Campo formapago C(50)bull Campo incoterms C(3)bull Campo incotermsd C(20)bull Campo idiomacbte C(1)bull Campo cae N(140)bull Campo fechavto C(8)bull Campo resultado C(1)bull Campo reproceso C(1)bull Campo motivosobs Mbull Campo id N(150)bull Campo fchvenccae C(8)bull Campo excepcion C(100)bull Campo errcode C(100)bull Campo errmsg Mbull
Detalle (detalledbf)
Campo tiporeg N(10)bull Campo codigo C(50)bull Campo qty N(122)bull Campo umed N(20)bull Campo precio N(122)bull Campo importe N(132)bull Campo bonif N(122)bull Campo ds Mbull
Permiso (permisodbf)
Campo tiporeg N(10)bull Campo idpermiso C(16)bull Campo dstmerc N(30)bull
Comprobante Asociado (comprobadbf)
Campo tiporeg N(10)bull Campo cbtetipo N(30)bull Campo cbtepuntov N(40)bull Campo cbtenro N(80)bull Campo cbtecuit N(110)bull
Encabezado (encabezadbf) 81
Formato JSON
Factura electroacutenica mercado interno (WSFEv1)
Para lenguajes modernos (PHP JAVA JavaScript etc) se pueden utilizar archivos de intercambio en formatoJSON
Ejecutar rece1exe json
Ejemplo archivo de entrada faactura_electronicajson
[ tipo_cbte 3 punto_vta 4002 cbt_desde 447 cbt_hasta 447 fecha_cbte 20190511 tipo_doc 80 nro_doc 30500010912
concepto 1 fecha_venc_pago null fecha_vto 20190521
imp_neto 10000 imp_iva 2100 imp_op_ex 000 imp_tot_conc 000 imp_trib 100 imp_total 12200
moneda_id PES moneda_ctz 1000
ivas [ iva_id 5 base_imp 100 importe 21 ] tributos [ tributo_id 99 alic 1 base_imp 100 importe 1 desc Impuesto Municipal Matanza ] cbtes_asoc [ nro 1234 pto_vta 2 tipo 1 ] opcionales [] compradores [] ]
La resupuesta del webservice de AFIP es agregada al mismo formato (ejemplo editado)
[ resultado A cae 69193742426586 fch_venc_cae 20190521 emision_tipo CAE motivos_obs err_code err_msg
Formato JSON 82
reproceso ]
Forma de uso
Llamar al ejecutable RECEEXE (factura electroacutenica normal WSFE) RECEBEXE (factura electroacutenicaBienes de Capital WSBFE) RECEXEXE (factura electroacutenica Exportacioacuten) RECE1EXE (facturaelectroacutenica mercado interno WSFE versioacuten 1) en la carpeta de la intefase (CPYAFIPWS)
En caso de ejecucioacuten correcta informara por pantalla los ID y CAE obtenidos y el coacutedigo de retorno es 0
ID 1000200000063 CAE 59033567692234 Motivo 00 Reproceso NID 1000200000064 CAE 59033693441244 Motivo 00 Reproceso NID 1000200000065 CAE 59033880026543 Motivo 00 Reproceso N
El CAE obtenido fecha de vencimiento y demaacutes valores devueltos por WSFE (resultado reproceso motivode rechazo u observacioacuten) son escritos en el archivo de salida con la misma informacioacuten de la factura que enel archivo de entrada
En el caso de error informa por pantalla el motivo y el coacutedigo de retorno es distinto de 0
ns1coenotAuthorized Computador no autorizado a acceder los servicio de AFIP
1000 FERecuperaLastCMPRequestSRV_RA Usuario no autorizado a realizar esta operacionValidacionDeToken No aparecioacute CUIT en lista de relaciones 30000000000
Paraacutemetros
RECEEXE RECEBEXE RECEXEXE RECE1EXE y RECEMEXE reciben los siguientes argumentospor liacutenea de comando
ayuda lista los paraacutemetros habilitadosbull prueba Teniendo los certificados instalados se puede realizar una prueba donde la interface generaraacuteun archivo de entrada para las tres proacuteximas facturas obteniendo los uacuteltimos nuacutemeros de transaccioacuteny comprobante
bull
ult Solicita Tipo de comprobante y Punto de Venta y devuelve el uacuteltimo numero de comprobanteregistrado
bull
dummy consulta estado de servidores (deberiacutean ser OK los 3 servidores)bull ptosventa devuelve los puntos de venta habilitados para emitir facturas electroacutenicas (soloWSFEv1RECE1)
bull
debug modo depuracioacuten (detalla y confirma las operaciones)bull formato muestra el formato de los archivos de entradasalidabull get recupera datos de un comprobante autorizado previamente (verificacioacuten solo para RECEXRECE1 y RECEM)
bull
xml almacena los requerimientos y respuestas XML (uacutetil para depuracioacuten y registro)bull dbf modo de trabajo con tablas Dbase IIIFoxPro o similares (solo RECE1 y RECEM)bull json modo de trabajo con formato JSON (JavaScript PHP Java) (solo RECE1)bull
Se puede especificar como primer paraacutemetro un nombre de archivo RECEINI alternativo para cargardistintas configuraciones por ej
Factura electroacutenica mercado interno (WSFEv1) 83
RECE1EXE rece-empresaxini
Si no se especifica accion por defecto se enviacutea la informacioacuten del archivo de intercambio para autorizar laemisioacuten de factura electroacutenica devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) y demaacutes datos queresponde AFIP
Para CAEA (CAE Anticipado) aplican las siguientes opciones (RECEMRECE1)
solicitarcaea obtiene un CAEA y su respectivo periacuteodo de vigencia (fecha de validez desde y fechade validez hasta)
bull
consultarcaea consulta la informacioacuten correspondiente a un CAEA previamente otorgado (recibeperiacuteodoorden o CAEA)
bull
informarcaeanoutilizado informarcaeanoutilizadoptovta registra en AFIP un CAEA no utilizadobull informarcaea enviacutea la informacioacuten del comprobante emitido y asociado a un CAEAbull
Ejemplo RECE1 para autorizar una factura electroacutenica
Al ejecutar la herramienta sin paraacutemetros se autoriza la factura en el archivo de entrada guardando elresultado de AFIP en el archivo de salida
CPYAFIPWSgt RECE1EXE
Procesando FAC A 4002 00002067 00002067 CUIT 30628789661 $ 12200 IVA $ 2100NRO 2067 Resultado A CAE 65253261906700 Obs Err Reproceso S
Ante cualquier dificultad agregar los paraacutemetros --trace debug para ver los mensajes de depuracioacuten y xmldetallados
Ejemplo RECE1 consulta ultimo comprobante
Ejemplo para obtener el uacuteltimo nuacutemero de factura emitida
CPYAFIPWSgt RECE1EXE ultConsultar ultimo numeroTipo de comprobante 19Punto de venta 2Ultimo numero 62
Si se pasa el tipo de comprobante y punto de venta por linea de comando (luego de ult) en el archivo desalida guardaraacute el dato devuelto por AFIP
CPYAFIPWSgt RECE1EXE ult 1 4001Consultar ultimo numeroUltimo numero 222
Ejemplo RECE1 consulta de comprobante
Es posible recuperar los datos de un comprobante indicando get y tipo de comprobante punto de venta ynuacutemero de comprobante
CPYAFIPWSgt RECE1EXE get 1 5 478Recuperar comprobanteFechaCbte = 20150703
Paraacutemetros 84
CbteNro = 478PuntoVenta = 5TipoDoc = 80NroDoc = 27269434894ImpTotal = 226875CAE = 65273821773505Vencimiento = 20150713EmisionTipo = CAE
Es posible agregar xml yo --trace para ver el mensaje enviado y recibido desde AFIP con datos completosLos datos del comprobante recuperado tambieacuten se guardaraacuten en el archivo de intercambio (salida)
Ejemplo RECE1 consulta puntos de venta
Ejemplo para consultar los puntos de venta habilitados por AFIP
CPYAFIPWSgt RECE1EXE ptosventa
=== Puntos de Venta ===3|EmisionTipoCAE|BloqueadoN|FchBajaNULL4|EmisionTipoCAE|BloqueadoN|FchBajaNULL
Ejemplo RECEX1 consulta monedas con cotizacioacuten
Retorna la cotizacioacuten a la fecha consultada de la base de datos aduanera de todas las monedas que poseancotizacioacuten a la fecha indicada
CPYAFIPWSgt RECEX1EXE monctz Fecha (AAAAMMDD) |024|1757370|2202019||030|10991355|2202019||034|2833349|2202019||009|39777268|2202019||012|10663978|2202019||028|21977839|2202019||014|6073274|2202019||023|0012042|2202019||018|30185896|2202019||019|0358860|2202019||032|0012749|2202019||DOL|3967|2202019||016|4295104|2202019||026|28471159|2202019||033|0060760|2202019||035|11955998|2202019||063|27265191|2202019||015|4659463|2202019||060|451564|2202019||062|0605559|2202019||010|2068376|2202019||029|0006557|2202019||011|1214078|2202019||021|520470|2202019||025|0381832|2202019||031|5761801|2202019||061|5902659|2202019|0 OK
Ejemplo RECE1 consulta de comprobante 85
Entorno
Algunas versiones de COBOL cambian el directorio u otras variables del entorno (codificacioacuten zona horariaetc) En este caso se recomienda armar un archivo RECEBAT
ECHO OFFREM limpiar la zona horaria y cambiar al directorio de la interfaseSET TZ=CD CPYAFIPWSRECEEXE
PyFEPDF generador de PDF de facturas electroacutenicas
La herramienta PyFEPDF permite generar archivos PDF con el contenido de las Facturas Electroacutenicas paraponerlos a disposicioacuten de los clientes o ser enviados electroacutenicamente viacutea email con cualquier servicio decorreos o por web
Utiliza un enfoque similar a las interfaces para webservices por lo que su uso es muy simple totalmenteautomatizado (sin intervencioacuten del usuario) y no necesita herramientas externas (ni impresoras PDF nitipografiacuteas para el coacutedigo de barras)
Cubre toda la operatoria de Factura Electroacutenica seguacuten AFIP dada la Resolicioacuten General 24852006 ynormativa relacionada (RG141503 y RG1361) aplicable a
merado interno (WSFEv1 y WSMTXCA incluyendo importacioacuten con y sin detalle)bull exportacioacuten (WSFEX)bull bono fiscal electroacutenico (WSBFE)bull
Ver muestra baacutesica en facturapdf
La interfaz maneja automaacuteticamente
Logotipos e informacioacuten particular de cada empresabull Disentildeo en PDF libre modificable (incluye disentildeador visual faacutecil e intuitivo)bull Paginado y transporte con muacuteltiples copias (Original Duplicado etc)bull Textos ilimitados (detalles observaciones etc)bull IVA discriminado (subtotales facturas A)bull Coacutedigo de barras Interleaved 2 of 7 con diacutegito verificador (reemplazado por coacutedigo QR)bull Coacutedigo QR (Obligatorio a partir de Marzo 2021 - ver cronograma de implementacioacuten)bull Metadatos en las propiedades del PDF para buacutesquedas y archivamientobull Impresioacuten directa sin intervencioacuten del usuariobull
Nota algunas caracteriacutesticas pueden no estar disponible dado limitaciones del lenguaje de programacioacuten yosistema operativo
De manera similar a las otras interfaces y herramientas el instalador de PyFEPDF para homologacioacuten(evaluacioacuten y pruebas) estaacute disponible en la seccioacuten Descargas
Importante PyFEPDF es una herramienta adicional independiente del resto de los webservices yherramientas y los costos del soporte comercial variacutean dependiendo de las necesidades para implementarlaVer Costos y Condiciones
Entorno 86
Aclaraciones PDF
Coacutedigo de Barras es recomendable generarlo especialmente si se imprime (dependiendo del casoseriacutea obligatorio) Este componente contempla internamente la generacioacuten directa de la imaacutegen demanera vectorial (escalable en cualquier resolucioacuten) seguacuten el formato que requiere AFIP (Interleaved2 of 5) y no es necesario utilizar ninguna tipografia ni cuestioacuten adicional Simplemente debecompletarse el CUIT emisor punto de venta tipo de comprobante CAE y fecha de vencimiento delCAE (esta uacuteltima en formato AFIP AAAAMMDD) El componente contempla tambieacuten el caacutelculo deldiacutegito verificador De no estar todos los datos correctos no se generaraacute el coacutedigo de barras Parainformacioacuten general ver nuestro componente auxiliar PyI25
bull
Observaciones AFIP Si esta presente motivos_obs (respuesta de AFIP en WSFEv1Obs osimilar) deberiacutea agregarse la leyenda El IVA discriminado no puede computarse como CreacuteditoFiscal (RG248508 Art 27) -esto estaacute contemplado internamente en el componente- Por ej unmensaje de observacioacuten de AFIP seriacutea Factura individual DocTipo 80 DocNro 30000000007 nose encuentra registrado en los padrones de AFIP Anteriormente AFIP solo informaba el coacutedigo (09en este caso) para maacutes informacioacuten ver WSFE F136
bull
Discriminacioacuten de IVA el programador es responsable de enviar los datos correctos seguacuten lasdiferentes normativas de AFIP Generalmente el importe de IVA solo se debe discriminar parafacturas clase A o M En las facturas clase B por lo general solo se muestra la tasa pero no el neto niIVA liquidado En las facturas clase C y E generalmente no se muestra la columna de IVA ni NETOEsta loacutegica esta contemplada internamente pero es responsabilidad de la aplicacioacuten que utilice elcomponente el revisar por la consistencia de los datos Salvo en la Factura A para el resto se debeindicar el precio unitario IVA Incluido (de corresponder) y el importe total de cada artiacuteculo tambieacutendeberiacutea ser IVA Incluido en todos los casos (de manera similar a como se emiten los comprobantespor el sitio de clave fiscal de AFIP) Recomendamos utilizar el campo imp_subtotal para evitardiferencias de calculo y redondeo (deberiacutea ser la suma del neto + importes no gravado y exento paracomprobantes clase A e incluir el importe de IVA para los comprobantes clase B)
bull
Descuentos si bien se provee un campo descuento para los importes generales es recomendableque se utilice un artiacuteculo de bonificacioacuten general en el detalle con coacutedigo de unidad de medidaumed=99 y el importe en negativo para un correcto caacutelculo de los subtotales (especialmente si lafactura se extiende por varias paacuteginas) y contemplar la normativa de almacenamientoinformacioacuten yformatos de otros webservices como WSMTXCA WSBFEv1 y WSFEXv1
bull
Logotipo AFIP en las uacuteltimas actualizaciones (107q) se incluye el logotipo de AFIP (similar al quese incluye en las facturas emitidas por clave fiscal) Para que muestre la leyenda ComprobanteAutorizado debe establecerse el campo resultado = A y no debe ser un instalador dehomologacioacuten Proacuteximamente se agregaraacuten maacutes validaciones en este sentido (la constatacioacuten delcomprobante es responsabilidad de la aplicacioacuten que utilice el componente ver WSCDC) Verejemplos y formatos a continuacioacuten para mayor informacioacuten
bull
Requisitos formato de Facturaver httpwwwafipgovarafip259IIcap1bhtmbull
Interfaz COM PyFEPDFDLL
PyFEPDFDLL es una interfaz COM (AutomatizacionActiveX) similar a un Control OCX pero que nonecesita un formulario visual por lo que se puede usar desde desde cualquier lenguaje compatible enWindows (VB VFP Delphi etc) Tambieacuten puede utilizarce desde aplicaciones como MS Excel MS Accessetc
Aclaraciones PDF 87
Objeto COM PyFEPDF propiedades y meacutetodos
El objeto COM se crea invocando a CreateObject(PyFEPDF)
Las propiedades del objeto son
CUIT cuit del emisorbull Version versioacuten de la herramienta (ej 101b)bull InstallDir directorio de instalacioacutenbull
Los meacutetodos generales del objeto para crear una factura son los siguientes (ver ejemplo en VB a continuacioacutenpara maacutes detalles)
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbte_nro imp_total imp_tot_conc imp_neto imp_iva imp_tribimp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz cae fecha_vto_caeid_impositivo nombre_cliente domicilio_cliente pais_dst_cmpobs_comerciales obs_generales forma_pago incoterms idioma_cbtemotivos_obs) recibe toda la informacioacuten del encabezado de una factura seguacuten la legislacioacutenvigente
bull
AgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed preciobonif iva_id imp_iva importe despacho) agrega un item de detalle de artiacuteculoAdicionalmente puede pasarse los paraacutemetros dato_a dato_b dato_c dato_d dato_edespacho tambieacuten es opcional
bull
AgregarIva(iva_id base_imp importe) agrega un subtotal de iva (por cada aliacutecuota)bull AgregarTributo(tributo_id Desc base_imp alic importe) agrega otrosimpuestos (uno por cada ingresos brutos retenciones y percepciones etc)
bull
AgregarCmpAsoc(tipo pto_vta nro) agrega un comprobante asociado a la facturabull
Una vez creada la factura con todos los items se debe especificar el formato mediante los siguientes meacutetodos(ver ejemplo en VB a continuacioacuten para maacutes detalles)
CargarFormato(archivo_csv) crea todos los campos del disentildeo de la factura (layout)leyendolos desde el archivo especificado
bull
AgregarCampo(nombre tipo x1 y1 x2 y2 font size bold italicunderline foreground background align text priority) agrega uncampo manualmente al disentildeo de la factura (layout)
bull
AgregarDato(campo valor pagina) con campo = nombre usado en plantilla el valorpara cada hoja y en pagina el nro de paacutegina o T todas P primera U ultima
bull
Luego se debe crear la plantilla que seraacute rellenada con los datos de la factura y por uacuteltimo se generaraacute ymostraraacute el PDF (ver ejemplo en VB a continuacioacuten para maacutes detalles)
CrearPlantilla(papel orientacion) crea una plantilla con el papel (A4 legal o letter)y orientacioacuten (portrait landscape)
bull
ProcesarPlantilla(num_copias lineas_max qty_pos) procesa los datos de lafactura dentro de la plantilla indicando la cantidad de copioas (1 original 2 duplicado 3triplicado)la cantidad de liacuteneas maacuteximas por paacutegina
bull
GenerarPDF(salida) genera el archivo PDF terminado con el nombre dado en salidabull
Objeto COM PyFEPDF propiedades y meacutetodos 88
MostrarPDF(salida imprimir) muestra el contenido del PDF generado (usando AdobeAcrobat Reader o similar) y opcionalmente lo enviacutea directo a la impresora
bull
AtributosPropiedades especiacuteficos de configuracioacuten
CUIT cuit del emisor (para generar el coacutedigo de barras)bull FmtCantidad formato numeacuterico para cantidades por ej 04 (4 decimales)bull FmtPrecio formato numeacuterico para precios unitarios por ej 02 (2 decimales)bull Locale configuracioacuten regional a utilizar para formatear importes y fechas por ejSpanish_Argentina1252 (Windows) es_ARutf8 (Linux)
bull
Atributos geneacutericos (similares a otros componentes)
Version versioacuten de la interfase (ej 107q)bull InstallDir directorio de instalacioacuten (ej CArchivos de ProgramaPyAfipWs)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Ver Formato de Intercambio PDF y los otros componentes a los webservices para informacioacuten adicional sobrecada campo
Ejemplo PyFEPDF en VB
A modo de demostracioacuten a continuacioacuten se detalla un ejemplo simple (lenguaje Visual Basic) comentando elfuncionamiento baacutesico de la interfaz para generacioacuten de Facturas Electroacutenicas en formato PDF
Crear objeto interface para generacioacuten de FE en PDFSet PyFEPDF = CreateObject(PyFEPDF)DebugPrint PyFEPDFVersionDebugPrint PyFEPDFInstallDir
CUIT del emisorPyFEPDFCUIT = 33693450239
establezco formatos (cantidad de decimales)PyFEPDFFmtCantidad = 04PyFEPDFFmtPrecio = 02
Datos del encabezado de la facturatipo_cbte = 1 Factura Apunto_vta = 40000 prefijocbte_nro = 12345678 nuacutemero de facturafecha = 20110327concepto = 3 datos del clientetipo_doc = 80 nro_doc = 30000000007nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16 coacutedigo para exportacioacutenid_impositivo = PJ54482221-l totales del comprobanteimp_total = 12200 imp_tot_conc = 000imp_neto = 10000 imp_iva = 2100imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000
Ejemplo PyFEPDF en VB 89
fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturadofecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libremoneda_id = 012moneda_ctz = 05forma_pago = 30 diasincoterms = FOB termino de comercio exterior para exportacioacutenidioma_cbte = 1 idioma para exportacioacuten (no usado por el momento)motivos_obs = 11 motivo de observacioacuten (F136 y otros)
Coacutedigo de Autorizacioacuten Electroacutenica y fecha de vencimiento (para facturas tradicionales no imprimir el CAE ni coacutedigo de barras)cae = 61123022925855fecha_vto_cae = 20110320
Creo la factura (internamente en la interfaz)ok = PyFEPDFCrearFactura( _ concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fecha_vto_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivos_obs)
Parametros adicionales del encabezado
ok = PyFEPDFEstablecerParametro(localidad_cliente Hurlingham)ok = PyFEPDFEstablecerParametro(provincia_cliente Buenos Aires)
Leyenda Comprobante Autorizado (verificar previamente con WSCDC o similar)
ok = PyFEPDFEstablecerParametro(resultado A)
Agregar comprobantes asociados (si es una NCND)tipo = 19pto_vta = 2nro = 1234pyfepdfAgregarCmpAsoc(tipo pto_vta nro)
Agrego subtotales de IVA (uno por alicuota)iva_id = 5 coacutedigo para aliacutecuota del 21base_imp = 100 importe neto sujeto a esta aliacutecuotaimporte = 21 importe liquidado de ivaok = PyFEPDFAgregarIva(iva_id base_imp importe)
Agregar cada impuesto (por ej IIBB retenciones percepciones etc)tributo_id = 99 codigo para 99-otros tributosDesc = Impuesto Municipal Matanzabase_imp = 10000 importe sujeto a este tributoalic = 100 alicuota (porcentaje) de este tributoimporte = 100 importe liquidado de este tributook = PyFEPDFAgregarTributo(tributo_id Desc base_imp alic importe)
Agrego detalles de cada item de la facturau_mtx = 123456 unidadescod_mtx = 1234567890123 coacutedigo de barrascodigo = P0001 codigo interno a imprimir (ej articulo)
Ejemplo PyFEPDF en VB 90
ds = Descripcion del producto P0001qty = 2 cantidadumed = 7 coacutedigo de unidad de medida (ej 7 para unidades)precio = 100 precio neto (A) o iva incluido (B)bonif = 0 importe de descuentosiva_id = 5 coacutedigo para aliacutecuota del 21imp_iva = 42 importe liquidado de ivaimporte = 242 importe total del itemdespacho = Nordm 123456 numero de despacho de importacioacutenok = PyFEPDFAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
ds = Descuento generalumed = 99precio = -100imp_iva = -21importe = -121ok = PyFEPDFAgregarDetalleItem( ds 0 umed _ precio 0 iva_id imp_iva importe)
Agrego datos adicionales fijosok = PyFEPDFAgregarDato(logo PyFEPDFInstallDir + fpdfpng)ok = PyFEPDFAgregarDato(EMPRESA Empresa de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE1 Direccion de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE2 Capital Federal)ok = PyFEPDFAgregarDato(ObservacionesGenerales1 Nota al pie1)
Cargo el formato desde el archivo CSV (opcional) (carga todos los campos a utilizar desde la planilla)ok = PyFEPDFCargarFormato(PyFEPDFInstallDir + facturacsv)
Agrego campos manualmente (opcional)nombre = prueba tipo = T T texto L lineas I imagen etcX1 = 50 Y1 = 150 X2 = 150 Y2 = 255 coordenadas (en milimetros)Font = Arial Size = 20 Bold = 1 Italic = 1 Underline = 1 tipo de letraforeground = 000000 background = FFFFFF colores de frente y fondoAlign = C Alineacioacuten Centrado Izquierda Derechaprioridad = 2 Orden Z menor prioridad se dibuja primero (para superposiciones)Text = iexclpruebaok = PyFEPDFAgregarCampo(nombre tipo X1 Y1 X2 Y2 _ Font Size Bold Italic Underline _ foreground background _ Align Text priority)
completo campos personalizados de la plantillaok = PyFEPDFAgregarDato(custom-nro-cli Cod123)ok = PyFEPDFAgregarDato(custom-pedido 1234)ok = PyFEPDFAgregarDato(custom-remito 12345)ok = PyFEPDFAgregarDato(custom-transporte Camiones Ej SRL)
Creo plantilla para esta factura (papel A4 vertical)papel = A4 o letter para carta legal para oficioorientacion = portrait o landscape (apaisado)ok = PyFEPDFCrearPlantilla(papel orientacion)num_copias = 3 original duplicado y triplicadolineas_max = 24 cantidad de linas de items por paacuteginaqty_pos = izq (cantidad a la izquierda de la descripcioacuten del artiacuteculo) Proceso la plantillaok = PyFEPDFProcesarPlantilla(num_copias lineas_max qty_pos) Genero el PDF de salida seguacuten la plantilla procesadasalida = facturapdfok = PyFEPDFGenerarPDF(salida)
Ejemplo PyFEPDF en VB 91
Abro el visor de PDF y muestro lo generado (es necesario tener instalado Acrobat Reader o similar)imprimir = False cambiar a True para que lo envie directo a la impresoraok = PyFEPDFMostrarPDF(salida imprimir)
Ver pyfepdfbas (ejemplo completo)
Herramienta PyFEPDFEXE por liacutenea de comando (consola)
La herramienta dispone de un programa PyFEPDFEXE que puede ser utilizado desde la consola y generarfacturas en formato PDF dado archivos de entada en texto o DBF
Los paraacutemetros son
--ayuda este mensajebull --licencia muestra la licencia del programabull --debug modo depuracioacuten (detalla y confirma las operaciones)bull --formato muestra el formato de los archivos de entradasalidabull --prueba genera y autoriza una factura de prueba (no usar en produccioacuten)bull --cargar carga un archivo de entrada (txt o dbf) con los datos del comprobantebull --grabar graba un archivo de salida (txt o dbf) con los datos de los comprobantesbull --pdf genera la imaacutegen de factura en PDFbull --dbf utiliza tablas DBF en lugar del archivo de entrada TXTbull
Ver receini para paraacutemetros de configuracioacuten
Ejemplos
Ver el formato de archivos de entrada
PYFEPDFEXE --formato
1
Realizar una prueba (genera facturatxt y facturapdf)
PYFEPDFEXE --prueba --mostrar --grabar
2
Realizar una prueba de DBF (genera encabezadbf detallesdbf ivadbfpermisodbf tributodbf cbteasocdbf datodbf y facturapdf)
PYFEPDFEXE --prueba --dbf --mostrar --grabar
3
Cargar archivo de entrada (leer facturatxt y generar facturapdf) mostrando la factura
PYFEPDFEXE --cargar --mostrar
4
Cargar tablas DBF (leer encabezadbf detallesdbf ivadbf permisodbftributodbf cbteasocdbf datodbf y generar facturapdf) imprimiendo la factura
PYFEPDFEXE --cargar --dbf --mostrar --imprimir
5
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYFEPDF_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico
Herramienta PyFEPDFEXE por liacutenea de comando (consola) 92
PYFEPDFEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Formato de Intercambio PDF
Para lenguajes donde no es posible utilizar objetos COM como en algunas versiones de COBOL sedesarrolloacute una interfase de texto para poder generar PDF con esta herramienta Adicionalmente laherramienta para generacioacuten de PDF soporta manejo por tablas DBF Estas tablas pueden ser generadas concualquier libreriacutea o aplicacioacuten compatible (dBase FoxPro Clipper incluso pueden ser abiertas con planillasde caacutelculo)
Los nombres de los campos y funcionamiento son los mismos entre los meacutetodos y archivos de texto perorecortados por compatibilidad con DBF
En este caso se puede utilizar un uacutenico archivo de texto (facturatxt) o varias tablas DBF (ver meacutetodorelacionado a la interfaz COM para maacutes informacioacuten) Los tipos de registros son
0 para encabezado (encabezadbf) - meacutetodo CrearFactura y EstablecerParametrobull 1 para detalles (detalle dbf) - meacutetodo AgregarDetalleItembull 2 para permisos (permisosdbf) - meacutetodo AgregarPermisobull 3 para comprobantes asociados (comprobadbf) - meacutetodo AgregarCmpAsocbull 4 para iva (ivadbf) - meacutetodo AgregarIvabull 5 para tributos (tributodbf) - meacutetodo AgregarTributobull 6 para datos opcionales (AFIP) -no utilizado-bull 9 para datos adicionales (datosdbf) -soacutelo PDF- - meacutetodo AgregarDatobull
A continuacioacuten se detalla el formato de cada registro y una breve descripcioacuten
Encabezado PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 1 tiporeg N(10) valor 0 (encabezado)
webservice Alfanumerico 6 2 webserviceC(6) wsfe wsbfe wsfex etc
fecha_cbte Alfanumerico 8 8 fechacbteC(8) ej 20100308
tipo_cbte Numerico 2 16 tipocbteN(20)
ej 1 para Facturas A (seguacuten tabla deparaacutemetros de AFIP Mercado Interno Exportacioacuten)
punto_vta Numerico 5 18 puntovtaN(40) ej 0001
cbte_nro Numerico 8 23 cbtenroN(80) ej 00000001
tipo_expo Numerico 1 31 tipoexpoN(10)
tipo de exportacioacuten (1 bienes 2 servicios 3otros)
permiso_existente Alfanumerico 1 32 permisoexiC(1) permiso de exportaioacuten S o N o nulo
pais_dst_cmp Numerico 3 33
Formato de Intercambio PDF 93
paisdstcmpN(30)
coacutedigo de paiacutes seguacuten tabla de paraacutemetros deAFIP (200 ARGENTINA 203 BRASIL212 ESTADOS UNIDOS etc)
nombre_cliente Alfanumerico 200 36 nombreclieC(200)
tipo_doc Numerico 2 236 tipodocN(20)
coacutedigo de tipo de documento seguacuten tablaAFIP WSFEv1 (80 CUIT)
nro_doc Numerico 11 238 nrodocN(110)
nuacutemero de documento (DNI CUIT etc) -ocorresponde a cuit_pais_cliente enexportacioacuten-
domicilio_cliente Alfanumerico 300 249 domicilioc M
id_impositivo Alfanumerico 50 549 idimpositiC(50)
categoriacutea frente al IVA (Resp InscriptoMonotributo etc) o identificacioacutenimpositiva en paiacutes destino (por ej CNJPRUC VAT ID etc)
imp_total Importe 153 599 imptotalN(153) importe total (con hasta 3 decimales)
imp_tot_conc Importe 153 614 imptotconcN(153)
importe conceptos no gravados (con hasta 3decimales)
imp_neto Importe 153 629 impnetoN(153)
importe neto sujeto a caacutelculo de IVA (conhasta 3 decimales)
impto_liq Importe 153 644 imptoliqN(153)
importe de IVA liquidado (con hasta 3decimales)
impto_liq_nri Importe 153 659 imptoliqnrN(153)
importe de IVA liquidado a RNI (con hasta 3decimales) -obsoleto-
imp_op_ex Importe 153 674 impopexN(153)
importe de operaciones exentas de IVA (conhasta 3 decimales)
impto_perc Importe 15 689 imptopercN(152)
importe de percepciones (con hasta 3decimales) -obsoleto ver tributos-
imp_iibb Importe 153 704 impiibbN(153)
mporte de ingresos brutos (con hasta 3decimales) -obsoleto ver tributos-
impto_perc_mun Importe 153 719 imptopercmN(153)
importe de percepciones municipales (conhasta 3 decimales) -obsoleto ver tributos-
imp_internos Importe 153 734 impinternoN(153)
importe de impuestos internos (con hasta 3decimales) -obsoleto ver tributos-
imp_trib Importe 153 749 imptribN(153)
importe total de impuestos y tributos (noincluye IVA)
moneda_id Alfanumerico 3 764 monedaidC(3)
coacutedigo de moneda seguacuten tabla de paraacutemetrosde AFIP (PES peso DOL doacutelares etc)
moneda_ctz Importe 106 767 monedactzN(106)
cotizacioacuten de la moneda (con hasta 6decimales)
obs_comerciales Alfanumerico 1000 777 obscomerci M observaciones comercialesobs_generales Alfanumerico 1000 1777 obsgeneral M observaciones generales
forma_pago Alfanumerico 50 2777 formapagoC(50)
descripcioacuten de la forma de pago (ejEfectivo)
incoterms Alfanumerico 3 2827 teacutermino de comercio exterior (ej FOB)
Encabezado PDF 94
incotermsC(3)
incoterms_ds Alfanumerico 20 2830 incotermsdC(20)
descripcioacuten de termino de comercio exterior(Free on board)
idioma_cbte Alfanumerico 1 2850 idiomacbteC(1)
idioma del comprobante seguacuten tabla deparaacutemetros de AFIP (1 espantildeol etc)
zona Alfanumerico 5 2851 zona C(5) -no utilizado-
fecha_venc_pago Alfanumerico 8 2856 fechavencpC(8)
fecha de vencimiento del pago (soloservicios)
presta_serv Numerico 1 2864 prestaservN(10) prestacioacuten de servicio (S o N)
fecha_serv_desde Alfanumerico 8 2865 fechaservdC(8) fecha de inicio del servicio facturado
fecha_serv_hasta Alfanumerico 8 2873 fechaservhC(8) fecha de finalizacioacuten del servicio facturado
cae Alfanumerico 14 2881 cae C(14) Coacutedigo de Autorizacioacuten Electroacutenicootorgado por AFIP
fecha_vto Alfanumerico 8 2895 fechavto C(8) fecha de vencimiento del CAE otorgado porAFIP
resultado Alfanumerico 1 2903 resultado C(1) resultado A aceptado R rechazado(respuesta AFIP)
reproceso Alfanumerico 1 2904 reprocesoC(1)
S si hubo reprocesamiento N si esprocesamiento original (respuesta AFIP)
motivos_obs Alfanumerico 1000 2905 motivosobs M
coacutedigo o descripcioacuten del motivo de rechazo uobservacioacuten del comprobante ej 11 -numeracioacuten 02 cuit no autorizada (respuestaAFIP)
id Numerico 15 3905 id N(150) identificador secuencial de la factura (usar 0)
telefono_cliente Alfanumerico 50 3920 telefonoclC(50)
localidad_cliente Alfanumerico 50 3970 localidadcC(50)
provincia_cliente Alfanumerico 50 4020 provinciacC(50)
formato_id Numerico 10 4070 formatoidN(100) -no utilizado-
email Alfanumerico 100 4080 email C(100) destinatario del PDFpdf Alfanumerico 100 4180 pdf C(100) ruta y nombre de archivo PDF a generar
err_code Alfanumerico 6 4280 errcode C(6) coacutedigo de error informado por AFIP (EjfexerrorErrCode=505)
err_msg Alfanumerico 1000 4286 errmsg M mensaje de error informado por AFIP (EjfexerrorErrMsg=Error de Lockeo)
Dato_adicional1 Alfanumerico 30 5286 datoadic01C(30) datos extra optativos
Dato_adicional2 Alfanumerico 30 5316 datoadic02C(30) datos extra optativos
Encabezado PDF 95
Dato_adicional3 Alfanumerico 30 5346 datoadic03C(30) datos extra optativos
Dato_adicional4 Alfanumerico 30 5376 datoadic04C(30) datos extra optativos
Campos extra (por compatibilidad con otras herramientas y formatos)
Nombre Tipo Long Pos DBF Descripcioacuten
descuento Importe 153 5405 descuentoN(153)
importe general de descuento (no recomendadousar descuento por itemdetalle)
cbt_desde Numerico 8 5420 cbtdesdeN(80)
nuacutemero de comprobante inicial del lote (usarcbte_nro)
cbt_hasta Numerico 8 5428 cbthastaN(80)
nuacutemero de comprobante final del lote (usarcbte_nro)
concepto Numerico 1 5436 conceptoN(10)
1 productos 2 servicios 3 productos + servicios(ver presta_serv)
no_usar Importe 153 5437 nousarN(153) -reservado-
imp_iva Importe 153 5452 impivaN(153) iacutedem impto_liq
emision_tipo Alfanumerico 4 5467 emisiontipC(4) CAE o CAEA
imp_subtotal Importe 153 5471 impsubtotaN(153)
se calcula internamente si no es pasado imp_neto+ imp_tot_conc + imp_op_ex - descuento(subtotal sin IVA ni otros tributos)
cat_iva Numerico 2 5486 cativa N(20) -reservado-NOTA estos campos pueden no utilizarse o tener el mismo valor que los campos originales estaacuten paracontemplar casos especiales y en general no deben utilizarse
Detalle Item PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 1
codigo Alfanumerico 30 2 codigoC(30) coacutedigo del artiacuteculo
qty Importe 122 32 qty N(122) cantidad (con 2 decimales)
umed Numerico 2 44 umed N(20) coacutedigo de unidad de medida seguacuten tabla de paraacutemetrosAFIP WSMTXCA (ej 1 - kg)
precio Importe 123 46 precioN(123) importe unitario (con hasta 3 decimales)
importe Importe 143 58 importeN(143) importe subtotal (con hasta 3 decimales)
iva_id Numerico 5 72 ivaid N(50) coacutedigo de aliacutecuota de IVA seguacuten tabla de paraacutemetrosAFIP WSFEv1 WSMTXCA (ej 5 - IVA RI Tasa
Detalle Item PDF 96
General 21 )
ds Alfanumerico 4000 77 ds M descripcioacuten del artiacuteculo (usar ltbrgt para salto delinea)
ncm Alfanumerico 15 4077 ncm C(15) coacutedigo habilitado del Nomenclador Comuacuten deMercosur -soacutelo WSBFEv1-
sec Alfanumerico 15 4092 sec C(15) coacutedigo habilitado de la Secretariacutea de Comercio-reservado-
bonif Importe 15 4107 bonifN(152)
importe de descuento (con 2 decimales) para estearticulo
imp_iva Importe 15 4122 impivaN(152) importe liquidado de IVA para este articulo
despacho Alfanumerico 20 4137 despachoC(20) -soacutelo importacioacuten-
u_mtx Numerico 10 4157 umtxN(100) unidades MTX
cod_mtx Alfanumerico 30 4167 codmtxC(30) coacutedigo de barras MTX
dato_a Alfanumerico 15 4197 datoa C(15) dato extra optativodato_b Alfanumerico 15 4212 datob C(15) dato extra optativodato_c Alfanumerico 15 4227 datoc C(15) dato extra optativodato_d Alfanumerico 15 4242 datod C(15) dato extra optativodato_e Alfanumerico 15 4257 datoe C(15) dato extra optativoNota en los campos numeacutericos (archivo de texto) para usar maacutes de los decimales especificados de manerapredeterminada indicar el punto explicitamente por ej cantidad = 0123456 para 6 decimales encantidad En la estructura del DBF cada programa puede cambiar la cantidadad de decimales
Importante para Facturas B de manera similar a las facturas tradicionales el IVA no debe estardiscriminado (enviar el precio unitario y subtotal final IVA incluido) y se debe enviar NULL en imp_iva
IVA PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 4
iva_id Numerico 5 2 ivaid N(50) tipo de aliacutecuota (ver tablas de paraacutemetros deWSFEv1 por ej 5 para 21)
base_imp Importe 153 7 baseimpN(153)
base imponible (neto gravado) para estaaliacutecuota
importe Importe 153 22 importe N(153) importe IVA liquidado para esta aliacutecuotaTributo PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 valor 5
IVA PDF 97
tiporegN(10)
tributo_id Numerico 5 2 tributoidN(50)
tipo de tributo (ver tablas de paraacutemetros de WSFEv1por ej 2 para impuestos provinciales)
desc Alfanumerico 100 7 desc C(100) descripcioacuten (por ej IIBB prov de BsAs)
base_imp Importe 153 107 baseimpN(153) base imponible para este impuesto (pude ser 0 nulo)
alic Importe 15 122 alic N(152) aliacutecuota (porcentaje por ej 3)
importe Importe 153 137 importeN(153) importe liquidado para este impuesto
Comprobante Asociado PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 3cbte_tipo Numerico 3 2 cbtetipo N(30) tipo de comprobante asociado (iacutedem encabezado)
cbte_punto_vta Numerico 4 5 cbtepuntovN(40) punto de venta
cbte_nro Numerico 8 9 cbtenro N(80) nuacutemero de comprobantePermisos PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea)- usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 2
id_permiso Alfanumerico 16 2 idpermisoC(16)
identificador del permiso de exportacioacuten ej99999AAXX999999A
dst_merc Numerico 3 18 dstmercN(30) coacutedigo de paiacutes de destino seguacuten tabla de AFIP
Datos PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 16 tiporeg N(10) valor 9campo Alfanumerico 30 17 campo C(30) nombre del campo en la plantilla PDFvalor Alfanumerico 1000 47 valor M contenido para el campo en la plantilla PDFpagina Alfanumerico 3 1047 pagina C(3) P primera U ultima T todasEste tipo de registro es opcional resultados similares se pueden lograr con el archivo de configuracioacuten(receini seccioacuten [PDF]) meacutetodo del Componente AgregarDato o directamente con el disentildeador visual(modificando la plantilla facturacsv)
Configuracioacuten PyFEPDF RECEINI
De manera similar a las otras herramientas PyFEPDF puede configurarse por el archivo de configuracioacutenRECEINI con las siguientes opciones predeterminadas
Tributo PDF 98
[FACTURA]ARCHIVO=tipoletranumeroFORMATO=facturacsvDIRECTORIO=PAPEL=letterORIENTACION=portraitDIRECTORIO=SUBDIRECTORIO=LOCALE=Spanish_Argentina1252FMT_CANTIDAD=06FMT_PRECIO=03CANT_POS=izqENTRADA=facturatxtSALIDA=facturapdf
[PDF]LOGO=fpdfpngEMPRESA=Empresa de PruebaMEMBRETE1=Direccion de PruebaMEMBRETE2=Capital FederalCUIT=CUIT 30-00000000-0IIBB=IIBB 30-00000000-0IVA=IVA Responsable InscriptoINICIO=Inicio de Actividad 01042006
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalle = detallesdbfPermiso = permisodbfDato = datodbf
Seccioacuten [FACTURA]
Controla la generacioacuten del PDF (si no se especifica campo PDF en tabla encabezado)
ARCHIVO nombre de archivo PDF a generar por ej incluyendo tipoletranumerobull FORMATO formato del PDF a generar por ej en planilla facturacsvbull DIRECTORIO directorio donde almacenar los archivos PDFbull SUBDIRECTORIO nombre de la carpeta a generar (una por diacutea de manera predeterminada)bull LINEAS_MAX cantidad de lineas para el detalle (artiacuteculos) por defecto 24bull PAPEL legal A4 letterbull ORIENTACION portrait landscape (apaisada)bull LOCALE configuracioacuten regional (Spanish_Argentina1252 en Windows es_ARutf8 en Linux)bull FMT_CANTIDAD formato de cantidad (04 para 4 decimales)bull FMT_PRECIO formato de precio unitario (03 para 3 decimales)bull CANT_POS posicioacuten de la columna cantidad (izq o der)bull ENTRADA nombre del archivo de intercambio (facturatxt)bull SALIDA nombre del archivo a generar (dejar en blanco para generar uno distinto seguacuten laconfiguracioacuten ARCHIVO)
bull
COPIAS cantidad de copias en el PDF (Original Duplicado Triplicado etc)bull
Configuracioacuten PyFEPDF RECEINI 99
Seccioacuten [PDF]
Controla campos del PDF a personalizar (si no se especifican los campo texto en tabla formato del PDF)
LOGO archivo con imagen logotipo por ej serpientepngbull EMPRESA ej Empresa de Pruebabull MEMBRETE1 ej Direccion de Pruebabull MEMBRETE2 ej Capital Federalbull CUIT CUIT 20-26756539-3bull IIBB IIBB 20-26756539-3bull IVA IVA Responsable Inscriptobull INICIO Inicio de Actividad 01042006bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull Dato = datodbfbull
Campo Subtotal
Dado que en general la columna importe deberiacutea mostrar Subtotal cIVA por similitud con el PDF quegenera AFIP por comprobantes en linea por disentildeo (actualizacioacuten 108b)
Si es A o M se imprime el subtotal SIN IVAbull Si es B o C se imprime el subtotal CON IVAbull
En el caso de factura A debe sumar los items sin el IVA ya que en la ultima hoja se le suma el IVA alsubtotal
Igualmente el campo subtotal podriacutea sobre-escribirse utilizando el meacutetodo AgregarDato(campovalor pagina) o el tipo de registro para datos adicionales En campo = subtotal el valor a imprimiren cada hoja y pagina el nro de paacutegina (T todas P primera U ultima) Se podriacutea agregar el dato paratodas las paginas vacio y para la uacuteltima con el valor que sea necesario (en ese orden)
Disentildeador Visual PyFEPDF
La herramienta incluye el progama designerexe para modificar visualmente los disentildeos de factura
Los archivos de entrada estaacuten son planillas CSV describiendo el disentildeo Al abrilos el disentildeador muestra laplantilla con los elementos donde se ubicaraacuten los futuros valores de cada factura
La barra de herramientas cuenta con botones para
Abrir guardar e imprimir (vista previa) las plantillasbull
Seccioacuten [PDF] 100
Agregar eliminar y duplicar elementosbull Buscar elementos por nombre o por textobull
Sobre un elemento con doble click izquierdo se abre un dialogo para editar el texto y con click derecho seabre un dialogo con la ventana de propiedades Es posible seleccionar muacuteltiples elementos manteniendopresionado shift y click izquierdo Para mover los elementos se puede usar las teclas de flechas o arrastrar loselementos
Ver a continuacioacuten los tipos de elementos y su definicioacuten
A modo de ejemplo se muestra un pantallazo del Disentildeador Visual con el elemento logo seleccionadoeditando sus propiedades
Para ejecutarlo simplemente ir al directorio de la interfaz y correr designerexe
Tipos de elementos para PyFEPDF
Para el disentildeo del PDF es posible establecer los siguientes tipos de campo (elementos graacuteficos)
Texto (T) con tipo de letra (fuente) tamantildeo formato (italico negrita subrayado) tamantildeo yalineacioacuten
bull
Liacuteneas (L) y Cuadros (B)bull Imaacutegenes (I) en formato PNG o JPGbull Coacutedigo de Barras (CB) en formato Entrelazado 2 de 5bull Codigo QR (I) (Requerido por AFIP a partir del 01032021 ver cronograma)bull
Definicioacuten de elementos para PyFEPDF
Las columnas de la planilla (facturacsv) o estructura de la tabla formato para definir los elementos graacuteficoses
name (alfanumeacuterico) nombre del campobull type (alfanumeacuterico) tipo del campo T L I B CBbull x1 (numeacuterico) coordenada horizontal izquierda (en mm)bull y1 (numeacuterico) coordenada vertical superior (en mm)bull x2 (numeacuterico) coordenada horizontal derecha (en mm)bull y2 (numeacuterico) coordenada vertical inferior (en mm)bull font (alfanumeacuterico) nombre de la tipografiacutea (fuente)bull size (numeacuterico) tamantildeo en puntos del textobull bold (verdaderofalso) estilo negrita para el texto (1 o 0)bull italic (verdaderofalso) estilo cursiva (itaacutelica) para el texto (1 o 0)bull underline (verdaderofalso) estilo subrayado para el texto (1 o 0)bull foreground (numeacuterico) color RGB de dibujobull backgroud (numeacuterico) color RGB de relleno del fondo (si aplica al elemento)bull align (alfanumeacuterico) alineacioacuten I izquierda D derecha C centradobull text (alfanumeacuterico) texto estaacutetico o foacutermulabull priority (numeacuterico) orden z en el que se dibujan los elementos (a menor prioridad se dibuja primero)bull
Estilos HTML Adicionalmente los estilos negrita itaacutelica y subrayado pueden establecerse en tiempo deejecucioacuten encerrando todo el texto con el tag html correspondiente (en el orden indicado) Ej
Disentildeador Visual PyFEPDF 101
ltBgttexto en negritaltBgtbull ltIgttexto en cursivaltIgtbull ltUgttexto subrayadoltUgtbull ltBgtltIgtltUgttexto en negrita cursiva y subrayadoltUgtltIgtltBgtbull
PyI25 Generador de Coacutedigos de Barras
Utilitario PYI25EXE (py25py) para generar los coacutedigos de barras Interleaved 2 of 5 (Entrelazado 2 de 5)seguacuten Resolucioacuten General 170204
Ver Descargas para descargar el instalador
Los datos a consignar son (ver RG170204 Art 1 Anexo 1)
Clave Unica de Identificacioacuten Tributaria (CUIT) del emisor de la factura (11 caracteres)bull Coacutedigo de tipo de comprobante (3 caracteres)bull Punto de venta (5 caracteres)bull Coacutedigo de Autorizacioacuten de Electroacutenica (CAE) o Coacutedigo de Autorizacioacuten de Impresioacuten (CAI) (14caracteres)
bull
Fecha de vencimiento del CAE CAI (8 caracteres)bull Diacutegito verificador (1 caraacutecter) ver rutinabull
El utilitario genera una imaacutegen en formato PNG o JPG funciona tanto de liacutenea de comando consola (DOS)como por interfaz COM (automatizacioacuten DLL similar a OCX) y es uacutetil para facturas electroacutenicas otradicionales (autoimpresores o imprentas)
Imaacutegen de Ejemplo de Coacutedigo de Barras para CAE
Importante De generar imaacutegenes para imprimir es recomendado respetar la resolucioacuten de la impresora (Laacutesero Chorro de tinta no pueden usarse matriz de punto) por ej con una resolucioacuten por lo menos tres vecesmayor que la utilizada en pantalla
Nota Nuestro generador de PDF ya contempla generar los coacutedigos de barra para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PYI25EXE (utilitario por linea de comando)
Opciones
--barras a continuacioacuten se indica el coacutedigo de barras en formato numeacutericobull --noverificador deshabilitar caacutelculo de digito verificadorbull --archivo a continuacioacuten se indica el nombre del archivo de salidabull
Ejemplo de uso (generar el archivo pruebapng)
PYI25EXE --barras 202675653930240016120303473904220110528 --mostrar --archivo pruebapng
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYI25_cliEXE queesta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primer como
Definicioacuten de elementos para PyFEPDF 102
segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and is startedautomatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico PYI25EXEpuede estar compilado para ser registrado en Windows (componente para VBVFP y similares)
Objeto PYI25 (interfaz COM)
Objeto PyI25 (registrar PYI25DLL)
Meacutetodos
DigitoVerificadorModulo10(codigo) recibe el codigo de barras en formato numeacutericodevuelve el diacutegito verificador en base 10
bull
GenerarImagen(codigo archivo anchobase ancho alto extension )recibe el codigo de barras en formato numeacuterico nombre de archivo de salida tamantildeos y formato deimagen (PNG o JPEG) y genera el codigo de barras especificado
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyI25 As Object
Set PyI25 = CreateObject(PyI25)
cuit tipo_cbte punto_vta cae fch_venc_caebarras = 202675653930240016120303473904220110529 calculo digito verificadorbarras = barras + PyI25DigitoVerificadorModulo10(barras)
genero imagen en png aspecto 1x para ver en pantalla o por mailok = PyI25GenerarImagen(barras Cbarraspng)
formato en jpg aspecto 3x maacutes ancho para imprimir o incrustarok = PyI25GenerarImagen(barras cbarrasjpg 9 0 90 JPEG)
PyQR Generador de Coacutedigos QR
Utilitario PYQREXE (pyqrpy) para generar los coacutedigos QR seguacuten RG48922020
Cronograma de Implementacioacuten
Para responsables inscriptos en el impuesto al valor agregado que hayan efectuado operaciones (gravadasexentas y no gravadas) declaradas en el impuesto durante el antildeo calendario 2020 por un importe total neto deimpuestos y tasas
11 Superior a PESOS DIEZ MILLONES ($10000000-) desde el 1 de marzo de 2021
12 Superior a PESOS DOS MILLONES ($2000000-) e inferior o igual a PESOS DIEZ MILLONES ($10000000-) desde el 1 de abril de 2021
13 Superior a PESOS QUINIENTOS MIL ($500000-) e inferior o igual a PESOS DOS MILLONES ($2000000-) desde el 1 de mayo de 2021
PYI25EXE (utilitario por linea de comando) 103
2 Para el resto de los responsables inscriptos en el impuesto al valor agregado sujetos exentos ante dichogravamen y pequentildeos contribuyentes inscriptos en el Reacutegimen Simplificado (Monotributo) a partir del 1junio de 2021
Los datos a consignar son (ver QR especificaciones)
Fecha de emisioacutenbull CUIT del emisorbull Punto de ventabull Tipo de Comprobantesbull Nuacutemero de Comprobantebull Importe totalbull Monedabull Cotizacioacutenbull Tipo Documento Receptor (de corresponder)bull Nuacutemero de Documento de Receptor (de corresponder)bull Coacutedigo del Tipo de Autorizacioacutenbull Coacutedigo de Autorizacioacutenbull
Ejemplo Visual Basic script pyafipwsblobdevelopejemplospyqrpyqrvbs
Ejemplo Visual Basic claacutesico
Dim pyqr As Object
Set pyqr = CreateObject(PyQR)
Establecer tipo de imagen (PNG o JPEG)PyQRExtension = JPEG
Generar un nombre de archivo temporal para la imagenarchivo = pyqrCrearArchivo
Alternativo Especificar ubicacioacuten y extensioacutenpyqrarchivo = CQRgeneradopyqrjpg
DebugPrint archivo
ver = 1fecha = 2020-10-13cuit = 30000000007pto_vta = 10tipo_cmp = 1nro_cmp = 94importe = 12100moneda = DOLctz = 65tipo_doc_rec = 80nro_doc_rec = 20000000001tipo_cod_aut = Ecod_aut = 70417054367476
genero imagen en png con el codigo qr
url = pyqrGenerarImagen(ver fecha cuit pto_vta tipo_cmp nro_cmp _ importe moneda ctz tipo_doc_rec nro_doc_rec _ tipo_cod_aut cod_aut)
PyQR Generador de Coacutedigos QR 104
DebugPrint url
Paraacutemetros por liacutenea de comandos
--datos recibe los datos a procesar version fecha cuit pto_vta tipo_cmp nro_cmp importemoneda ctz tipo_doc_rec nro_doc_rec tipo_cod_aut cod_aut
bull
--prueba genera un QR de muestrabull --archivo permite especificar una ruta (de lo contrario usa un archivo temporal)bull --mostrar abre el archivo para visualizar la imagenbull
Ejemplo por liacutenea de comando
Linux
python pyqrpy --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
Windows
pyqrexe --archivo qrjpg --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
En windows usar pyqrexe en vez de python pyqrpy
Imaacutegen de Ejemplo de Coacutedigo QR
PyQR Generador de Coacutedigos QR 105
Nota Nuestro generador de PDF ya contempla generar los coacutedigos QR para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PyEmail Envio de correo electroacutenico
Herramienta para enviar correos electroacutenicos incluyendo por ej adjunto PDF de con factura electroacutenica
Soporta servidores SMTP con y sin autenticacioacuten
Proacuteximamente soporte para correos con contenido HTML e imagenes de factura embebida
PyEmail Envio de correo electroacutenico 106
PYEMAILEXE utilitario de correo
Para utilizar esta herramienta debe tener configurado la seccioacuten [EMAIL] en el receini
Ejemplo desde linea de comando
PYEMAILEXE motivo reingartgmailcom mensaje FacturaA0002-00117826pdf
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYEMAIL_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacutericoPYEMAILEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Objeto PyEmail (interfaz COM)
Objeto PyEmail (registrar PyEmailDLL)
Meacutetodos
Conectar(servidor usuario clave) recibe el nombre del servidor a conectarse usuario y contrasentildea(opcional)
bull
Enviar(remitente motivo destinatario mensaje archivo) envia el correo electroacutenico con los datosproporcionados
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyEmail As Object
Set PyEmail = CreateObject(PyEmail)
Primer paso conexioacuten al servidor (por unica vez)servidor = mailsistemasagilescomarusuario = norespondernsiscomarclave = 1238478puerto = 465ok = PyEmailConectar(servidor usuario clave)
Envio el o los correos (repetir por cada FE)remitente = norespondersistemasagilescomardestinatario = marianosistemasagilescomarmensaje = Se envia factura electronica adjuntaarchivo = CFACTURAPDF
ok = PyEmailEnviar(remitente motivo destinatario mensaje archivo)
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361)
Con la interfaz se provee un utilitario para generar los archivos requeridos por el aplicativo SIRED (SIAP) dela Resolucioacuten General 136102 referente al almacenamiento digital de los comprobantes emitidos (Libro
PYEMAILEXE utilitario de correo 107
Ventas Detalle y Cabeceras de Factura)
El formato de entrada es una planilla csv similar al PyRece respetando los tipos de datos y coacutedigos requeridospor los webservices con las siguientes columnas tipo_cbte punto_vta cbt_numero fecha_cbte tipo_docnro_doc imp_neto impto_liq imp_total cae fecha_vto nombre
Ejemplo de uso
CD CPYAFIPWSRG1361EXE planillacsv
Generaraacute los archivos
VENTAS_200902txtbull CABECERA_200902txtbull DETALLE_200902txtbull
Para maacutes informacioacuten ver RG136102 de AFIP
Disentildeo de registro (archivos de texto)bull Guia Temaacuteticabull
Ejemplo
Ejemplo en Visual Basic claacutesico
sired = CreateObject(SIRED)
creo una factura de ejemplotipo_cbte = 2punto_vta = 4000fecha = 20150721concepto = 3tipo_doc = 80nro_doc = 30000000007cbte_nro = 12345678imp_total = 12200imp_tot_conc = 300imp_neto = 10000imp_iva = 2100imp_trib = 100imp_op_ex = 200imp_subtotal = 10000fecha_cbte = fechafecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fechafecha_serv_hasta = fechamoneda_id = PESmoneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libre
nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361) 108
id_impositivo = Responsable Inscriptoforma_pago = 30 diasincoterms = FOBidioma_cbte = 1motivo = 11
cae = nullfch_venc_cae = null
siredCrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fch_venc_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivo)
agrego comprobantes asociado
tipo = 91pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)tipo = 5pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)
tributo_id = 99desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100siredAgregarTributo(tributo_id desc base_imp alic importe)
iva_id = 5 21base_imp = 100importe = 21siredAgregarIva(iva_id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890123codigo = P0001ds = Descripcion del producto P0001qty = 100umed = 7precio = 10000bonif = 000iva_id = 5imp_iva = 2100importe = 12100despacho = uNordm 123456siredAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
siredAgregarDato(prueba 1234)
id_factura = siredGuardarFactura()
siredEstablecerParametro(cae 61123022925855)siredEstablecerParametro(fch_venc_cae 20110320)
Ejemplo 109
siredEstablecerParametro(motivo_obs )ok = siredActualizarFactura(id_factura)
Otros Servicios WEB y herramientas similares de AFIP
Constatacioacuten de Comprobantes
WSCDC es la Interfaz para los Servicios Web para verificar en forma dinaacutemica si los comprobantes recibidosse encuentran autorizados por la AFIP Ver manual especiacutefico en ConstatacionComprobantes
Padroacuten de Contribuyentes
Herramienta para consultar el archivo completo de la condicioacuten tributaria de los contribuyentes y responsables(RG1817) Ver manual especiacutefico en PadronContribuyentesAFIP
Coacutedigo de Trazabilidad de Granos
WSCTGv2 es la Interfaz para generar Coacutedigo de Trazabilidad de Granos AFIP (RG2806 RG3113 RG3493)Ver manual especiacutefico en CodigoTrazabilidadGranos
Liquidacioacuten Primaria de Granos
WSLPG es la Interfaz para autorizar y ajustar Liquidaciones Primarias de Granos (RG34192012) Vermanual especiacutefico en LiquidacionPrimariaGranos
Consulta de Operaciones Cambiarias
WSCOC es la Interfaz para Consultas de Operaciones (moneda extranjera) Ver manual enConsultaOperacionesCambiarias
wDigDepFiel Depositario Fiel
Servicio Web de AFIP para Aviso de Recepcioacuten y Aceptacioacuten de la Digitalizacioacuten de Documentos por partede los Prestadores de Servicios de Archivos y Digitalizacioacuten (PSAD) y Aviso de Digitalizacion deDocumentos por parte de los Despachantes o de los Prestadores de Servicios de Archivos y Digitalizacioacuten(PSAD) -
Sujetos Alcanzados ver Resolucioacuten General 25702009
Actualmente la interfaz expone las funcionalidades de este webservice
Aviso de Digitalizacioacutenbull Aviso de Recepcioacuten y Aceptacioacutenbull Meacutetodo Dummy para verificacioacuten de funcionamientobull
Ejemplo Interfaz COM wDigDepFiel
De igual manera que el resto de los servicios web el web service de depositario fiel puede ser invocado desdelenguajes visuales y no visuales (en windows) utilizando la interfaz COM
Otros Servicios WEB y herramientas similares de AFIP 110
Ejemplo en Visual Basic (similar para Visual FoxPro Delphi etc)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet wDigDepFiel = CreateObject(wDigDepFiel) Setear tocken y sing de autorizacioacuten (pasos previos)wDigDepFieltoken = WSAAtokenwDigDepFielsign = WSAAsign
CUIT del emisor (debe estar registrado en la AFIP)wDigDepFielcuit = 20267565393
Conectar al Servicio Web de Depositario Fiel (homologacioacuten)ok = wDigDepFielConectar(httpstestdiaafipgovarDiaWswDigDepFielwDigDepFielasmx)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)wDigDepFielDummyDebugPrint appserver status wDigDepFielAppServerStatusDebugPrint dbserver status wDigDepFielDbServerStatusDebugPrint authserver status wDigDepFielAuthServerStatus
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393codigo = 000 carpeta completa 001 carpeta adicional FechaHora en formato ISO 2010-06-07T002351750000fecha_hora_acept = Format(Now() yyyy-MM-dd) amp T amp _ Format(Now() hhmmss) amp 000000ticket = 1234errCode = wDigDepFielAvisoRecepAcept(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie _ codigo fecha_hora_acept ticket)DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoRecepAcept Coacutedigo Error amp wDigDepFielCodError
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000 1234567890123456cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393cuit_ata = 20267565393codigo = 000 carpeta completa 001 carpeta adicionalticket = 1234url = httpwwwexamplecomhashing = db1491eda47d78532cdfca19c62875aade941dc2
inicializo aviso limpio datos (familias)wDigDepFielIniciarAvisocodigo = 02cantidad = 1wDigDepFielAgregarFamilia codigo cantidadcodigo = 03cantidad = 3wDigDepFielAgregarFamilia codigo cantidad
cantidad_total = 4
Ejemplo Interfaz COM wDigDepFiel 111
errCode = wDigDepFielAvisoDigit(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie cuit_ata _ codigo url ticket hashing cantidad_total)
DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoDigit Coacutedigo amp wDigDepFielCodError
Otros Servicios Web relacionados de otros organismos
Remito Electroacutenico (COT ARBA)
Interfaz para Servicio Web Coacutedigo de Operaciones de Traslado (COT) Remito Electronico correspondienteal articulo 41 del Coacutedigo Fiscal que establece la obligacioacuten de amparar el traslado o transporte de bienes en elterritorio de la provincia de Bs As Ver manual especiacutefico en RemitoElectronicoCotArba
Trazabilidad de Medicamentos (ANMAT)
Interfaz para Servicio Web Coacutedigo de Trazabilidad de Medicamentos (SOAP) correspondiente a laResolucioacuten 4352011 del Ministerio de Salud y Disposicioacuten 36832011 de ANMAT Sistema Nacional deTrazabilidad de Medicamentos que deberaacuten implementar las personas fiacutesicas o juriacutedicas que intervengan en lacadena de comercializacioacuten distribucioacuten y dispensacioacuten de especialidades medicinales incluidas en elRegistro de Especialidades Medicinales SNT Especificacioacuten Teacutecnica V2 Ver manual especiacutefico enTrazabilidadMedicamentos
Trazabilidad de Precursores Quiacutemicos (SEDRONAR)
Interfaz para Servicio Web Trazabilidad de Precursores Quiacutemicos TrazaMedSDRN (SOAP) para informarmovimientos de Sustancias Quiacutemicas Controladas Decreto 109596 modificado por Decreto 116100Sistema Nacional de Trazabilidad modulo de Precursores Quiacutemicos (RENPRE SEDRONAR PAMI INSSJP)que deberaacuten implementar el operador de precursores quiacutemicos obtencioacuten de nuacutemero de CUFE (Coacutedigo deUbicacioacuten Fiacutesica de Establecimiento) Entrenamiento y Alineacioacuten de Datos Resolucioacuten 90012 RENPREVer manual especiacutefico en TrazabilidadPrecursoresQuimicos
Certificados
Generacioacuten
Para poder utilizar la interfase se deben tramitar y asociar los certificados de homologacioacutenproduccioacuten en laAFIP Para mas informacioacuten ver Paacutegina principal de Factura Electroacutenica (AFIP)
Crear Pedido CSR con WSAA
A partir de la revisoacuten 1632 (ver Actualizaciones Factura Electroacutenica moacutedulo WSAApy versioacuten 110b) esposible generar el pedido de certificado automaacuteticamente utilizando la opcioacuten --crear_pedido_cert)La herramienta solicitaraacute el CUIT buscaraacute la denominacioacuten del contribuyente en el padroacuten de AFIP ygeneraraacute los archivos necesarios (clave privada y pedido de certificado)
Ejemplo
Otros Servicios Web relacionados de otros organismos 112
CPyAfipWsgt WSAA-cliexe --crear_pedido_certreingartS55t-B~pyafipws$ python wsaapy --crear_pedido_certIngrese un CUIT 20267565393Denominacioacuten seguacuten AFIP REINGART MARIANO ALEJANDROLongitud clave 2048 (bits)Se crearon los archivosclave_privada_20267565393_201609105952keypedido_cert_20267565393_201609105952csr
Tambieacuten pueden especificarse esos datos por linea de comando (CUIT nombrealias empresa y longitud de laclave -2048 bits predeterminados-) ejecutando
WSAA-cliexe --crear_pedido_cert 20267565393 PyAfipWS SHA-2 REINGART MARIANO ALEJANDRO 2048
Nota desde el coacutedigo fuente ejecutar python wsaapyTambieacuten es posible realizar el procedimiento por programa (automatizadamente) llamando a los meacutetodoswsaaCrearClavePrivada(clave_privada) y wsaaCrearPedidoCertificado(cuitempresa nombre pedido_cert)
La herramienta deja listos los archivos respectivos pudiendo subir el pedido de certificado CSR a AFIP (tantoen homologacioacuten como en produccioacuten)
WSASS
Video Explicativo completo (incluyendo WSASS autogestioacuten de certificados en homologacioacuten AFIP) httpswwwyoutubecomwatchv=ietDXvUzVIQ
OpenSSL
Pasos para crear el certificado (maacutes informacioacuten en Instructivo AFIP)
Bajar e instalar OpenSSL para Windows 098i (historico) o 102k o superior (recomendado) Encaso de inconvenientes instalar Redistribuible de Visual C++
bull
Ingresar por liacutenea de comando al directorio de OpenSSL COpenSSLbingtbull Generar la clave privada
openssl genrsa -out empresakey 2048
bull
Generar el pedido (CSR certificate signing request) por liacutenea de comando
openssl req -new -key empresakey -subj C=ARO=[empresa]CN=[nombre]serialNumber=CUIT [nro_cuit] -out empresacsr
Reemplazar [empresa] por el nombre de su empresa Ej Nombre de la empresa tal cualfigura en la consulta de inscripcioacuten ej Empresa S A
diams
Reemplazar [nombre] por su nombre o server hostname Nombre del servicio aplicacioacuten uunidad operativa ej Interfaz PyAfipWs
diams
Reemplazar [nro_cuit] por la CUIT sin guiones de la empresa o programador Ej CUITxxxxxxxxxxx
diams
bull
Enviar el empresacsr a la AFIP para que lo firmen y devuelvan el certificado empresacrtbull
Ejemplo concreto
Crear Pedido CSR con WSAA 113
openssl req -new -key empresakey -subj C=ARO=Mariano ReingartCN=PyAfipWsserialNumber=CUIT 20267565393 -out empresacsr
Generar Certificado CRT
Una vez generado el pedido de certificado CSR (ver puntos anteriores) el traacutemite es
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Nuevo Certificado en el WSASSdiams Nombre simboacutelico del DN un alias del computador fiscal (nombre de fantasiacutea ej PC1)diams Solicitud de certificado en formato PKCS10 abrir con un editor de texto el CSR y copiaraqui el contenido
diams
Presionar Crear DN y obtener certificadodiams Abrir un archivo nuevo y copiar el campo Resultado (este es el certificado usar extensioacutenCRT)
diams
bull
Produccioacuten Ingresar por clave fiscal al servicio online Administracioacuten de Certificados DigitalesIr a Agregar Alias escribir el alias (nombre relacionado al certificado)diams Subir el archivo CSR presionar Agregardiams Luego buscar y descargar el certificado CRTdiams
bull
Con esta interfase no es necesario convertir el certificado en formato pkcs12 ni importarlo alrepositorio de Windows
bull
Para maacutes informacioacuten ver instructivo oficial AFIP
Asociacioacuten
Para poder usar los servicios web se debe asociar el certificado al webservice y CUIT (empresa) que loutilizaraacute
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Crear autorizacioacuten a servicio en el WSASSdiams Seleecionar el Nombre simboacutelico del DN a autorizar (igual que en el paso anterior)diams Revisar el CUIT representado y quien genera la autorizacioacutendiams Seleccionar el Servicio al que desea acceder (por ej wsfe factura electroacutenica)diams Presionar Crear autorizacioacuten de Acceso y revisar el resultadodiams
bull
Produccioacuten en el sitio de AFIP ingresar por clave fiscalEntrar en Administrador de Relaciones de Clave Fiscaldiams Elegir Nueva Relacioacutendiams Presionar BUSCAR para seleccionar el webservice de AFIP por ej ws - FacturacioacutenElectroacutenica
diams
Presionar BUSCAR para seleccionar el Representante seleccionar el nombre del alias delComputador Fiscal (ver seccioacuten anterior)
diams
Confirmardiams
bull
Anteriormente en produccioacuten debiacutea realizarse utilizando el servicio de clave fiscal ARFE - GestionarRelaciones yendo a Realizar una nueva Asociacioacuten completando Empresa Servicio y computador-certificado- que utilizara los webservices
OpenSSL 114
Para maacutes informacioacuten en produccioacuten ver instructivos oficiales de la AFIP
obtener certificado AFIPbull asociar certificado AFIPbull
Es el mismo traacutemite para la renovacioacuten (ns1cmscertexpired Certificado expirado) debesubirse el arcihvo CSR (pedido de certificado) y descargar el nuevo CRT Recordamos que los certificadostienen una vigencia de 2 antildeos en produccioacuten y 1 antildeo en homologacioacuten
Pre-requisitos para Produccioacuten (RECE)
Para poder usar Factura Electroacutenica en Produccioacuten (modo definitivo) ademaacutes de los puntos mencionadosanteriormente dentro de Clave Fiscal servicio online Regimenes de facturacioacuten y registracioacuten(REARRECERFI) es necesario
Adherirse al reacutegimen (realizarlo con anterioridad este traacutemite puede demorar varias semanas)Importante en el Rubro I C) RECE RCEL (Factura Electroacutenica y Factura Electroacutenica en Linea)especificar RECE (no RCEL que es para Comprobantes en linea y Facturador Plus nocontemplados por los webservices)
bull
Dar de alta los nuevos puntos de ventas (uno por cada webservice a utilizar factura nacionalexportacioacuten bono fiscal etc)
bull
Para maacutes informacioacuten ver demo interactiva oficial empadronamiento AFIP
Descargas
OpenSSL para windowsbull Redistribuibe VC++bull
Comprobacioacuten de Autenticacioacuten (WSAA)
Para descartar problemas teacutecnicos de acceso en produccioacuten u homologacioacuten (y verificar la validez delcertificado generado) se puede utilizar la herramienta WSAAEXE WSAA-cliEXE en modo depuracioacuten(sin necesidad de autorizar una factura solo solicitar acceso) yo el mensaje XML devuelto porWSAACallWSAA()
CPYAFIPWSgtWSAA-cliEXE reingartcrt reingartkey wsfe 2400 httpswsaaafipgovarwsservicesLoginCms --trace
Usando CERT=reingartcrt PRIVATEKEY=reingartkey URL=httpswsaaafipgovarwsservicesLoginCms SERVICE=wsfex TTL=2400Creando TRA------------------------------------------------------------------------------ltxml version=10 encoding=UTF-8gtltloginTicketRequest version=10gt ltheadergt ltuniqueIdgt1279058341ltuniqueIdgt ltgenerationTimegt2010-07-13T181901ltgenerationTimegt ltexpirationTimegt2010-07-13T193901ltexpirationTimegt ltheadergt ltservicegtwsfexltservicegtltloginTicketRequestgt------------------------------------------------------------------------------
Asociacioacuten 115
Frimando TRALlamando WSAA--------------------------------------------------------------------------------POST httpswsaaafipgovarwsservicesLoginCmsSOAPAction httpargovafipdiffacturaelectronicaloginCmsContent-length 3369Content-type textxml charset=UTF-8
================================================================================El archivo TAxml se ha generado correctamente
Nota Cambiar WSAAEXE por WSAA-CLIEXE o viceversa dependiendo del paquete de instalacioacuten o comoeste compilado (si aparece el mensaje This program host a COM object an is started automatically) Parausarlo desde el coacutedigo fuente utilizar en su lugar python wsaapy
Para descartar cualquier problema teacutecnico se puede utilizar la salida que es la traza de depuracioacuten de lacomunicacioacuten con AFIP a la mesa de ayuda (requerimiento y respuesta xml)
Si se estariacutea conectando correctamente a produccioacuten el certificado y las URL son correctas etc se deberiacuteaconstatar que
El ticket de requerimiento de acceso (TRA) correctamente solicita servicio correcto (wsfex)ltservicegtwsfexltservicegt
bull
Se estaacute solicitando acceso a los servidores del ambiente correcto (wsaa_url) POSThttpswsaaafipgovarwsservicesLoginCms (produccioacuten) o POSThttpwsaahomoafipgovarwsservicesLoginCms (homologacioacuten)
bull
El equipo que responde seriacutea del ambiente correcto perezaafipgovarenvidiaafipgovar iraafipgovar (produccioacuten) o avariciaafipgovar(homologacioacuten) Nota los nombres de los servidores pueden cambiar y solo se informan en caso deerror
bull
Si la autenticacioacuten es exitosa (El archivo TAxml se ha generado correctamente en elmensaje XML contenido en dicho archivo se puede verificar los siguientes datos
Fuente AFIP produccioacuten (ltsourcegtCN=wsaa O=AFIP C=AR SERIALNUMBER=CUIT33693450239ltsourcegt) sinoacute diriacutea CN=wsaahomo O=AFIP C=ARSERIALNUMBER=CUIT 33693450239
bull
Destino datos del certificado de produccioacutenhomologacioacuten (C=ar O=pyafipws-sistemasagiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart)
bull
Si el ambiente es el correcto (produccioacutenhomologacioacuten) y sigue devolviendo acceso denegadons1coenotAuthorized Computador no autorizado a acceder al servicio(govafipdeseindvadacsuaviewwsaaLoginFault) revisar el certificado ARFE(asociacioacuten de servicio) RECEREARRFI sobre reacutegimen habilitado puntos de venta y demaacutes traacutemites anteAFIP Si aparece error 600 ValidacionDeToken Error al verificar hashVerificacionDeHash No valida la firma digital se estaacute usando un sign y token en elambiente incorrecto (de produccioacuten en homologacioacuten y viceversa)
Comprobacioacuten de Autenticacioacuten (WSAA) 116
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)
De manera similar a lo expuesto anteriormente se provee una aplicacioacuten visual a modo de ejemplo paracomprobar el funcionamiento de la interfaz y los certificados tramitados desde AFIP
El instalador para este aplicacioacuten puede descargarse de
instalar-ej-wsaa-202zip (archivado en 1GoogleCode)bull
Por defecto se instala en CArchivos de Programawsaaej-wsaaexe
Importante Es necesario configurar correctamente el certificado y clave privada con la ruta completa a dichosarchivos
Para pruebas en produccioacuten cambiar la URL ahttpswsaaafipgovarwsservicesLoginCms y configurar los certificados
La version de la interfaz no debe decir Homologacioacuten y debe permitir cambiar la URL sino deben reinstalarlos instaladores para produccioacuten eliminando cualquier archivo anterior
Importante generalmente solo debe correr el ejemplo no instalar ni actualizar el componente WSAA si tieneuna versioacuten superior (o incluida con otro webservice como WSFEv1 o WSLPG) o esta usando el instaladorpara produccioacuten Si no lo tiene instalado puede usar instalador-WSAA-202cexe o superior
Errores Frecuentes
Los siguientes son posibles interpretaciones y soluciones a los errores que enviacutean los servidores de AFIP
Fallas SOAP
Falla SOAP ns1coenotAuthorized o ns1cmscertuntrusted
En WSAA descartando que se este usando el certificado del ambiente incorrecto (certificado dehomologacioacuten en produccioacuten y viceversa) es necesario que el certificado y CUIT esteacuten habilitados paraacceder al servicio web especificado (wsfe wsfex wsbfe wsctg wDigDepFiel etc) No es suficiente generarel certificado (en homologacioacuten o en produccioacuten) hay que solicitar explicitamente acceso al serviciorequerido ver Asociacioacuten de Certificado
Los servicios no relacionados a factura electroacutenica en produccioacuten tienen otros meacutetodos para asociar loscertificados
Ver Comprobacioacuten de Autenticacioacuten WSAA con informacioacuten para determinar o depurar el problema deacceso
Mensajes de Error Original
Computador no autorizado a acceder los servicios de AFIP (ns1coenotAuthorized)bull Certificado no emitido por AC de confianza (ns1cmscertuntrusted)bull
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA) 117
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso alWSN solicitado
Este error es reportado por AFIP cuando se esta solicitan varios tickets de acceso para el mismo certificado yservicio
Ver Reutilizacioacuten de Ticket de Acceso
Falla SOAP Server was unable to read request ---gt There is an error in XML document (41339) ---gt Input string was not in a correct format
Este error correponde al protocolo de intercambio de datos (ver Errores por Tipos de Datos) y puede significarque
Un campo obligatorio no fue completadobull Se completoacute un campo con un tipo de datos invaacutelido (float en lugar de int coma en vez de punto etc)bull Se especificoacute un valor no esperado por el web servicebull
En cualquier caso se puede revisar el mensaje XML de requermiento (atributos xml_request o XmlRequest) ybuscar la etiqueta con datos incorrectos en la liacutenea y caracter donde se informa el error (por ej en este casoliacutenea 4 cerca del caracter 1339) Ver maacutes informacioacuten y rutinas en Manejo de Excepciones
Otras fallas SOAP
WSAA y otros webservices pueden devolver errores no documentados o capturados por AFIP por ej
Server was unable to process request ---ampgt This OracleTransactionhas completed it is no longer usable
bull
SoapFault soapenvServer Could not initialize classorghibernatetransformTransformers
bull
Nuestra interfaz no utiliza Java ni Hibernate por lo que este tipo de problemas son cuestiones internas deAFIP Los errores Oracle u ORA son un problema interno de la base de datos de AFIP
Puede ocurrir en homologacioacuten y se debe esperar a que AFIP solucione el problema
En estos casos para produccioacuten se puede consultar con la mesa de ayuda sriafipgovar (seguramente es untema que lo resolveraacuten en el diacutea y no requiera una intervencioacuten de programacioacuten o configuracioacuten especial)
Errores generales AFIP
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token
Posiblemente haya un problema interno en AFIP (frecuentemente se soluciona automaacuteticamente ya que puedeser un problema de los servidores de AFIP ver abajo) o se este enviando incorrectamente el WSAAToken(por ej el lenguaje de programacioacuten o la base de datos recortoacute el string) Revisar que dicho dato se esteacutecopiando tal cual al webservice de negocio (WSFEv1Token WSMTXCAToken etc) o utilizar los nuevosmeacutetodos como WSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado118
En python se puede analizar el sign ejecutando
import base64print base64b64decode(wsaaToken)
Que deberiacutea mostrar un XML (token del ticket de acceso) como el siguiente
ltxml version=10 encoding=UTF-8 standalone=yesgtltsso version=20gt ltid unique_id=788962471 src=CN=wsaahomo O=AFIP C=AR SERIALNUMBER=CUIT 33693450239 gen_time=1401116887 exp_time=1401160147 dst=CN=wsfe O=AFIP C=ARgt ltoperation value=granted type=logingt ltlogin uid=C=ar O=pyafipws-sistemas agiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart service=wsfe regmethod=22 entity=33693450239 authmethod=cmsgt ltrelationsgt ltrelation reltype=4 key=20267565393gt ltrelationsgt ltlogingt ltoperationgtltssogt
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 a la firma
Posiblemente se este enviando incorrectamente el WSAASign (por ej el lenguaje de programacioacuten o la basede datos recortoacute el string) Revisar que dicho dato se esteacute copiando tal cual al webservice de negocio(WSFEv1Sign WSMTXCASign etc) o utilizar los nuevos meacutetodos comoWSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
600 ValidacionDeToken Error al verificar hash VerificacionDeHash No valid la firmadigital
Este error es reportado por AFIP cuando no se estaacute enviando al webservice de negocio (WSFEv1WSMTXCA WSFEXv1 etc) el Token y Sign obtenido con WSAA (o se lo enviacutea vaciacuteo)
Esto puede deberse porque no se esteacute validando correctamente el ticket de requerimiento de acceso(certificado invaacutelido fecha invaacutelida ambiente de produccioacuten homologacioacuten incorrecto ticket de acceso yaotorgado etc) Revisar que la URL de cada webservice sea correcta (homologacioacuten o produccioacuten tanto deWSAA como del servicio web de negocio WSFEv1 WSMTXCA etc) y que el certificado corresponda alambiente correcto
Ver Manejos de excepciones para detectar el inconveniente en WSAA
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC
No estaacuten sincronizados la fecha y hora del equipo con los servidores de AFIP
En linux se actualiza con
sudo ntpdate timeafipgovar
En windows se actualiza yendo a Propiedades del Reloj Hora de Internet introduciendotimeafipgovar
Otros mensajes similares
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token119
Token vencido fecha y hora de vencimiento del token enviado - fecha y hora actual del servidorbull Validaciondetoken No validaron las fechas del token Gen Time Exp Time Now Utcbull WSAA xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid Eltiempo de generacioacutenexpiracioacuten es invaacutelido generationTime posee formato o dato invaacutelido (ej en elfuturo o maacutes de 24 hs de antiguedad)
bull
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken No aparece CUITen lista de relaciones
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesovaacutelido pero se intenta operar con un CUIT incorrecto yo que no se corresponde al certificado Revisar que elCUIT sea correcto y que esteacute asociado al servicio y certificado (ver ARFE en punto anterior)
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken Error al verificarhash VerificacionDeHash No valid la firma digital
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el ambiente requerido (por ej ticket de acceso de homologacioacuten usado en produccioacuten) o no seenvioacute correctamente el tocken y sign
Usuario no autorizado para realizar esta operacioacuten Validacionde Token No valido idSistema wsfex (Id Sistema de token es wsfe)
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el servicio web requerido (por ej ticket de acceso de factura nacional -wsfe- usado enexportacioacuten -wsfex-)
Se debe revisar el valor del servicio al crear el requerimiento de acceso (CreateTRA)
Problemas con los certificados
Error inesperado no existe el archivo o directorio de certificadoclave privada
Este error corresponde a que la interfaz no encuentra los archivos del certificadoclave privada o la ruta notiene alguacuten directorio Revisar la ruta completa y reintentar
Mensaje de Error Original (certificado)
Unexpected Python Error lttype exceptionsIOErrorgt [Errno 2] No such file or directoryreingartcrt
Mensaje de Error Original (clave privada)
Unexpected Python Error 936error02001002system libraryfopenNo such file ordirectorycryptobiobss_filec122fopen(reingartkeyr) 936error2006D080BIOroutinesBIO_new_fileno such filecryptobiobss_filec125 None
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC 120
Error inesperado La clave privada no coincide con el certificado
Este error corresponde a que el certificado no fue creado con la clave privada dada por lo que no se puederealizar la encriptacioacuten necesaria Revisar que la clave privada sea con la que se creoacute el pedido de certificadooriginal (CSR) y reintentar Si no se cuenta con la clave privada original es imposible utilizar el certificadopor lo que es necesario generar y asociar uno nuevo
Mensaje de Error Original
Unexpected Python Error ltclass M2CryptoSMIMESMIME_Errorgt936error0B080074x509 certificate routinesX509_check_private_keykey valuesmismatchcryptox509x509_cmpc399 936error2107407FPKCS7routinesPKCS7_signprivate key does not match certificatecryptopkcs7pk7_smimec76
Error Inesperado La clave privada es invaacutelida
Mensaje de Error Original
Unexpected Python Error 936error0906D06CPEM routinesPEM_read_biono startlinecryptopempem_libc647Expecting ANY PRIVATE KEY
Este error corresponde a que la clave privada no estaacute en el formato correcto (texto plano PEM) seguramenteel archivo se encuentra en PKCS12 (binario certificado x509 + clave privada con extensioacuten p12 o pfx)lo que no es necesario para esta interfaz
Para convertir de pkcs12 a pem utilizar
openssl pkcs12 -in empresap12 -out empresapem -nodes
Eso generaraacute el archivo empresapem donde
La clave privada (key) se encuentra entre -----BEGIN RSA PRIVATE KEY----- y-----END RSA PRIVATE KEY-----
bull
El certificado (crt) se encuentra entre -----BEGIN CERTIFICATE----- y -----ENDCERTIFICATE-----
bull
Copiar dichas lineas en archivos separados Los archivos deben incluir el encabezado (-----BEGIN ) ypie (-----END ) para ser vaacutelidos
En caso de ser necesario para recorrer el camino inverso generar archivo PKCS12 desde PEM (no necesariopor esta interfaz) realizar
openssl pkcs12 -export -inkey empresakey -in empresacrt -out empresap12
Error inesperado Mala Desencriptacioacuten
Este error corresponde a que el certificado fue creado usando una frase de seguridad (passphrase) por lo queen tiempo de ejecucioacuten solicita entrada dicha contrasentildea (bloqueandose si no se proporciona)
Mensaje de Error Original
Error inesperado La clave privada no coincide con el certificado 121
M2CryptoEVPEVPError 3079395008error06065064digital enveloperoutinesEVP_DecryptFinal_exbaddecryptevp_encc3303079395008error0906A065PEM routinesPEM_do_headerbaddecryptpem_libc428
Para remover la passphrase (contrasentildea) por ej del archivo privadapem y grabarlo en privadakeyejecutar el siguiente comando
openssl rsa -in privadapem -out privadakey
Error inesperado Esperando certificado
El certificado proporcionado es invaacutelido
Es posible leer los datos de un certificado utilizando el comando openssl
openssl x509 -in reingartcrt -noout -text
Deberiacutea mostrar la informacioacuten completa del certificado
Certificate Data Version 3 (0x2) Serial Number 0791000000000000 Signature Algorithm sha1WithRSAEncryption Issuer CN=AFIP-Autoridad Certificante Homologacion C=AR ST=Capital Federal L=Ciudad Autonoma de Buenos Aires O=Administracion Federal de Ingresos Publicos OU=Subdireccion General de Sistemas y TelecomunicacionesemailAddress=ac_homoafipgovarserialNumber=CUIT 33693450239 Validity Not Before Feb 1 174604 2010 GMT Not After Feb 1 174604 2011 GMT Subject CN=Mariano ReingartserialNumber=CUIT 20267565393 O=PyAfipWs-Sistemas Agiles C=AR
Si no lo muestra posiblemente el certificado esteacute en otro formato (ver como convertir desde pk7 en puntosanteriores)
Mensaje de Error Original
M2CryptoX509X509Error 3078817472error0906D06CPEM routinesPEM_read_bionostart linepem_libc650Expecting CERTIFICATE
Error al dar de alta computador
A partir de Agosto de 2016 aparentemente AFIP estaacute solicitando claves maacutes largas pudiendose presentar elsiguiente error al tratar de generar un certificado por WSASS Autoservicio de Acceso a WebServices(TESTINGHOMOLOGACIOacuteN)
ERROR clsCrearComputador (CUIT=20267565393 ALIAS=test_1024) createComputer Error al dar de alta al computador (CUIT=20267565393 ALIAS=test_1024) La longitud de clave puacuteblica debe ser estar comprendida entre 2048 y 8192 bits
En este caso de debe generar la clave con mayor cantidad de bits por ej indicando el paraacutemetro 2048 aInstructivo OpenSSL
Error inesperado Mala Desencriptacioacuten 122
La herramienta WSAA 110g ya crea de manera predeterminada claves de 4096 bits ver Crear Pedido CSR
Se estima que estas cuestiones afectaraacuten en PRODUCCIOacuteN cuando venzan la mayoriacutea de los certificados paraese entorno el 21 de Febrero de 2016 Es posible con este componente revisar el vencimiento de cada crtcon los Metodos para Certificados
Excepcioacuten SSLError X509_load_cert_crl_file
No se puede cargar el archivo afip_ca_infocrt de la lista de autoridades de certificacioacuten de confiaza(CACERT) necesario para verificar el canal seguro como solicita AFIP
Ese archivo en las ultimas actualizaciones se encuentra en la carpeta conf o puede ser descargado desde el el repositorio
El archivo debe ser copiado a la carpeta principal donde esteacute el programa WSAA o configurar el paraacutemetroCACERT con la ruta a la ubicacioacuten completa
Mensaje de Error Original
[Errno 185090050] _sslc345 error0B084002x509 certificateroutinesX509_load_cert_crl_filesystem lib
Falla SOAP WSAA (SoapFault)
En ciertas ocaciones WSAA puede denegar el acceso con los siguientes mensajes
ns1cmscertexpired Certificado expiradobull ns1xmlbad No se ha podido interpretar el XML contra el SCHEMAbull cmscertuntrusted Certificado NO emitido por un AC de confianzabull cmssigninvalid cmsbad y cmsbadbase64 no se esta informando correctamente el mensajecriptograacutefico firmado (Firma invaacutelida o algoriacutetmo no soportado)
bull
Generalmente se esta tratando de usar un certificado invaacutelido o expirado se estaacute pasando mal alguacuten paraacutemetro(servicio o tiempo de vida) o se estaacute tratando de acceder al ambiente equivocado (el cerificado es deproduccioacuten y el servidor de homologacioacuten o viceversa)
Ver consulta tema anterior para revisar el certificado Modo Homologacioacuten Produccioacuten y Comprobacioacuten deAutenticacioacuten WSAA
Errores de Conectividad
Antes las fallas de conexioacuten sobrecarga caiacutedas de internet u otros problemas de comunicacioacuten la interfazpuede devolver los siguientes errores (en su mayoriacutea del lenguaje de programacioacuten Python o sistemaoperativo)
AttributeError NoneType object has no attribute makefile no sepuede establecer el canal de comunicacioacuten (socket) puede que internet no este funcionando en elcliente
bull
socketgaierror [Errno -2] Name or service not known no se puede resolverel nombre del equipo revise los servidores DNS asignados a su conexioacuten de internet
bull
Error al dar de alta computador 123
socketerror [Errno 104] Connection reset by peer la conexioacuten fue cerradapor la contraparte (servidor AFIP) posiblemente por sobrecarga
bull
lturlopen (11001 getaddrinfo failed)gt no se puede resolver el nombre de archivorevise los DNS y si estaacute utiliando alguacuten servidor intermedio (proxy)
bull
ExpatError Not well formed token el servidor posiblemente no esta devolviendo XMLcorrecto debido a un error interno
bull
BadStatusLine ResponseNotReady significa que los servidores de AFIP no contestan algocoherente (compatible con el protocolo HTTP)
bull
AttributeError Tag not Found Body (no elements found) significa que losservidores de AFIP no contestan un XML vaacutelido seguacuten el protocolo de webservices SOAP
bull
SSLError The read operation timed out la conexioacuten SSLTLS supero el tiempo deespera posiblemente es un error de conectividad de Internet o los servidores de AFIP estaacuten caiacutedos
bull
Service Unavailable El servidor de AFIP no estaacute disponible y no devuelve un mensaje XMLcorrecto
bull
ServerNotFoundError Unable to find the server atservicios1afipgovar no estaacute resolviendo el nombre del Servidor de AFIP a la direccioacutenIP revisar la configuracioacuten DNS con su proveedor de Internet
bull
error [Errno 111] Connection refused error [Errno 10061] No sepuede establecer una conexioacuten ya que el equipo de destino denegoacuteexpresamente dicha conexioacuten revisar que no esteacute mal configurado el servidor proxy(comentar o no enviar parametro si no corresponde)
bull
En todos estos casos se recomienda reintentar la operatoria luego de unos instantes despueacutes de verificar laconexioacuten de internet Se puede probar ingresando a la URL del webserice (por ej[ httpsservicios1afipgovarwsfev1serviceasmxWSDL
WSFEv1]) con un navegador y ver si les abre correctamente la paacutegina
Tambieacuten puede haber un tema de antivirus o proxy que esteacute bloqueando la conexioacuten saliente En ese caso(servidor intermedio para poder salir a internet) se debe consultar con los administradores de la red yposiblemente se necesite configurar
El paraacutemetro proxy en el meacutetodo Conectar formato usuarioclaveservidorpuerto (verejemplo)
bull
o seccioacuten [PROXY] en el archivo receini (ver ejemplo)bull
Ver la siguiente seccioacuten si el problema persiste Recordar que a veces funciona o no dependiendo del lugardesde donde se conecta el cliente ya que AFIP tiene una granja de servidores pueden probar reconectandosea internet desde otra IP para ver si los deriva a un servidor que funcione (o esperar a que baje la demanda yover si lo solucionan)
Errores de Protocolo SSL
AFIP estaacute desafectando los protocolos de seguridad obsoletos (SSLv3 requiriendo TLSv1+) por lo que ensistemas operativos antiguos o desactualizados (por ej Windows XP) puede existir una incompatibilidad conque imposibilite la comunicacioacuten segura es recomendable actualizar el sistema operativo lenguaje deprogramacioacuten y componentes
SSLEOFError EOF occurred in violation of protocol (_sslc590)bull SSLHandshakeError [SSL SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alertbull
Errores de Conectividad 124
handshake failure (_sslc581)[Errno 1] _sslc490 error14094410SSLroutinesSSL3_READ_BYTESsslv3 alert handshake failure
bull
Como mitigacioacuten puede utilizare un transporte alternativo basado en la biblioteca CURL que en general tienemejor cobertura para este tipo de cuestiones en Windows
Para ello establecer paraacutemetro wrapper=pycurl en el meacutetodo Conectar si se utilizan loscomponentes
wrapper = pycurlok = WSFEv1Conectar(cache wsdl proxy wrapper)
Si se utilizan las herramientas por linea de comando configurar en el receini
[WSFEv1]wrapper = pycurl
Errores AFIP CUIT Emisor
En caso de problemas con el CUIT emisor y no superar una de las siguientes validaciones excluyentes(verificacioacuten de datos registrales inscripcioacuten en el reacutegimen autorizacioacuten de emisioacuten de comprobantesdomicilio fiscal etc) AFIP devolveraacute un Coacutedigo de Error 10000 con los mensajes posibles
01 LA CUIT INFORMADA NO CORRESPONDE A UN RESPONSABLE INSCRIPTO EN ELIVA ACTIVO
bull
02 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESELECTRONICOS ORIGINALES O EL PERIODO DE INICIO AUTORIZADO ES POSTERIORAL DE LA GENERACION DE LA SOLICITUD
bull
03 LA CUIT INFORMADA REGISTRA INCONVENIENTES CON EL DOMICILIO FISCALbull 04 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESCLASE A
bull
05 EL CUIT INFORMADO COMO EMISOR NO SE ENCUENTRA REGISTRADO DE FORMAACTIVA EN LAS BASES DE LA ADMINISTRACIOacuteN
bull
06 DEBE POSEER AL MENOS UNA ACTIVAD ACTIVAbull
En estos casos debe contactar la mesa de ayuda de AFIP para solucionar el inconveniente que esteacute bloqueandola emisioacuten de facturas electroacutenicas (generalmente no es un tema teacutecnico sino un traacutemite administrativo)
Errores AFIP Punto de Venta
Otros errores relacionados a la emisioacuten de facturas electroacutenicas pueden ser
1501 El Punto de Venta debe ser del tipo habilitado para el reacutegimen CAE Codificacioacuten de Productos- Web Services o del reacutegimen CAEA
bull
Errores de Protocolo SSL 125
En este caso se debe revisar que el tipo de punto de venta dado de alta coincida con el servicio web aconsumir (campo sistema de facturacioacuten asociado)
RECE para aplicativo y web services (CAE WSFEv1 factura electroacutenica mercado interno tradicionalsin detalle)
bull
RECE para aplicativo y web services EXPORTACION (CAE WSFEXv1 factura electroacutenicaexportacioacuten con detalle)
bull
Codificacioacuten de Productos Web Services (CAE WSMTXCA factura electroacutenica mercado interno condetalle)
bull
CAEA - Codificacioacuten de Productos (CAE anticipado WSMTXCA factura electroacutenica mercado internocon detalle)
bull
No debe figurar Factura en Linea porque ese punto de venta solo permite operar por Clave Fiscal serviciointeractivo de Comprobantes en Liacutenea
Errores de tipos de datos
Se recuerda que este componente es dinaacutemico y generalmente no realiza conversioacuten ni ajustes en los tipos dedatos por lo que la aplicacioacuten que lo utilice debe revisarlos y verificar que sean correctos para ser enviadosrespetando las especificaciones y validaciones de AFIP
Debido a que los distintos lenguajes de programacioacuten pueden almacenar y pasar los valores de formasdiferentes (eventualmente en registros recordsets campos fields o similares) es recomendable que seconviertan todos los datos a string (cadenas de caracteres) para evitar errores de conversioacuten y redondeoTambieacuten se pueden usar otros tipos de datos baacutesicos como enteros (integer) flotantes (float)numeacutericomoneda (currencydecimal) que son los que en definitiva reconoce AFIP Las fechas deben pasarseen formato string seguacuten el formato de cada webservice Los importes deben pasarse con punto decimal (nocoma y sin separadores de miles ni signo pesos)
En VB se pueden convertir los valores con CStr (string) CLng (long) CCur (currency) etc o incluso lasfunciones str o val en ciertos casos ejemplo
tipo_cbte = CInt(rstipo_cbte)
Para un ejemplo concreto ver la implentacioacuten completa de referencia factura_electronicamdb (Access 2k osuperior)
En caso de enviar los tipos de datos incorrectos en Traceback (ver Manejo de Excepciones) podraacuteencontrarse algunos de los mensajes frecuentes
AttributeError PyIDispatch object has no attribute strip se envioacuteun dato que no puede convertirse a string
bull
PyIDispatch at 0x10531678 with obj at 0x0C997832 se usoacute un tipo de datos noconvertidosoportado ver Mensajes XML
bull
TypeError int() argument must be a string or a number notNoneType se envioacute un nulo en un campo que necesitaba un nuacutemero
bull
ValueError invalid literal for int() with base 10 A se envioacute un stringen un campo que necesitaba un nuacutemero
bull
Errores AFIP Punto de Venta 126
Errores internos de AFIP
Ocasionalmente pueden producirse errores no documentados en las especificaciones teacutecnicas de AFIP Por ejcuando se intenta utilizar la URL de un webservice obsoleto como WSBFE en vez de WSBFEv1 el servidorde AFIP ha devuelto el siguiente error
soapServer Server was unable to process request ---ampgt Object reference not set to an instance ofan object
bull
Otros problemas internos de los servidores de AFIP que los resuelve dicho organismo automaacuteticamente (sinintervencioacuten necesaria generalmente en el transcurso del diacutea) son
500 Error general DB (InsertandAuthorize - fex_pckprc_ins_rcel_comprobantes OEX ) - (1654) -ORA-01654 unable to extend index MIGRARCEL_CMP_UNC_INDEX by 4 in tablespaceFISCO_DATOS ORA-06512 at MIGRAFEX_PCK line 353 ORA-06512 at line 1
bull
500 Error interno DB - fex_Rece_Pckget_ctzbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
500 Error general DB (InsertandAuthorize - prc_ws_ins_cab) BFEErrorbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-12535 TNSoperationtimed out
bull
500 Error interno de aplicacioacuten - Metodo FECAESolicitar - Index was outside the bounds of thearray
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-00257 archiver error Connect internalonly until freed ORA-02063 preceding line from GHOST ORA-06512 at ORARECE_V1_PCKline 1651 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-28000 the account is lockedORA-02063 preceding line from E15K_PADR ORA-06512 at ORARECE_V1_PCK line 1806ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLEinitialization or shutdown in progress
bull
501 Error interno de base de datos - CAECabInsert ORA-02068 following severe error fromCONTRIB ORA-03113 end-of-file communication channel ORA-06512 atORARECE_V1_PCK
bull
501_ Error interno de base de datos - CAECabInsert ORA-01001 invalid cursor ORA-06512 atORARECE_V1_PCK line 580 ORA-06512 at ORARECE_V1_PCK line 1070 ORA-06512 atline 1
bull
501 Error interno de base de datos - CAEDetInsert ORA-03233 unable to extend tableORAF136_DETALLES_FACTE subpartition F136_DET_2011_CLAVE_08 by 128 in tablespaceUSERS
bull
501 Error interno de base de datos - CAESequenceGenerarORA-01502 indexORAF136_DET_CAE_UK or partition of such index is in unusable state ORA-06512 atORARECE_V1_PCK line 1477 ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace FISCO_DATOS ORA-06512 at ORARECE_V1_PCK line1168 ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLE initializationor shutdown in progress
bull
501 Error interno de base de datos - AlicIvaCAEInsertORA-14400 inserted partition key does notbull
Errores internos de AFIP 127
map to any partition ORA-06512 at ORARECE_V1_PCK line 1308 ORA-06512 at line 1501 Error interno de base de datos - CuitsEnPadronSet ORA-12541 TNSno listener ORA-06512 atORARECE_V1_PCK line 1831 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-04031 unable to allocate 20528 bytesof shared memory (shared poolunknown objectsga heap(10)KTI SGA freeable small pool)ORA-02062 preceding line from SEFI ORA-06512 at ORARECE_V1_PCK line 1898ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace USERS at ORARECE_V1_PCK line 1202
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-12505 TNSlistener could notresolve SID given in connect descriptor
bull
501 Error interno de base de datos - CAECompConsultarORA-01502 indexORAIX_F136_DETALLES_TPN or partition of such index is in unusable state
bull
501 Error interno de base de datos - CAECabInsert ORA-01502 index ORAF136_CAB_CUIT_IDor partition of such index is in unusable state
bull
501 DataBase - Resultado inesperadobull 501 Error interno de base de datos - CAESequenceGenerarORA-01654 unable to extend indexORAF136_DET_CAE_UK by 1024 in tablespace FISCO_FE ORA-06512 atORARECE_V1_PCK line 1781 ORA-06512 at line 1
bull
502 Error interno de base de datos - Autorizador CAE - Transaccioacuten Activabull Error interno de aplicacioacuten - Metodo FECompConsultarORA-01034 ORACLE not availableORA-27101 shared memory realm does not exist
bull
Error interno de aplicacioacuten - Metodo FECompConsultarORA-01035 ORACLE only available tousers with RESTRICTED SESSION privilege
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-28000 the account is lockedbull soapenvServer Error de conexin DB [Cd A001]bull soapenvClient Error de acceso a la base de datosbull soapenvClient business0010bull soapenvClient orgapacheaxis2databindingADBExeption unexpected subelementconsultarCTGDatos
bull
Tambieacuten pueden ocurrir Errores de Conectividad a nivel de sistema operativo socket error ioerror timeout connection refused ssl handshake server not found etc (verarriba) especialmente cuando los servidores de AFIP se saturan por cambios y actualizaciones
Realizar la consulta con la mesa de ayuda de AFIP sriafipgovar (produccioacuten) y webservicesafipgovar(homologacoacuten) para dejar constancia del problema y si corresponde ver de utilizar los meacutetodos tradicionalespara emitir comprobantes seguacuten RG248508 Artiacuteculo 33
En el caso de inoperatividad del sistema se deberaacute emitir y entregar el comprobanterespectivo utilizando el controlador fiscal o los comprobantes manuales seguacuten correspondahasta tanto esta Administracioacuten Federal apruebe otro procedimiento alternativo de respaldo
Importante en general es obligatorio informar los comprobantes emitidos manualemente por formulariomultinota en dependencia de AFIP a traveacutes de servicios en linea o como AFIP disponga en casos particularesConsultar con el contador la normativa y legislacioacuten vigente
Errores internos de AFIP 128
Errores de Permisos
Dependiendo de las poliacuteticas de seguridad puede ser necesario dar permisos de acceso a la carpeta cache(archivos temporales) o aquellas donde se almacenen los archivos de intercambio (entrada salida PDF oXML)
IMPORTANTE los certificados y claves privadas no deben ser expuestas en una carpeta puacuteblica delservidor web o similar Utilizar passphrase (ver Meacutetodos WSAA) para mayor proteccioacuten y seguridad
Linux
En GNULinux generalmente es necesario que el usuario del servidor web (www-data o similar) puedaacceder a la carpeta
Por ejemplo se podriacutea utilizar los siguientes comandos
chown www-data -R optpyafipwschmod a+xr -R optpyafipwschmod a+xwrt -R optpyafipwscache
Revisar los permisos con su administrador de sistemas
Windows
Acceso Denegado (Archivos)
Error IOError [Errno 13] Permission denied cArchivos deProgramaPyAfipWSCacheTAXML
En general es recomendable utilizar una carpeta con permisos de escritura para la aplicacioacuten
Si esto no es posible se puede configurar los permisos de acceso
Explorador de Archivosbull Buscar carpeta de instalacioacuten (CArchivos de ProgramaPyAfipWS)bull Propiedades (click derecho)bull Solapa Seguridadbull Seleccionar Usuarios que ejecutan la aplicacioacutenbull Editarbull Modificar (habilitar)bull Aceptarbull
Ejemplo
Acceso Denegado (CreateObjectCreateInstance)
En ciertos servidores (Windows 7 o superior) dependiendo de la configuracioacuten debe permitir inicio yactivacioacuten de los componentes
Errores de Permisos 129
Error al llamar a CreateObject CreateInstance o similar Acceso Denegado(HRESULT0x80070005 E_ACCESSDENIED
Solucioacuten
Inicio buscar Servicios de Componentes (o via el Panel de Control HerramientasAdministrativas)
bull
Equipos Mi PC Configuracioacuten DCOMbull Buscar WSAA WSFEv1 o el componente que desee configurarbull Propiedades (Click Derecho)bull Solapa Seguridadbull Permisos de inicio y activacioacuten Personalizado Editarbull Agregar los usuarios que deben tener permisos necesariosbull Aceptarbull
Repetir para Permisos de Acceso y Configuracioacuten de ser necesario
Ejemplo
Acceso Denegado (CreateObjectCreateInstance) 130
Agosto 2018
RG 4109-E Bienes Muebles Registrables Se agrega meacutetodo WSFEv1AgregarComprador y formatointercambio texto dbf
bull
Febrero 2018
Se incluye la nueva Autoridad Certificante -CA- que utilizaacute AFIPbull
Agosto 2017
Se agrega RG 4109-E COMPG_v2_10 Venta de Bienes Muebles Registrables Se agrega meacutetodoAgregarComprador y formato Registro Compradores TXT CompradoresDBF y pseudocoacutedigo deejemplo WSFEv1
bull
Marzo 2017
Se agrega documentacioacuten sobre Actualizaciones (Service Pack 2) WSFEv29 (Cuit en CbteAsoc yRG 4004-E Alquileres Impuesto a las Ganancias) y Release v05 (WSMTX)
bull
Nuevo campo CUIT en meacutetodo AgregarCmpAsoc para WSFEv1 y WSMTXbull
Febrero 2017
Documentacioacuten sobre Instaladores Firmados Digitalmente (Editor Comprobado)bull
Septiembre 2016
Se agrega documentacioacuten sobre Actualizaciones (Service Pack 1)bull
Agosto 2016 (hasta revisioacuten interna 739)
Se agregan comentarios sobre Eventos y COMPGv28 para maacutes info ver Novedades WSFEv1bull Se documentan meacutetodos para solicitud de muacuteltiples CAE por enviobull Se agregan mensajes de errores frecuentes y posibles soluciones (Protocolo SSLCERTIFICATE_VERIFY_FAILED fallas soap service unavailable tag not found IO errorsincronizar relojes etc)
bull
Se ajusta cambio de generacioacuten de claves con longitud de 2048 bits por cambio en AFIPbull Se ajustan links por desafectacioacuten de Google Code (histoacuterico)bull Se agregan aclaraciones sobre obtencioacuten de CAE reproceso (incluyendo ejemplo avanzado para VFPy VBNET) cache etc
bull
Se agrega documentacioacuten sobre meacutetodos para certificados automatizacioacuten de generacioacuten y anaacutelisis(por ej vencimiento)
bull
Se agrega datos opcionales RG 3779 RG 3668bull
Junio 2015 (hasta revisioacuten interna 638)
Se agrega Aclaraciones Generales PDF (IVA leyendas RG2845 Art 27 Comprobante Autorizadoetc)
bull
Se agrega logotipo AFIP al PDF y otras modificaciones a la plantilla de facturas electroacutenicasbull Se agrega atributos auxiliares y ejemplos de campos personalizables a generacioacuten de PDFbull Se unifico formato intercambio PDF y se agrega descripcioacuten de cada campobull
Historial de Cambios 3
Se agrega video explicativo WSASS y actualiza instructivo certificadosbull Se actualizan paraacutemetros WSAA SignTRA (passphrase y contenido archivos)bull Se agregan ejemplos simples de reutilizacioacuten de TA para VFP y VBbull Se ajustan links al coacutedigo fuente hacia repositorio GitHub por baja de GoogleCodebull Se agregan ejemplos de RECE1 y PYFEPDFbull Se ajusta descripcioacuten obtencioacuten de CAE WSFEv1bull Se agregan errores internos de AFIPbull Se realizan correcciones menores de tipeo (motivos_obs base_imp)bull Se actualiza infomacioacuten para Factura C Exentos (RG3749)bull
Abril 2015 (hasta revisioacuten interna 504)
Se agrega metodo WSFEv1EstablecerCampoFacturabull Se ajusta formato de intercambio WSMTXCAbull Se ajustan instaladoresbull Se agregan maacutes errores frecuentes de AFIPbull
Octubre 2014 (hasta revisioacuten interna 479)
Se agrega informacioacuten y ejemplo datos opcionales RG 3668 WSFEv1bull Se agrega campos opcionales RG3668 al formato de RECE1bull Se ajusta manejo de errores (ejemplo VFP y simplificacion)bull Se agregan errores internos de AFIP (shared pool ora account locked) punto de venta y temasmenores
bull
Diciembre 2013 (hasta revisioacuten interna 389)
Se ajusta tabla comparativa (RG3536 y RG3571)bull Se agregan errores internos de AFIP ORA-12535bull Se ajusta formato RECE1 y temas menores (estilo)bull
Abril 2013 (hasta revisioacuten interna 343)
Se agrega ejemplo WSAA sobre reuso del ticket de accesobull Se agrega ejemplo WSAA sobre verificacioacuten de canal segurobull Se actualiza info sobre autoridades certificantebull Se actualiza info sobre renovacioacuten de certificadosbull Se ajusta links WSBFEbull Cambios menoresbull
NoviembreDiciembre 2011 (hasta revisioacuten interna 319)
Se ajusta seccioacuten WSFEXv1 Versioacuten 1bull Se agrega secciones Ajustes de WSFEX a WSFEXv1 y RECEX vs RECEX1bull Se ajusta ejemplo WSFEX (WSFEXv1)bull Se actualiza Mensajes XML con instrucciones para enviar campos vacios o nulosbull Cambios menores (coealreadyAuthenticated)bull
Julio 2011 (hasta revisioacuten interna 281)
Se agrega seccioacuten Version 1 (WSFEXv1) a WSFEX y se ajusta al nuevo webservicebull
Historial de Cambios 4
Se agrega seccion PyI25 Generador de Coacutedigos de Barrasbull Se agrega seccioacuten PyEmail Envio de correo electroacutenicobull Se agrega seccioacuten Nuevas Validaciones a WSFEv1bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
AbrilMayo 2011 (hasta revisioacuten interna 221)
Se agrega seccioacuten Manejo de Excepcionesbull Se agrega seccioacuten Verificacioacuten del Canal de Comunicacioacuten Segurobull Se agrega seccioacuten Tabla Comparativa Webservicesbull Se agrega seccioacuten Reutilizacioacuten de Ticket de Acceso a WSAAbull Se agrega seccioacuten Obtencioacuten de atributos avanzados a WSAA y WSFEv1bull Se agrega seccioacuten Factura C Monotributo a WSFEv1bull Se actualiza secciones WSAA (meacutetodos atributos errores)bull Se actualiza secciones WSFEv1 (meacutetodos atributos errores)bull Se actualiza secciones WSFEX (meacutetodos atributos errores)bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
FebreroMarzo 2011 (hasta revisioacuten interna 155)
Se agrega seccioacuten WSMTXCA (objeto meacutetodos atributos ejemplo errores) y RECEMbull Se agrega seccioacuten Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)bull Se actualiza seccioacuten WSFEv1 y RECE1bull Se agrega seccioacuten PyFEPDF (interfaz COM herramient CLI archivos de texto tablas DBFconfiguracioacuten y disentildeador visual)
bull
Se ajusta seccioacuten Interfase por archivos de texto siacutemil SIAP - RECE (configuracioacuten tablas DBF)bull
Ver historial completo desde revisioacuten 1 -2009- (solo usuarios autorizados)
Funcionamiento del campo ID
Importante El ID no aplica a los nuevos webservices (WSFEv1 ni WSMTXCA) igualmente se aconseja leery seguir las siguientes recomendaciones Si bien los nuevos webservices tampoco tienen reprocesamiento lainterfaz lo realiza internamente verificando los datos enviados y recibidos (ver informacioacuten adicional en cadawebservice)
El ID es el Identificador del requerimiento requerido por AFIP un nuacutemero interno de secuencia controladopor el emisor que permite identificar de manera uacutenica cada operacioacuten de autorizacioacuten (solicitud de CAE)Este dato es de vital importancia para poder recuperar un CAE frente a problemas de comunicacioacuten o fallasdel hardwaresoftware Sin el eacutes imposible recuperar un CAE y se puede llegar a bloquear todo el circuito defacturacioacuten electroacutenica en los servidores de AFIP Por ello es recomendable que sea un dato propio delsistema de facturacioacuten almacenado en un soporte permanente (base de datos en el disco riacutegido o similares)
El ID debe ser uacutenico para cada comprobante autorizado y debe cambiar si hubo rechazo previo Los ID nodeben reutilizarse salvo para realizar reprocesos (recuperar un CAE ya emitido) La AFIP almacena lastransacciones seguacuten su ID a mismo ID mismo resultado y CAE (independientemente de los otros datos de laoperacioacuten de transaccioacuten)
En el caso de fallas los webservices poseen meacutetodos para recuperar el uacuteltimo ID informado (por ej verUltNro o GetLastID)
Funcionamiento del campo ID 5
Si bien los ejemplos (incluyendo los oficiales) utilizan generalmente el uacuteltimo ID + 1 esto es solo para ilustrarel meacutetodo en general no es recomendable su uso en produccioacuten ademaacutes de requerir comunicacioacuten extra (noes obligatorio llamar al meacutetodo uacuteltimo ID) ya que puede generar inconvenientes en caso de muacuteltiples equipossolicitando autorizacioacuten simultaacuteneamente fallas de comunicacioacuten o problemas de almacenamiento Seriacutearecomendable por ej que el ID sea un campo autonumeacuterico autoincremental o serial secuencial queacompantildee a la factura
El ID es arbitrario y no tiene relacioacuten con el nordm de factura La uacutenica condicioacuten es que debe ser uacutenico pero noes necesario que sea creciente o secuencial
Validez de Comprobantes Electronicos emitidos
El uso incorrecto de los servicios web (no respetando el funcionamiento de los campos en especial el IDreproceso motivos de observacioacuten y errores) puede ocasionar comportamientos erraacuteticos (facturas noautorizadas o autorizadas con otros datos) Se recomienda revisar el funcionamiento general de su sistema enproduccioacuten utilizando las validaciones que prevee la AFIP
Consulta interactiva de CAE httpsservicioswebafipgobargenericoscomprobantescaeaspxbull Consulta interactiva de CAE Anticipado httpsservicioswebafipgobargenericoscomprobantescaeaaspx
bull
Por Clave Fiscal servicio Verificacioacuten de validez de comprobantes emitidos (solo receptores)bull Por servicio web para Facturas E A y B (Bono Fiscal) Meacutetodo Recuperar comprobante (para facturasde exportacioacuten solo emisores)
bull
Para maacutes informacioacuten y automatizacioacuten del proceso ver servicio web Constatacioacuten de ComprobantesWSCDC
Mensajes XML
Los mensajes XML contienen la comunicacioacuten transmitida entre el sistema y la AFIP en el formato deintercambio de los servicios web
Atributo XmlRequest (requerimientoxml) incluye credenciales de acceso y la solicitud remota(meacutetodo a utilizar paraacutemetros etc)
bull
Atributo XmlResponse (respuestaxml) incluye los datos devueltos por el proceso remotoincluyendo mensajes de error (si corresponde)
bull
Almacenar estos archivos es de vital importancia para el registro de las operaciones realizadas por webservicey su eventual verificacioacuten depuracioacuten o solucioacuten de inconvenientes La informacioacuten contenida en estosarchivos es solo relevante a los desarrolladores no es necesario que sean enviados al usuario final
Dependiendo de la interfaz se pueden recuperar estos mensajes en forma de cadenas de texto para su posterioralmacenamiento o generar los archivos correspondientes
Para maacutes informacioacuten ver atributos XmlRequest y XmlResponse o paraacutemetros xml --trace
Guardar WSFEv1XmlRequest y WSFEv1XmlResponse (ver Manejo de Excepciones para unarutina completa)
bull
RECE1EXE xml --trace generaraacute los archivos con la extensioacuten xml en el directorio de laherramienta (ver Paraacutemetros para maacutes informacioacuten)
bull
Validez de Comprobantes Electronicos emitidos 6
Nota de Seguridad los mensajes pueden incluir datos sensibles (credenciales de acceso a AFIP token ysign) que pueden ser vaacutelidos por varias horas auacuten despueacutes de efectuada la comunicacioacuten En caso compartirestos archivos (por ej en el foro puacuteblico de consultas) se deberiacutean tomar las medidas necesarias para evitarinconvenientes (recortar el campo sign es suficiente para que no se puedan reutilizar las credenciales deacceso)
Importante En ciertos casos para determinados webservices AFIP solicita tag vacios (por ejpermiso_existente en WSFEXv1) por lo que se ha ajustado en la biblioteca de comunicacioacuten SOAP(versioacuten 127 y superiores) para manejar tres escenarios
Enviar un dato por ej permiso_existente = Sltpermiso_existentegtSltpermiso_existentegt
bull
Enviar un tag vacio completando con string vacio por ej permiso_existente = ltpermiso_existentegtltpermiso_existentegt
bull
No enviar un tag (valor NULL NIL None Void etc) por ej permiso_existente = NULL(no genera XML)
bull
En caso de no seguir las especificaciones de AFIP el webservice retornaraacute un mensaje de error del tipoServer was unable to read request ---gt There is an gt error in XMLdocument (5 1353) ---gt Input string was not in a correct format dondeindica revisar el XmlRequest liacutenea 5 columna 1353 (en este caso puntual) para corregir el dato enviado
Documentacioacuten Oficial AFIP
Recomendamos revisar y seguir los lineamientos y normativa de AFIP
httpwwwafipgovarfebull httpwwwafipgovarwsbull
Recordamos que la interfaz y bibliotecas (PyAfipWs) no realizan ninguacuten tipo de chequeo o validacioacutenadicional (ya que esta tarea la realizan los servidores de AFIP) y tampoco convierte entre distintos tipos dedatos (salvo conversioacuten trivial a cadenas -strings- para ser enviadas por XML) por lo que es responsabilidadde la aplicacioacuten principal cumplir con las especificaciones y legislacioacuten vigente referidas a los servicios webde AFIP proporcionando los datos correctos que correspondan
Modos Homologacioacuten y Produccioacuten
Por disentildeo el instalador para Windows publicado de la interfaz COM (pyafipwspy) y herramientas por liacuteneade comando (recepy recexpy recebpy rece1py) funcionaraacute inicialmente solo en modo homologacioacuten(testing) ya que su objetivo es simplemente facilitar las pruebas para que los usuarios que no concen Pythonpuedan evaluar el producto antes de interiorizarse en el lenguaje yo contratar el soporte comercial
Con los instaladores de evaluacioacuten en modo de homologacioacuten (pruebas) se ignoraraacute las URLsproporcionadas a CallWSAA Conectar o especificadas en receini En ese caso para activar modo produccioacuten(definitivo) es necesario ajustar el coacutedigo fuente ver instrucciones de Instalacioacuten desde Coacutedigo Fuente( video explicativo) Ofrecemos soporte comercial contemplando el acceso al instalador compilado ampajustado para produccioacuten para los clientes que asiacute lo requieran Ver Costos y Condiciones
Mensajes XML 7
Configuracioacuten para Produccioacuten
Para entrar en el ambiente de produccioacuten de AFIP ademaacutes de utilizar el instalador correcto (no el deevaluacioacuten ver arriba) se debe usar las URLWSDL correspondientes para cada webservice (modohomologacioacuten deshabilitado)
WSAA httpswsaaafipgovarwsservicesLoginCmswsdlbull WSFE httpsservicios1afipgovarwsfeserviceasmx -obsoleto desde 2011 por AFIP-bull WSFEv1 httpsservicios1afipgovarwsfev1serviceasmxWSDLbull WSFEXv1 httpsservicios1afipgovarwsfexv1serviceasmxWSDLbull WSMTXCA httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAServicewsdlbull WSBFEv1 httpsservicios1afipgovarwsbfev1serviceasmxWSDLbull
Ejemplo en el receini
[WSAA]CERT=reingartcrtPRIVATEKEY=reingartkeyURL=httpswsaaafipgovarwsservicesLoginCmsCACERT=confafip_ca_infocrt
[WSFEv1]CUIT=20267565393ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
Ejemplo en Visual Basic o similar (segundo paraacutemetro del meacutetodo Conectar)
Certificado = reingartcrt certificado de produccioacutenClavePrivada = reingartkey clave privada de produccioacutencms = WSAASignTRA(WSAACreateTRA(wsfe) Certificado ClavePrivada)
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlok = WSAAConectar(cache wsaa_url)ta = WSAALoginCMS(cms)
wsfev1_url = httpsservicios1afipgovarwsfev1serviceasmxWSDLok = WSFEv1Conectar(cache wsfev1_wsdl)
WSFEv1Cuit = 20267565393 CUIT del emisor (segun certificado)
Luego de configurar las opciones para produccioacuten se puede verificar el correcto funcionamiento de lascredenciales y URL utilizando los meacutetodos auxiliares por ej consultando los puntos de venta habilitados
parametros RECE1 ptosventabull meacutetodo ParamGetPtosVentabull
Aclaracioacuten No es obligatorio usar el instalador ni realizar compilacioacuten se puede bajar revisar modificar yejecutar directamente el coacutedigo fuente Python publicado en modo homologacioacuten o produccioacuten
Configuracioacuten para Produccioacuten 8
Importante Los CAE obtenidos en modo homologacioacuten no tienen validez fiscal
Advertencia Teoacutericamente no deberiacutea ser posible conectarse a produccioacuten con certificados de homologacioacuten(y viceversa) pero en la praacutectica han sucedido casos (obteniendo CAE de homologacioacuten sin validez fiscal)por lo que recomendamos extremar las medidas de seguridad y control (verificando certificados yconfiguracioacuten de URL de servidores) para generar las facturas en el ambiente correcto Ver Verificar ValidezCAE y Comprobacioacuten WSAA
Manejo de Excepciones
Las versiones recientes de WSAA (202) WSFEv1 (110) WSMTXCA (101) y WSFEX (126123) incluyenmejoras y unificaciograven en el manejo de excepcioneserrores (atributos LanzarExcepciones Excepciony Traceback) permitiendo un control maacutes simple de los Unexpected Python Error (errores noesperados que informa Python el lenguaje de programacioacuten de la interfaz generalmente por problemas deconexioacuten o tipos de datos invaacutelidos) sobre todo para lenguajes que no soportar mensajes de Error COM(previniendo mensajes por errores no controlados como Error fatal coacutedigo de excepcion=C0000005 y elcierre del programa)
Dependiendo de cada caso (en especial para lenguajes de programacioacuten legados) es conveniente deshabilitarlos errores no manejados (LanzarExcepciones = False) y controlar manualmente las excepciones y el valorretornado luego de llamar a cada meacutetodo
Ejemplo para Visual Basic
Dim ta as Variant
WSAALanzarExcepciones = Falseta = WSAALoginCMS(cms)If WSAAExcepcion ltgt Then
muestro al usuario solo el mensaje de error no la traza MsgBox WSAAExcepcion vbCritical Excepcioacuten
Exit SubEnd If
Mismo ejemplo para Visual Fox Pro
WSAALanzarExcepciones = Fta = WSAALoginCMS(cms)IF LEN(WSAAExcepcion) gt 0 THEN WSAATraceback MESSAGEBOX(WSAAExcepcion 5 + 48 Excepcion) CANCELENDIF
Tambieacuten se puede verificar que la respuesta del meacutetodo (en este caso en la variable ta notar que es del tipoVariant) no sea nula en ese caso se ha producido una excepcioacuten y el mensaje deberiacutea estar en el atributoExcepcion con su traza en Traceback
Nota dependiendo de la version los atributos Excepcion y Traceback pueden estar disponibles solo luego deocurrido el error (utilizar las ulitmas versiones para poder consultar estos atributos en cualquier momento)
Es recomendable que se muestre al usuario solo la Excepcioacuten (la traza es informacioacuten teacutecnica que no tieneutilizad para el operador) y para facilitar la depuracioacuten en todos los casos es uacutetil guardar los Mensajes XML
Manejo de Excepciones 9
y excepcioacuten ya que a veces los lenguajes de programacioacuten cortan el mensaje y se dificulta saber el motivo delerror Ademaacutes es recomendable siempre verificar que los objetos hayan sido creados (para no generar nuevoserrores) y que estos sean compatibles con la versioacuten que manejamos (si tenemos varias instalaciones distintaspara no solicitar atributos inexistentes)
Por ej para VB (cambiar WSAA por el webservice que corresponda)
verifico que el objeto haya sido creadoIf Not WSAA Is Nothing Then
verifico que la versioacuten del objeto sea compatibleIf WSAAVersion gt= 102a Then creo el archivo guardo alliacute todos los atributos para depuracioacuten
fd = FreeFile Open cerrortxt For Append As fd Print fd WSAAExcepcion Print fd WSAATraceback Print fd WSAAXmlRequest Print fd WSAAXmlResponse Close fd
End IfEnd If
Ejemplo para VFP (cambiar WSAA por el webservice que corresponda)
-- Depuracioacuten (grabar a un archivo los datos de prueba)gnErrFile = FCREATE(cerrortxt) =FWRITE(gnErrFile WSAAToken + CHR(13))=FWRITE(gnErrFile WSAASign + CHR(13)) =FWRITE(gnErrFile WSAAXmlRequest + CHR(13))=FWRITE(gnErrFile WSAAXmlResponse + CHR(13))=FWRITE(gnErrFile WSAAExcepcion + CHR(13))=FWRITE(gnErrFile WSAATraceback + CHR(13))=FCLOSE(gnErrFile)
Error Handler
Importante este meacutetodo no es estrictamente necesario si su programa ya tiene incorporado el manejo deerrores seguacuten el lenguaje de programacioacuten que utilicie (especialmente si utiliza el control de excepcionesmencionado en la seccioacuten anterior)
Todas estas consideraciones no quitan que se deba tener previsto el controlador de errores habitual dellenguaje para capturar los errores graves (por ej al no poder crear el objeto enviar un tipo de dato incorrectoo llamar un meacutetodoatributo inexistente) ya sea utilizando
Visual Basic ON ERROR GOTO bull Visual Fox Pro ON ERROR DO bull o bloques TRY EXCEPT CATCH o similaresbull
Lo mismo aplica a WSFEv1 WSMTXCA y WSFEX Para maacutes informacioacuten ver los ejemplos actualizados
Para VB
On Error GoTo ManejoError
Crear objeto interface (WSAA WSFEv1 etc)
Error Handler 10
Set WSAA = CreateObject(WSAA) llamar a los meacutetodos de WSAA
Exit Sub
ManejoError
Si hubo error (tradicional no controlado)
Mostrar mensajes de Depuracioacuten en ventana de inmediatoIf Not WSAA Is Nothing Then
If WSAAVersion gt= 102a Then DebugPrint WSAAExcepcion DebugPrint WSAATraceback DebugPrint WSAAXmlRequest DebugPrint WSAAXmlResponse
End IfEnd IfIf Not WSFEv1 Is Nothing Then
If WSFEv1Version gt= 110a Then DebugPrint WSFEv1Excepcion DebugPrint WSFEv1Traceback DebugPrint WSFEv1XmlRequest DebugPrint WSFEv1XmlResponse DebugPrint WSFEv1DebugLog()
End IfEnd If
Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipSelect Case MsgBox(ErrDescription vbCritical + vbRetryCancel Error amp ErrNumber - vbObjectError amp en amp ErrSource)
Case vbRetry DebugAssert False
ResumeCase vbCancel
DebugPrint ErrDescriptionEnd Select
Para VFP (con procedimiento para captura de errores automaacutetica)
ON ERROR DO errhand2-- Crear objeto interface Web Service de Factura ElectroacutenicaWSFE = CREATEOBJECT(WSFEv1) -- llamar a los meacutetodos de WSFE
-- Procedimiento para manejar errores WSFEPROCEDURE errhand2 --PARAMETER merror mess mess1 mprog mlineno
-- Depuracioacuten (mostrar los mensajes de error en la ventana principal)
WSFEv1XmlRequest WSFEv1XmlResponse WSFEv1Excepcion WSFEv1Traceback
Error number + LTRIM(STR(ERROR()))
Error Handler 11
Error message + MESSAGE() Line of code with error + MESSAGE(1) Line number of error + LTRIM(STR(LINENO())) Program with error + PROGRAM()
-- Preguntar Aceptar o cancelar ch = MESSAGEBOX(WSFEExcepcion 5 + 48 Error) IF ch = 2 ampamp Cancelar ON ERROR CLEAR EVENTS CLOSE ALL RELEASE ALL CLEAR ALL CANCEL ENDIF ENDPROC
Es posible seguir utilizando para las versiones anteriores o por compatibilidad hacia atraacutes LanzarExcepciones= Verdadero (predeterminado) en dicho caso se generaraacute un Error COM que deberaacute ser capturado por laaplicacioacuten y el mensaje estaraacute en ErrDescription (para VB) o MESSAGE() (para VFP)
Time-Out
En casos de falla de los servidores de AFIP la respuesta se puede demorar por lo que se puede configurar elparametro timeout (tiempo de espera) en el meacutetodo Conectar(cache wsdl proxy wrappercacert timeout) para controlar el periacuteodo y minimizar los bloqueos
De manera predeterminada el tiempo de espera en las uacuteltimas versiones es de 30 segundos pero se puedenpasar otros valores como 300 para que espere hasta 5 minutos (si los servidores de AFIP estaacuten muycongestionados) o reducir a 15 o 10 para esperar un tiempo maacutes reducido y dar una respuesta raacutepida alusuario (ver en ese caso Reproceso Automaacutetico para reintentarconsultar en caso de fallas en AFIP)
Es recomendable establecer la propiedad LanzarExcepciones a Falso y comprobar el valor deExcepcion (ver arriba) que generalmente informaraacute el error del sistema operativo por timeout Varioswebservices de AFIP tienen un meacutetodo Dummy que se pueden combinar con el timeout para detectar si elservidor de AFIP esta funcionando correctamente o no (justamente ese meacutetodo tambieacuten puede fallar desdeAFIP y es necesario controlar el tiempo de espera para un chequeo raacutepido)
Ver Errores de Conectividad y Errores internos de AFIP para mayor informacioacuten sobre los problemasfrecuentes con la comunicacioacuten hacia los servidores de AFIP
Importante Si no se utiliza los paraacutemetros cache proxy wrapper y cacert deberiacutean ser pasados como stringvacio (no saltear) Para poder utilizar estos paraacutemetros se deberiacutea usar una versioacuten actualizada de loscomponentes (2015)
Verificacioacuten del Canal de Comunicacioacuten Seguro
Por nueva Especificacioacuten Teacutecnica WSAA 122(Requerimientos de canal seguro comunicacioacuten para los CEE WSAA y WSN) se debe verificar la identidaddel servidor de AFIP (transformando lo que antes era una sugerencia (no documentada) en una verificacioacutenobligatoria de comprobar el certificado y URL del servidor)
Time-Out 12
Para ello los meacutetodos Conectar reciben dos paraacutemetros adicionales (actualmente solo para uacuteltimasversiones de desarrollo de WSAA 204 y WSFEv1 112 o superiror)
wrapper libreriacutea http con soporte avanzado de ssl (por el momento pycurl)bull cacert ruta al certificado de la autoridad certificante a verificar geotrustcrt ocomodocrt Puede utilizar el archivo con ambos certificados afip_ca_infocrt que lomantenemos actualizado con todos los certificados requeridos
bull
IMPORTANTE es recomendable empezar a utilizar el archivo geneacuterico de entidades certificantes pasandocacert=True o cacert=default De este modo si AFIP cambia el certificado o se vence algunaCA es probable que el nuevo certificado esteacute en el archivo generico por lo que no habriacutea que modificar elcoacutedigo y agregarlo manualmente (siempre que se este utilizando una versioacuten actualizada del proyecto)
Como solucioacuten provisoria se pueden descargar cacertpem desde el siguiente link httpscurlhaxxsedocscaextracthtml Esos son los certificados de Firefox (Mozilla) que contiene todos loscertificados existentes Se deberiacutea reemplazar por el archivo afip_ca_infocrt
Ejemplo en Visual Basic
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlwrapper = pycurl para situaciones especiales o versiones anteriores (instalador lt 27)proxy = formato usuarioclaveservidorpuertocacert = WSAAInstallDir + confafip_ca_infocrt Indicar ruta completa (directorio conf instalador gt 27)WSAAConectar(cache wsaa_url proxy wrapper cacert)
Ejemplo en RECEINI (solo se agrega los paraacutemetros de configuracioacuten CACERT y WRAPPER el resto seusa normalmente)
[WSAA]URL=httpswsaaafipgovarwsservicesLoginCmswsdlCACERT=confafip_ca_infocrtWRAPPER=pycurl
Nota De realizar la verificacioacuten debe agregar los paraacutemetros a todas las secciones que se conecten con loswebservices [WSAA] [WSFEv1] [WSLPG] etc y usar un instalador actualizado
Para verificar la Autoridad Certificante (CACERT) se recomienda probar el uacuteltimo ejemplo interactivo(cambiando httplib2 por pycurl para validar el nuevo certificado de wsaa) Para maacutes informacioacuten ver EjemploInteractivo de Autenticacioacuten (requiere instalacioacuten)
De encontrarse alguna inconsistencia el meacutetodo Conectar devolveraacute falso y en Excepcioacuten estaraacute el motivo deerror
No verifica el certificado (60 SSL certificate problem verify that the CAcert is OK Details error14090086SSLroutinesSSL3_GET_SERVER_CERTIFICATEcertificate verify failed)
bull
No verifica URL (51 SSL certificate subject namewsaahomoafipgovar does not match target host namewsaahomoafipgobar)
bull
El archivo de autoridades certificantes (paraacutemetro cacert) es incorrecto SSLError [Errno185090050] _sslc344 error0B084002x509 certificate
bull
Verificacioacuten del Canal de Comunicacioacuten Seguro 13
routinesX509_load_cert_crl_filesystem lib error (77 )SSLHandshakeError [ SSL CERTIFICATE_VERIFY_FAILED ] certifiacutecateverify failed (_sslc581 ) o WindowsError [Error 2] El sistema nopuede encontrar el archivo especificado IOError [Errno 2] No suchfile or directory (usar alternativamente confafip_ca_infocrt)
Se utiliza una libreriacutea de transporte distinta (pycurl) y posiblemente sea reemplazada en el futuro por lo querecomendamos dejar parametrizado este tema para evitar inconvenientes (pudiendo usar cualquier libreriacutea httpyo deshabilitar la comprobacioacuten de autoridad certificante al no pasarle los nuevos paraacutemetros a Conectarpara mantener compatibilidad con versiones anteriores yo en caso de que AFIP instale un certificadoincompatible en sus servidores)
Tabla comparativa Webservices
A continuacioacuten se presenta un resumen de webservices herramientas atributos y meacutetodos soportados
Caracteriacutestica WSFE v0 WSFE v1 v11 v2 v26 WSBFE v0 y v1 WSFEX v0 y v1 WSMTXCA
Normativa AFIP RG2485RG2485 RG2926 RG2959RG2975 RG3067 RG3571RG3668 RG3749 RG3779
RG2557 RG2758 RG3066RG3689 RG2904 RG2926 RG3536
Reacutegimen Mercado Internooriginal
Mercado interno (sin informardetalle)
Bono Fiscal - Bienes deCapital Exportacioacuten Mercado Interno (informar detalle
codificacioacuten de artiacuteculos)Clases de Facturas A B C M A B C M A B E A B
Sujetos comprendidos RI (obsoleto desde172011)
Responsables InscriptosExentos y MonotributoReacutegimen General
ResponsablesInscriptos inscriptos enla Secretariacutea deComercio
Exportadores inscriptosen los RegistrosEspeciales Aduaneros(V1 obligatorio desde31122011)
Responsables Inscriptos Notificadospor Juez Administrativo AFIP
Objeto COM(Windows) WSFE WSFEv1 WSBFE o WSBFEv1 WSFEX o WSFEXv1 WSMTXCA
Biblioteca COM(Windows) wsfedll wsfev1dll pyafipwsdll o
wsbfev1dllpyafipwsdll owsfexv1dll wsmtxdll
Modulo Python(Linux) wsfepy wsfev1py wsbfepy o wsbfev1py wsfexpy o wsfexv1py wsmtxpy
Herramienta siacutemilSIAPRECE(WindowsLinux)
receexe recepy rece1exe rece1py recebexe recebpy recexexe recexpy recemexe recempy
Informacioacuten General PyAfipWs Proyecto Version 1 Bonos FiscalesElectroacutenicos
Factura ElectroacutenicaExportacioacuten Proyecto Matrix
DocumentacioacutenTeacutecnica (Manual) WSFE WSFEv1 WSBFE WSFEX WSMTXCA
Nombre de servicioparaWSAACreateTRA
wsfe wsfe wsbfe wsfex wsmtxca
Meacutetodo Solicitud deAutorizacioacuten CAE oinformacioacuten deCAEA
Aut (CAE) CAESolicitar CAEARegInformativo
Authorize (CAE) Authorize (CAE) AutorizarComprobante InformarComprobanteCAEA
Tabla comparativa Webservices 14
Meacutetodos para CAEA(anticipado)
CAEASolicitarCAEAConsultar
SolicitarCAEAConsultarCAEAEntreFechasConsultarCAEA (emulado)
Campo ID(identificador uacutenico) en Aut en Authorize en Authorize
Reproceso siacute (realizado por AFIP) automaacutetico (emulado en lainterfaz) siacute (realizado por AFIP) siacute (realizado por AFIP) automaacutetico (emulado en la interfaz)
Campoproductosservicios presta_serv=SN concepto=123 tipo_expo=123 concepto=123
Campomonedacotizacioacuten moneda_id moneda_ctz imp_moneda_id
imp_moneda_ctz moneda_id moneda_ctz moneda_id moneda_ctz
MeacutetodoCrearFactura oAut
id presta_servtipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_totalimp_tot_concimp_neto impto_liqimpto_liq_rniimp_op_exfecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta
concepto tipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_total imp_tot_concimp_neto imp_iva imp_tribimp_op_ex fecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz
tipo_doc nro_doczona tipo_cbtepunto_vta cbte_nrofecha_cbte imp_totalimp_neto impto_liqimp_tot_concimpto_liq_rniimp_op_ex imp_percimp_iibbimp_perc_munimp_internosimp_moneda_idImp_moneda_ctz
tipo_cbte punto_vtacbte_nro fecha_cbteimp_total tipo_expopermiso_existentedst_cmp clientecuit_pais_clientedomicilio_clienteid_impositivomoneda_id moneda_ctzobs_comerciales obsforma_pago incotermsidioma_cbteincoterms_dsfecha_pago)
concepto tipo_doc nro_doctipo_cbte punto_vta cbt_desdecbt_hasta imp_total imp_tot_concimp_neto imp_subtotal imp_tribimp_op_ex fecha_cbtefecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz obs
MeacutetodoAgregarItem(detalle de artiacuteculo)
ncm sec ds qtyumed precio bonifiva_id imp_total
codigo ds qty umedprecio imp_total bonif
u_mtx cod_mtx codigo ds qtyumed precio bonif cod_ivaimp_iva imp_subtotal
MeacutetodoAgregarCbteAsoc(comprobantesasociados)
tipo_cbte pto_vta nro_cbteCUIT fecha
tipo_cbte pto_vtanro_cbte cuit_cbte tipo_cbte pto_vta nro_cbte fecha
MeacutetodoAgregarPermiso(permisos deembarque)
permiso_id pais_dst
MeacutetodoAgregarIVA(subtotales de aliacutecuotade iva)
iva_id base_imp importe iva_id base_imp importe
MeacutetodoAgregarTributo(otros impuestos)
tributo_id ds base_imp alicimporte tributo_id ds base_imp alic importe
Meacutetodo para consultarpuntos de ventahabilitados
ParamGetPtosVentaConsultarPuntosVentaCAEConsultarPuntosVentaCAEA
Meacutetodo pararecuperar un
CompConsultar GetCMP GetCMP ConsultarComprobante
Tabla comparativa Webservices 15
comprobanteMeacutetodo para obteneruacutetlimo nordmcomprobante
RecuperaLastCMP CompUltimoAutorizado GetLastCMP GetLastCMP CompUltimoAutorizado
Meacutetodos para obtenertablas de paraacutemetros
ParamGetTiposCbteParamGetTiposConceptoParamGetTiposDocParamGetTiposIvaParamGetTiposMonedasParamGetTiposOpcionalParamGetTiposTributosParamGetCotizacionParamGetPtosVenta
GetParamMonGetParamTipoCbteGetParamUMedGetParamTipoIVAGetParamNCM
GetParamMonGetParamTipoCbteGetParamTipoExpoGetParamIdiomasGetParamUMedGetParamIncotermsGetParamDstPaisGetParamDstCUITGetParamCtz
ConsultarComprobanteConsultarTiposComprobanteConsultarTiposDocumentoConsultarAlicuotasIVAConsultarCondicionesIVAConsultarMonedasConsultarUnidadesMedidaConsultarTiposTributoConsultarCotizacionMoneda
SEUO
Notas Generales
Convencioacuten de nombres si bien por transparencia se tratoacute de utilizar los nombres de los meacutetodosdefinidos en las especificaciones teacutecnicas se han cambiado los nombres de paraacutemetros y meacutetodosauxiliares para simplificar y unificar las interfaces manteniendo cierta coherencia entre los distintoswebservices por lo que algunas denominaciones internas pueden variar respecto a lasespecificaciones teacutecnicas de AFIP
bull
Esta tabla contiene un resumen de las consideraciones generales revisar la normativa vigenteespecificaciones y documentacioacuten teacutecnica actualizada para contemplar los casos particulares Ademaacutesse respetan las descripciones de servicios (WSDL) por ej si bien AFIP publica la especificacioacutenteacutecnica RG 2485 - Manual para el desarrollador V25 el webservice sigue siendo WSFEv1 ver RG 2485 - WSFEV1 - Manual para el desarrollador V26 RG 2904 - WSMTXCA - Manual para elDesarrollador - V02 RG 2758 - wsfex - Manual del desarrollador - V011 WSBFEV1 BonosFiscales Electroacutenicos Manual para el desarrollador V11
bull
Todas las facturas generadas en PDF o formatos similares pueden incluir el detalle de las operaciones(artiacuteculos coacutedigos descripcioacuten precio unitario etc) independientemente de lo que obligue ainformar AFIP en cada webservice No se podriacutea optar por utilizar el WSMTXCA (con detalleRG2904) si no ha recibido notificacioacuten por juez administrativo de AFIP en general corresponde elWSFEv1 (sin detalle RG2485 etal) para la mayoriacutea de los contribuyentes Para emitir facturas conCAEA (coacutedigo de autorizacioacuten electroacutenico anticipado) se deben cumplir ciertas condiciones(cantidad miacutenima de facturas por mes) en general solo aplicable a Auto-Impresores y GrandesContribuyentes
bull
La numeracioacuten de los comprobantes comienza de 1 por cada punto de venta y tipo de comprobante(no se comparten talonarios como con la facturacioacuten tradicional) Incluso cada webservicegeneralmente requiere dar de alta un punto de venta exclusivo No se puede continuar la numeracioacutenprevia ni de otro webservice
bull
La fecha de los comprobantes no puede ser anterior al uacuteltimo emitido pero generalmente se puedeautorizar facturas con fecha entre 5 a 10 diacuteas en el pasado o en el futuro por contingencias(dependiendo del webservice y si es servicios o productos) Ver meacutetodo de consultas y recupero decomprobantes No se podraacute emitir comprobantes antes de la fecha indicada en el formulario deEmpadronamiento (por ej si se eligioacute el inicio en Julio2015 no se pueden emitir facturas con fechade junio)
bull
En caso de inoperatividad del servidor de AFIP se deberiacutea emitir facturas tradicionales y presentar unformulario multinota en la agencia indicando las facturas realizadas manualmente y dejandoconstancia del motivo Para maacutes informacioacuten ver RG2485 Art 33
bull
Notas Generales 16
Se debe confirmar los temas de normativaslegislacioacuten con un Contador Puacuteblico Nacional debidamentehabilitado y con experiencia en el tema
Disclaimer - Aviso Legal
Toda informacioacuten es proporcionada a Titulo Informativo El programa es software libre liberado bajo licenciaGPLv3 y se entrega como estaacute sin garantiacuteas expliacutecitas ni implicitas de ninguacuten tipo incluyendo sin limitacioacutenpeacuterdida de ganancias interrupcioacuten de negocios peacuterdida de programas u otros datos en sistemas decomputacioacuten o cualquier otro reclamo Al usarlo acepta hacerlo bajo su propia responsabilidad conociendo lanormativa y reglamentaciones existentes
Instalacioacuten
Descargas
Bajar y Ejecutar el instalador
Importante ver Actualizaciones para novedades importantes instaladores y cambios recientes
Recomendado Instalador unificado (conteniendo la interfaz para todos los servicios web para homologacioacuten-solo evaluacioacutenpruebas-)
Windows 32 bits
PyAfipWs-272171-32bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSFEv1 WSMTXCAWSFEXv1WSBFEv1 WSCT WSFECred WSCDC WSCOC PyFEPDF PYI25 y PYEMAILWS_SR_Padron COT IIBB Arba Granos -WSLPG y WSCTG- Pecuarios- WSLSP WSLUMWSLTV Trazabilidad Medicamentos Trazabilidad de Productos Meacutedicos Trazabilidad dePrecursores Quiacutenicos Trazabilidad de Productos Agroquiacutemicos Fitosanitarios Trazabilidad deProductos Veterinarios) Recomendado para desarrolloevaluacioacuten
bull
PyAfipWs-271949-32bit+wsaa_211c+wsfev1_119a-typelibexe Instalador de desarrolloactualizado -para referenciar viacutea libreriacutea de tipos- (TypeLib) Soacutelo incluye WSAA y WSFEv1
bull
Windows 64 bits
PyAfipWs-271872-64bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSBFE WSFEv1 WSFEXv1WSMTXCA PyFEPDF PYI25 y PYEMAIL Granos -WSLPG y WSCTGv3- COT IIBB ArbaTrazabilidad Medicamentos y Agroquimicos) Recomendado para desarrolloevaluacioacuten
bull
Consultar por otros webservices y sistemas operativos
IMPORTANTE Los instaladores publicados son solo para evaluacioacuten por lo que pueden no estaractualizados con los uacuteltimos ajustes en los servidores yo ejemplos Ver instructivo Instalacioacuten Codigo Fuente( video explicativo) o consultar por soporte comercial
Los ejemplos completos del uso de la interfase en Visual Basic Visual Foxpro y otros lenguajes se puededescargar desde
Disclaimer - Aviso Legal 17
GitHub (repositorio actualizado) o Google Code (histoacuterico)bull
Para guias iniciales ver base de datos con ejemplos completos de WSFEv1 y WSFEX (implementacioacuten dereferencia)
factura_electronicamdb MS Access 2000 o sup programado en VBAbull pyafipwsmdb MS Access 97 programado en VBA (nuevo con FCE)bull pyafipws2kmdb MS Access 2000 o sup programado en VBA (versioacuten anterior)bull
IMPORTANTE las uacuteltimas versiones incorporan nuevas funcionalidades y deben ser testeadas con susistema antes de ser instaladas en produccioacuten De encontrar problemas de instalacioacuten (por causas del sistemaoperativo o similar) que impidan crear el objeto o conectarse al webservice se recomienda utilizar lasversiones anteriores o registrar manualmente los componentes de forma autoacutenoma con --register VerInstalacioacuten Manual para maacutes detalles Recordamos que este tipo de incidentes pueden ser consultados con elsoporte comercial o soporte comunitario ver Maacutes Informacioacuten
Incidencias Conocidas Dado que existen varias versiones dependiendo de que sistema operativo se utiliceen general no deberiacutea haber problemas de instalacioacuten pero puede haber cuestiones de permisos de acceso poliacuteticas de seguridad en algunos entornos Windows (por ej Permission Denied) En esos casosrecomendamos instalarlo como Administrador o darle permisos de modificacioacuten (Propiedades Solapa deSeguridad) al usuario del sistema operativo en la carpeta del componente (generalmente CArchivos deprogramaPyAfipWs o Program Files) Ver Permisos en Windows para mayor informacioacuten
Se recomienda desinstalar cualquier versioacuten anterior y borrar la carpeta de instalacioacuten para evitar archivostemporales residentes o temas similares
Instalacioacuten Manual Avanzada
Para la interfaz COM cada webservice tiene su DLL o EXE que puede ser instalado manualmente (norecomendado en general ya que no verifica si el archivo esta en uso no desinstala automaacuteticamente la versioacutenanterior entre otros temas que pudieran surgir)
Instalacioacuten manual pyafipwsexe --register o utlizar regsvr32 pyafipwsdllbull Desinstalacioacuten manual pyafipwsexe --unregister o utlizar regsvr32 upyafipwsdll
bull
El proceso es similar para instalar la interfaz a otros webservices (cambiando pyafipws por wsfev1wsfexv1 etc seguacuten corresponda por ej wsfexv1exe --register) Tambieacuten se puede registrardirectamente con python python wsaapy --register
Ambos comandos de instalacioacuten son similares pero instalan la interfaz de manera distinta
Embebida (InProcServer) registrando la biblioteca DLL con regsvr32 cuando se invoque a lainterfaz se carga en el mismo proceso del programa principal
bull
Independiente (LocalServer) ejecutando el programa EXE con --register cuando se invoque a lainterfaz se crea un nuevo proceso externo al programa principal (se veraacute el ejecutable por ej en eladministrador de tareas)
bull
NOTA solo es necesario registrar el EXE o la DLL (no ambas) En general es conveniente registrar las DLLpara que se cargue como una libreriacutea compartida embebida (InProcServer) y evitar temas de
Descargas 18
permisosfirewall ya que el EXE registra un proceso independiente (LocalServer) con sus implicancias(pueden surgir temas de permisosfirewall en ciertos sistemas operativos pero se ejecuta independientementeeliminando inconvenientes de dependencias y errores de carga)
Instalacioacuten Silenciosa (Desatendida)
Si bien el instalador muestra un asistente para la instalacioacuten (seleccioacuten del idioma licencia y directorioprogreso) es posible instalarlo sin intervencioacuten del usuario en segundo plano sin mostrar pantalla algunacon
instalador-PyAfipWs-125c-homoexe S D=CPyAfipWS
Las opciones son
S indica instalacioacuten silenciosabull D indica el directorio de instalacioacutenbull
Guiacutea de Instalacioacuten
La interfase se instala automaacuteticamente en CArchivos de Programa en el directorio elegido en elsegundo paso de instalacioacuten como se describe a continuacioacuten
Firma Digital (Editor Comprobado)
Como paso previo de seguridad al ejecutar el instalador verificar que el mismo haya sido firmado pornosotros debiendo aparecer
Editor Comprobado Sistemas Agiles (Mariano Reingart)bull
Consultar en caso de no comprobarse (o mencionar Editor Desconocido) ya que no seriacutea un instaladorcompilado originalmente por nosotros sin alteraciones
Paso 1 Seleccionar idioma
Idiomas disponibles I
Spanish espantildeol (predeterminado)bull English ingleacutesbull
Paso 2 Licencia
Para utilizar el software debe leer y aceptar la licencia
Paso 3 Direcorio de instalacioacuten
De manera predeterminada la interfaz se instalaraacute en una carpeta bajo el directorio estaacutendard de windows (porej CArchivos de Programa o CProgram Files) Se recomienda instalarla directamente en
Instalacioacuten Manual Avanzada 19
el directorio raiz (por ejCPYAFIPWS) para simplificar el acceso a las herramientas por linea de comandos
Paso 3 Finalizar instalacioacuten
Por uacuteltimo el instalador realizaraacute la instalacioacuten
Desinstalar versiones anterioresbull Crear el directorio de destinobull Extraer y copiar los archivosbull Crear desinstaladorbull Copiar configuracioacuten (RECEINI si corresponde)bull Registrar DLLbull
Puede ver el avance y estado final presionando el botoacuten Ver Detalles
Referenciar TypeLib
Ciertos instaladores (-typelib) incluyen una libreriacutea de tipos que es posible referenciar por ej en VB
Importante En general no es necesario referenciar el componente Invocando CreateObject deberiacuteafuncionar y devolveriacutea el objeto dinaacutemico en la mayoriacutea de los lenguajes de programacioacuten (VB VFP etc)
Maacutes informacioacuten
Soporte Comercial (asesoramiento inicial sin cargo de cortesiacutea -limitado y sin compromisos-)Web httpwwwsistemasagilescomartracwikiPyAfipWsdiams Por email facturaelectronicasistemasagilescomardiams Telefoacutenicamente (011) 4450-0716 y (011) 15-3048-921diams
bull
Soporte comunitario (gratuito)Sitio del proyecto httpwwwpyafipwscomardiams Grupo de noticiasdiscusiones httpgroupsgooglecomgrouppyafipwsdiams Coacutedigo Fuente httpsgithubcomreingartpyafipws (actual) y httpcodegooglecomppyafipws (histoacuterico)
diams
Incidencias httpsgithubcomreingartpyafipwsissuesdiams
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA)
Este servicio es necesario para acceder al resto de los servicios de negocios (ej Factura Electroacutenica) ofrecidospor la AFIP
Se debe generar un Ticket de Requerimiento de Acceso (TRA) firmarlo criptograacuteficamente (generando unmensaje CMS) que es enviacutea al servicio web para obtener un Ticket de Acceso (TA)
Esta interfase crea el mensaje en XML lo firma criptograacuteficamente y lo codifica en base-64 como lo requierela AFIP por lo que en general no es necesario realizar ninguno de estos pasos
Paso 3 Direcorio de instalacioacuten 20
Para maacutes informacioacuten oficial ver especificaciones teacutecnicas del WSAA y Arquitectura WS en el sitio de laAFIP
Importante es requerido tramitar los certificados para poder operar este webservice Para maacutes informacioacutenver Instructivos sobre Certificados
Objeto
El objeto COM se crea invocando a CreateObject(WSAA)bull
Meacutetodos
CreateTRA(service ttl) recibe el nombre del servicio (wsfe wsbfe wsfex wsctg etc) y eltiempo de vida (en segundos por defecto 2400) y devuelve un ticket de requerimiento de acceso(string con formato xml) Se puede revisar o modificar el xml devuelto (en general no es necesario)
bull
SignTRA(tra certificado clave_ privada passphrase) recibe el ticket derequerimiento de acceso (string con formato xml creado previamente) y las ubicaciones delcertificado y clave privada (o el contenido de los mismos) Firma el ticket y devuelve el mensaje CMS(string con formato xml) Importante El paraacutemetro opcional passphrase permite protejer la claveprivada por contrasentildea (Disponible a partir de la versioacuten 208) Tambieacuten se puede pasar el contenidode los archivos (como string) en certificado y clave_ privada (pudiendo ser guardados enla base de datos u otro tipo de almacenamiento)
bull
CallWSAA(cms url_webservice) Recibe el mensaje CMS (string con formato xml) y laURL del webservice Se conecta con el servidor remoto ejecuta el meacutetodo remoto LoginCMS ydevuelve el Ticket de Acceso (TA string con formato xml) generado por la AFIP Si no se especifiacutecaurl se utiliza servidores de homologacioacuten
bull
Conectar(cache url_webservice_wsdl proxy wrapper cacert) Nuevo Establece la conexioacuten con el servidor remoto recibe el directorio de archivos temporales la URL delWSDL (descripcioacuten del webservice) y proxy en formato usuarioclaveservidorpuerto Si no seespecifiacuteca url se utiliza servidores de homologacioacuten Parametros adicionales optativos wrapper es lalibreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor (CA)
bull
LoginCMS(cms) Nuevo Recibe el mensaje CMS (string con formato xml) ejecuta el meacutetodoremoto LoginCMS y devuelve el Ticket de Acceso (TA string con formato xml) generado por laAFIP Debe conectarse previamente con Conectar Establece los atributos Token Sign
bull
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido por defecto el ticket deacceso)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Expirado(fecha) Nuevo recibe una fecha (por defecto la fecha de expiracioacuten del uacuteltimo ticketde acceso generado) y verifica contra el reloj del equipo si dicha fecha ha expirado (en cuyo casodevuelve verdadero)
bull
Autenticar(service crt key [wsdl proxy wrapper cacert cachedebug]) Nuevo Meacutetodo unificado para obtener el ticket de acceso Almacena temporalmente elticket de acceso en un archivo en el directorio cache (debe tener permisos de escritura en esedirectorio) y automaacuteticamente lo reutiliza o solicita uno nuevo en caso de que no haya vencidoDisponible a partir de la versioacuten 207
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA) 21
Se recomienda comenzar a utilizar Conectar y LoginCMS en reemplazo de CallWSAA ya que los nuevosmeacutetodos tienen mejor manejo de errores pueden reutilizar la conexioacuten etc
Meacutetodos para Certificados
Los meacutetodos adicionales para el manejo de certificado permiten automatizar el procesamiento y generarpedidos de certificado directamente con este componente sin necesidad de utilizar comandos externosNuevo Disponible a partir de la versioacuten 210
AnalizarCertificado(crt) Carga un certificado digital y extrae los campos maacutesimportantes (establece propiedades Identidad Caducidad Emisor)
bull
CrearClavePrivada(self filename=privadakey key_length=2048pub_exponent=0x10001 passphrase=) Crea una clave privada (private key) necesariapara generar un certificado Queda referenciada internamente para poder crear el CSR (ver siguientemeacutetodo) por lo que las dos operaciones deben hacerse en la misma instancia Puede utilizarse unacontrasentildea (passphrase) para mayor seguridad (especialmente si la clave privada va a alojarse enuna carpeta compartida)
bull
CrearPedidoCertificado(self cuit= empresa=nombre=pyafipwsfilename=empresacsr) Crear un certificate signing request(X509 CSR) - pedido de certificado a gestionar por Clave Fiscal de AFIP para obtener el crt Se debeindicar el CUIT del representante nombre de la empresa (tal cual aparece en la constancia deinscripcioacuten) nombre de fantasia alias del certificado (identificando punto de venta sistema defacturacioacuten etc) y nombre del archivo a generar (recomendable ruta absoluta a una carpeta conpermisos de escritura)
bull
wsaaAnalizarCertificado(reingartcrt)print wsaaIdentidadprint wsaaCaducidad (Fecha de vencimiento)print wsaaEmisorprint wsaaCertX509
Por linea de comando puede ejecutarse el moacutedulo wsaapy con el meacutetodo --analizar
WSAA_cliexe --analizar reingartcrt reingartkey
Atributos
Token el el coacutedigo de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Sign el la firma de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Version versioacuten de la interfase (ej 16)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Identidad Caducidad Emisor CertX509 Nuevo campos del certificado analizado(actualizacioacuten 210 o posterior)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Meacutetodos 22
Ejemplo
Dim WSAA As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA)service = wsfe servicio a accederttl = 2400 tiempo de vida en segundostra = WSAACreateTRA(service ttl) Especificar la ubicacion de los archivos certificado y clavesPath = CurDir() + Certificado = reingartcrt certificado es el firmado por la afipClavePrivada = reingartkey clave privada usada para crear el cert
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
WSAALanzarExcepciones = False revisar Excepcion para controlar errores
Llamar al web service para autenticar anteriormente ta = WSAACallWSAA(cms httpswsaaafipgovarwsservicesLoginCms) Hologacioacuten ahora cache = Directorio para archivos temporales (dejar en blanco para usar predeterminado)wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl homologacioacutenproxy = usar usuarioclaveservidorpuertook = WSAAConectar(cache wsdl proxy)ta = WSAALoginCMS(cms) otener ticket de acceso
If WSAAExcepcion ltgt Then MsgBox WSAAExcepcion vbCritical ExcepcioacutenEnd If
Obtener Token y Sign de autorizacioacutenToken = WSAATokenSign = WSAASign
El Ticket de Acceso contiene el Token (coacutedigo) y Sign (firma) son los elementos que se utilizan en los otrosservicios web para lograr acceso a los mismos
Estos datos se pueden usar por un periacuteodo de tiempo (40 minutos modificable ver Reutilizacioacuten de Ticket deAcceso) siendo necesario volver a invocar el WSAA solo al finalizar este periacuteodo para obtener nuevos Tokeny Sign
Errores
El WSAA informa errores alfanumeacutericos (ErrNumber vbObjectError = 0) debiendo verificar la descripcioacuten(ErrDescription) Entre ellos los maacutes comunes son
cmscertexpired cmscertinvalid cmscertuntrusted El certificado no fue firmado por la AFIPexpiroacute es invaacutelido no se confiacutea en su emisor o no coincide la fuente Se debe revisar o emitircorrectamente los certificados Ver traacutemite de Generacioacuten
bull
xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid El tiempo degeneracioacutenexpiracioacuten es invaacutelido Debe sincronizar relojes con el servidor de la AFIP En Windows
bull
Ejemplo 23
propiedades del reloj habilitar Hora de Internet ingresar timeafipgovarwsnunavailable wsaaunavailable servicio no disponible momentaacuteneamentebull coenotAuthorized Computador no autorizado a acceder los servicios de AFIP Ver traacutemite deAsociacioacuten
bull
cmscertuntrusted Certificado no emitido por AC de confianza Revisar URL para ambiente correcto(produccioacutenhomologacioacuten) y Comprobacioacuten de Autenticacioacuten
bull
wsnnotFound Servicio informado inexistente se debe crear el ticket para un servicio vaacutelido (wsfewsfex etc)
bull
coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (verreutilizacioacuten del ticket de acceso abajo)
bull
Para maacutes errores frecuentes ver Falla SOAP WSAA
Reutilizacioacuten de Ticket de Acceso
Ante problemas de timeout y java socket read failed al intentar solicitar ticket de acceso (WSAA) ons1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (en generalpor sobrecarga o limitacioacuten de AFIP) es posible mitigar el tema reusando un ticket de acceso (token y sign)por hasta 12 hs (40 minutos por defecto) estableciendo el tiempo de vida del ticket pasandolo en el segundoparaacutemetro de CreateTRA (ttl en segundos en este manual esta documentado en secciones previas)
Por ej para un tiempo de vida de 10 hs (103600 segundos valor recomendado para evitar problemas desincronizacioacuten de relojes)
tra = WSAACreateTRA(wsfe 36000)
Luego de solicitar el ticket de acceso el Token y Sign puede ser usado por el periacuteodo especificado (dichosvalores pueden almacenarse en memoria en un archivo o base de datos etc)
Importante se puede guardar WSAAToken y WSAASign en una variable global y luego reutilizarlocada vez que se genera una factura
luego de llamara WSAALoginCMS o WSAACallWSAA o WSAAAutenticar
token = WSAATokensign = WSAASign
guardar token y sign en la base de datos archivo o una variable global
antes de llamar a WSFEv1CAESolicitar WSFEXv1Authorize o similar
WSFEv1Token = tokenWSFEv1Sign = sign
En general no es necesario verificar la fecha del ticket de acceso ya que en general es vaacutelido por 12 horas
Igualmente desde las versiones actualizadas de WSAA (202 o superior) es posible llamar al meacutetodoWSAAExpirado() antes de utilizar el ticket de acceso y este devolveraacute Verdadero si el ticket de accesosigue siendo vaacutelido (dada la fecha del reloj del equipo) o Falso si ha vencido su plazo y debe solicitarse unnuevo ticket de acceso
Errores 24
Por ejemplo luego de obtener el Token y Sign (ya sea por CallWSAA o LoginCMS) obtener y guardar lafecha de expiracioacuten
expiracion = WSAAObtenerTagXml(expirationTime)
Luego antes de usar el Token y Sign (por ej antes de llamar a WSFEv1 WSFEX etc) preguntar si el TA esvaacutelido (no ha expirado)
expiro = WSAAExpirado(expiracion)
Si expiro es True se debe generar otro ticket de acceso porque ha vencido su validez (con este meacutetodo sepuede guardar y verificar independientemente la fecha de expiracioacuten por cada servicio a usar wsfe wsfexwsbfe wsmtxca etc)
Si se comparte el certificado entre distintas maacutequinas o programas debe compartirse el ticket de acceso (porej guardandolo en un archivo o base de datos) y realizar esta verificacioacuten en cada instancia
Ejemplo completo en
reusar_ticket_accesobas (VB) y reusar_ticket_acceso_avanzadoprg (VFP) maacutes avanzadoguardando el TA en un archivo (y poder compartirlo por red o entre varios programas)
bull
reusar_ticket_accesoprg (VFP) y reusar_ticket_acceso_simplebas (VB) simplificado usando el TAen memoria
bull
Nota No es necesario guardar el ticket de acceso completo en un archivo para reutilizarlo Este ejemplo esuacutetil si se debe compartir el ticket entre diferentes programas u equipos en una red Si se usa en un soloprograma y este permanece abierto se puede mantener el valor del Token y Sign directamente en memoria(por ej en una variable) y reusarlo por hasta 12 hs (generalmente solicitandolo al iniciar el programa ymanteniendolo por una jornada de trabajo completa) Tambieacuten se podriacutea almacenar el valor de Token ySign en una base de datos o similar
Ejemplo simple reutilizacioacuten de TA
Ejemplo completo de reuso (usando el ticket de acceso en memoria)
Function Autenticar(TA as String = ) as String Procedimiento para autenticar con AFIP y reutilizar el ticket de acceso Llamar antes de utilizar WSAAToken y WSAASign (WSAA debe estar definido a nivel de moacutedulo)Dim ok expiracion solicitar token sign
cargar ticket de acceso previo (si no se mantiene WSAA instanciado en memoria)If TA ltgt Then
ok = WSAAAnalizarXml(TA)End If
revisar si el ticket es vaacutelido y no ha expirado expiracion = WSAAObtenerTagXml(expirationTime) DebugPrint Fecha Expiracion ticket expiracion
If IsNull(expiracion) Then solicitar = True solicitud inicial
Else solicitar = WSAAExpirado(expiracion) chequear solicitud previa
End If
Reutilizacioacuten de Ticket de Acceso 25
If solicitar Then Generar un Ticket de Requerimiento de Acceso (TRA)
tra = WSAACreateTRA()
uso la ruta a la carpeta de instalaciograven con los certificados de prueba ruta = WSAAInstallDir + DebugPrint ruta ruta
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra ruta + reingartcrt ruta + reingartkey) Cert Demo
ok = WSAAConectar( httpswsaahomoafipgovarwsservicesLoginCms) Homologacion
Llamar al web service para autenticar TA = WSAALoginCMS(cms)
Else DebugPrint no expirado Reutilizando
End If DebugPrint WSAAObtenerTagXml(destination)
Obtener las credenciales del ticket de acceso (desde el XML por si no se conserva el objeto WSAA) token = WSAAObtenerTagXml(token) sign = WSAAObtenerTagXml(sign)
Al retornar se puede utilizar token y sign para WSFEv1 o similar Devuelvo el ticket de acceso (RETURN) para que el programa principal lo almacene si es necesario
Autenticar = TAEnd Function
Importante en este caso WSAA debe ser un objeto global y persistente (al menos por lo que dure elprograma en produccioacuten) no se debe instanciar por cada llamada a Autorizar de lo contrario se perderaacuten elToken y Sign no reutilizando el ticket de acceso Si esto no es posible se debe persistir el Ticket de Accesoen un archivo o base de datos compartida
Ejemplo avanzado reutilizacioacuten de TA
Ejemplo completo de reuso (almacenando el ticket de acceso en un archivo tambieacuten podriacutea usarse una tablaen base de datos sesioacuten u otro medio durable)
inicializo las variablesToken = Sign =
busco un ticket de acceso previamente almacenadoIf Dir(taxml) ltgt Then
leo el xml almacenado del archivo Open taxml For Input As 1 Line Input 1 ta_xml Close 1
analizo el ticket de acceso previo ok = WSAAAnalizarXml(ta_xml)
If Not WSAAExpirado() Then puedo reusar el ticket de acceso
Token = WSAAObtenerTagXml(token) Sign = WSAAObtenerTagXml(sign)
End IfEnd If
Si no reuso un ticket de acceso solicito uno nuevoIf Token = Or Sign = Then
Ejemplo simple reutilizacioacuten de TA 26
Generar un Ticket de Requerimiento de Acceso (TRA) tra = WSAACreateTRA(wsfe 43200) 360012hs
Especificar la ubicacion de los archivos certificado y clave privada cert = reingartcrt certificado de prueba clave = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra cert clave)
If cms ltgt Then Llamar al web service para autenticar (cambiar URL para produccion)
wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl ok = WSAAConectar( wsdl) ta_xml = WSAALoginCMS(cms)
If ta_xml ltgt Then guardo el ticket de acceso en el archivo
Open taxml For Output As 1 Print 1 ta_xml Close 1
End If Token = WSAAToken Sign = WSAASign
End If reviso que no haya errores
DebugPrint Excepcion WSAAExcepcionIf WSAAExcepcion ltgt Then
DebugPrint WSAATracebackEnd If
End If
Imprimir los datos del ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint Token + TokenDebugPrint Sign + Sign
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA
Importante A partir de la actualizacioacuten 207 es posible utilizar el meacutetodo unificado Autenticar (queautomaacuteticamente contempla el tema de reutilizacioacuten al guardar el Ticket de Acceso en un archivo temporal enel directorio cache) en conjuncioacuten con SetTicketAcceso
Crear la instancia (usar CreateObject en VB y similares)wsaa = WSAA()
servidor de AFIP para homologacioacuten (cambiar para produccioacuten)wsaa_url = httpswsaahomoafipgovarwsservicesLoginCmswsdl
parametros opcionalesproxy = solo usar si hay servidor intermediowrapper = httplib2 (default) pycurl (depende proxy)cacert = confafip_ca_infocrt autoridades certificantes (servidores)cache = directorio archivos temporales (verificar permisos)debug = False depuracioacuten interna (en VB es palabra reservada usar otro nombre)
obtener el TA para pruebasta = wsaaAutenticar(wsfe reingartcrt reingartkey wsaa_url proxy wrapper cacert cache debug)
utilizar las credencialesprint wsaaTokenprint wsaaSign
establecer Ticket de Acceso en un solo paso (Nuevo meacutetodo)wsfev1SetTicketAcceso(ta)
Ejemplo avanzado reutilizacioacuten de TA 27
Nota dependiendo del sistema operativo deberaacute conceder permisos de acceso de escritura en la carpeta cachepara poder almacenar el ticket de acceso Tambieacuten es posible pasar el 8vo paraacutemetro cache de Autenticar conotro directorio para los archivos temporales Ver Permisos en Windows para maacutes informacioacuten
Obtencioacuten de Atributos Avanzados WSAA
En versiones recientes (204a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosdel ticket de acceso (uacutetiles para depuracioacuten y solucioacuten de errores)
Origen (Source) WSAAObtenerTagXml(source)bull Destino (Destination) WSAAObtenerTagXml(destination)bull ID Uacutenico WSAAObtenerTagXml(uniqueId)bull Fecha de Generacioacuten WSAAObtenerTagXml(generationTime)bull Fecha de Expiracioacuten WSAAObtenerTagXml(expirationTime)bull
Si ha ocurrido error (llamar previamente a WSAAAnalizarXml(XmlResponse) para analizar larespuesta)
Codigo de Fallo WSAAObtenerTagXml(faultcode)bull Mensaje de Fallo WSAAObtenerTagXml(faultstring)bull Servidor WSAAObtenerTagXml(ns3hostname)bull
Estos datos son uacutetiles para determinar problemas con el certificado ver Comprobacioacuten de AutenticacioacutenWSAA
Servicio Web de Factura Electroacutenica (WSFE)
Este servicio es ofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFE en el sitio de la AFIP
httpwswhomoafipgovarfiscaldocsWSFEWSFE-ManualParaElDesarrollador-090317pdf
Objeto
El objeto COM se crea invocando a CreateObject(WSFE)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA 28
UltNro() recuperar el uacuteltimo nuacutemero de transaccioacuten (id) Devuelve el uacuteltimo valor de secuenciautilizado al pedir autorizacioacuten Uso opcional
bull
Aut(id presta_serv tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto impto_liqimpto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago[fecha_serv_desde] [fecha_serv_hasta]) autoriza la emisioacuten de factura electroacutenicarecibe el id de secuencia (recuperado por UltNro) presta_serv en 1 si se esta facturando servicios (eneste caso es obligatorio el uso de la fecha de servicio desde y hasta) los datos de la factura a emitir ydevuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) Ver ejemplo para el detalle de losparaacutemetros
bull
RecuperaLastCMP(punto_venta tipo_comprobante) recibe el punto de venta y tipode comprobante (stringsenteros) devuelve el uacuteltimo nuacutemero de comprobante autorizado Usoopcional
bull
RecuperaQty() recupera cantidad maacutexima de registros de detalle (por el momento no es demayor utilidad ya que por simplicidad se enviacutea 1 registro de detalle por autorizacioacuten) Uso opcional
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Motivo Reproceso valores complementarios que retorna Autbull CbtDesde CbtHasta FechaCbte` nuacutemeros y fecha de comprobante autorizado queretorna Aut
bull
ImpTotal ImpNeto ImptoLiq` importes total neto e IVA que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 16)bull
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a realizar (ej Factura A solopara tipo_doc = 80 CUIT Facturas B por lote hasta $1000- etc)
bull
Ver especificaciones teacutecnicas del WSFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Meacutetodos 29
Ejemplo
Autorizar una factura electroacutenica nacional a modo de ejemplo (ficticia)
Crear objeto interface Web Service de Factura Electroacutenica
Set WSFE = CreateObject(WSFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEToken = WSAATokenWSFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSFECuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (servidor de homologacioacuten)ok = WSFEConectar(httpswswhomoafipgovarwsfeserviceasmx)
Llamo a un servicio tonto para obtener el estado (opcional)WSFEDummyDebugPrint appserver status WSFEAppServerStatusDebugPrint dbserver status WSFEDbServerStatusDebugPrint authserver status WSFEAuthServerStatus
Recupera cantidad maacutexima de registros (opcional)qty = WSFERecuperarQty()
Recupera uacuteltimo nuacutemero de secuencia IDLastId = WSFEUltNro()
Recupero uacuteltimo nuacutemero de comprobante (opcional)tipo_cbte = 1 punto_vta = 1LastCBTE = WSFERecuperaLastCMP(punto_vta tipo_cbte)
Establezco los valores de la factura o lote a autorizar 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000fecha_cbte = Fecha fecha_venc_pago = Fecha Fechas del periacuteodo del servicio facturado (solo si presta_serv = 1)fecha_serv_desde = Fecha fecha_serv_hasta = Fecha
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEAut(id presta_serv _ tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ impto_liq impto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desde fecha_serv_hasta) solo pasar si presta_serv=0MsgBox CAE amp cae amp Vencimiento amp WSFEVencimientoExit Sub
ManejoError Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipMsgBox ErrDescription vbCritical + vbRetryCancel _
Error amp (ErrNumber - vbObjectError) amp en amp ErrSource
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz (ver aclaracioacuten)
Ejemplo 30
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE)
Se debe llamar al meacutetodo Aut con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a UltNro puede utilizarse un dato local secuencial
bull
presta_serv 0 o 1 para indicar si es una factura de serviciosbull tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (1 Factura A 6 Factura B etc)bull punto_vta Nordm de punto de venta (debe estar autorizado)bull cbt_desde cbt_hasta Nordm de comprobante (si es un solo comprobante repetir Nordm)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 5 diacuteas)bull fecha_venc_pago Fecha liacutemite de vencimiento para el pago de la facturabull fecha_serv_desde fecha_serv_hasta Fechas del periacuteodo de servicios prestadobull
Ver todos los tipos de comprobante httpwswhomoafipgovarfiscaldocsWSFECodCpbtetxt
Ver todos los tipos de documentos httpwswhomoafipgovarfiscaldocsWSFECodDocIDtxt
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEResultado =A (Aceptado) y WSFEVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o los servidores de la AFIP no funcionan o nodevuelven la respuesta esperada
bull
cae = NULL El servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEResultado = R (Rechazado) y WSFEMotivo con los diversos motivos de rechazoproporcionados por el webservice
WSFEMotivo = 00 o NULL no hay error (solo como referencia)diams WSFEMotivo = 01 CUIT informada no es RIdiams WSFEMotivo = 02 CUIT no autorizada a facturar electroacutenicamentediams WSFEMotivo = 03 CUIT registra inconvenientes con domicilio fiscaldiams WSFEMotivo = 04 Punto de venta no se encuentra declaradodiams WSFEMotivo = 05 Fecha del comprobante incorrectadiams WSFEMotivo = 06 CUIT no puede emitir comprobantes clase Adiams WSFEMotivo = 07 para comprobantes clase A debe indicar CUITdiams WSFEMotivo = 08 CUIT informada es invaacutelidadiams WSFEMotivo = 09 CUIT informada no existe en el padroacutendiams WSFEMotivo = 10 CUIT informada no corresponde a un RIdiams WSFEMotivo = 11 el nordm de comprobante no es correlativo o fecha no correspondediams WSFEMotivo = 12 el rango informado se encuentra autorizadodiams WSFEMotivo = 13 LA CUIT INDICADA SE ENCUENTRA COMPRENDIDA EN ELREGIMEN ESTABLECIDO POR LA RESOLUCION GENERAL Ndeg 2177 YO EN ELTITULO I DE LA RESOLUCION GENERAL Ndeg 1361 ART 24 DE LA RG Ndeg 2177-
diams
bull
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE) 31
Para ver la lista completa de coacutedigos de motivos F136 httpwswhomoafipgovarfiscaldocsWSFEF136_MOTIVOStxt
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia En el caso de que la conexioacuten se interrumpa luego de que la AFIP registre la factura y antes deque la informacioacuten del CAE llegue al equipo la uacutenica alternativa es repetir la llamada a Aut con los mismosdatos (incluido el ID original) para obtener el CAE generado anteriormente En ese caso se WSFEReprocesoes S para indicar que el CAE se ha recuperado Por esto es importante guardar el ID o utilizar un dato local
Ver httpwswhomoafipgovarfiscaldocsWSFEWSFE-GuiaAdicionalParaElProgramadorpdf
Servicio Web de Bono Fiscal Electroacutenico (WSBFE)
EL WSBFE (Bonos Fiscales Electroacutenicos) es un Servicio Web de la AFIP para Facturas Electroacutenicas deBienes de Capital correspondiente al Artiacuteculo 3 de la Resolucioacuten General 25572009Este servicio esofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de cada item
A su vez el WSBFE devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva producto seguacuten NCM zonas unidades de medida Estas tablaspueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha devigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia delWSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSBFE en el sitio de la AFIP
httpwwwafipgovarwsWSBFEWSBFE-ManualParaElDesarrolladorpdf
httpwwwafipgovarwsWSBFEWSBFE-GuiaAdicionalParaElProgramadorpdf
La programacioacuten de la interfase WSBFE es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSBFE)bull
Servicio Web de Bono Fiscal Electroacutenico (WSBFE) 32
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(tipo_doc nro_doc zona tipo_cbte punto_vtacbte_nro fecha_cbte imp_total imp_neto impto_liq imp_tot_concimpto_liq_rni imp_op_ex imp_perc imp_iibb imp_perc_munimp_internos imp_moneda_id Imp_moneda_ctz) crea internamente una factura paraluego poder autorizarla recibe los datos de la factura a emitir Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarItem(ncm sec ds qty umed precio bonif iva_idimp_total) agrega internamente un item (linea de factura) a una factura para luego poderautorizarla recibe los datos del item a factura a emitir Ver ejemplo para el detalle de los paraacutemetros
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoIVA() GetParamUMed()GetParamNCM() recupera valores referenciales de coacutedigos de las tablas de paraacutemetros devuelveuna lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde- (verejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpNeto importe neto del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImptoLiq impuesto liquidado (IVA) del comprobante (del comprobante recuperado devuelto porGetCmp)
bull
Meacutetodos 33
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSBFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura de bienes de capital (bono fiscal electroacutenico) a modo de ejemplo (ficticia)
Dim WSAA As Object WSBFE As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSBFEtra = WSAACreateTRA(wsbfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada) Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten Una vez obtenido se puede usar el mismo token y sign por 24 horas
Crear objeto interface Web Service de Factura ElectroacutenicaSet WSBFE = CreateObject(WSBFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSBFEToken = WSAATokenWSBFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSBFECuit = 20267565393
Conectar al Servicio Web de Facturacioacutenok = WSBFEConectar(httpwswhomoafipgovarwsbfeserviceasmx) homologacioacuten
Establezco los valores de la factura a autorizarfecha = 20090530tipo_doc = 80 nro_doc = 23111111113zona = 0 Ver tabla de zonas
Errores 34
tipo_cbte = 1 Ver tabla de tipos de comprobantepunto_vta = 2 cbte_nro = 16fecha_cbte = fechaimp_total = 12100 imp_tot_conc = 000 imp_neto = 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000imp_perc = 000 imp_iibb = 000 imp_perc_mun = 000imp_internos = 000imp_moneda_id = 10 Ver tabla de tipos de monedaImp_moneda_ctz = 10000 cotizacioacuten de la moneda
Creo una factura (internamente no se llama al WebService)ok = WSBFECrearFactura(tipo_doc nro_doc _ zona tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total imp_neto impto_liq _ imp_tot_conc impto_liq_rni imp_op_ex _ imp_perc imp_iibb imp_perc_mun imp_internos _ imp_moneda_id Imp_moneda_ctz)
Agrego un itemncm = 73081000 Ver tabla de coacutedigos habilitados del NCMsec = Coacutedigo de la Secretariacutea (no usado por el momento)ds = Prueba Descripcioacuten completa del artiacuteculo (hasta 4000 car)umed = 1 kg Ver tabla de unidades de medidaqty = 10 cantidadprecio = 1050 precio neto (FacA) precio final (Facuras B)bonif = 500 descuentos (en positivo)iva_id = 5 21 ver tabla aliacutecuota de ivaimp_total = 12100 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSBFEAgregarItem(ncm sec ds qty umed precio bonif iva_id imp_total)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSBFEAuthorize(id)
If cae = Or WSBFEResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyElseIf WSBFEObs ltgt And WSBFEObs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyEnd If
MsgBox Resultado amp WSBFEResultado amp CAE amp cae amp _ Reproceso amp WSBFEReproceso amp _ Obs amp WSBFEObs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)
For Each evento In WSBFEEventosIf evento ltgt 0 Then
MsgBox Evento amp evento vbInformationEnd If
Next
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales del Nomenclador Comuacuten Mercosur habilitados
recupero tabla del nomenclador comuacuten del mercosur
Ejemplo 35
(codigo descripcioacuten (vigencia desde - hasta)) Ej 99999999 (item no incluiacutedo en el Beneficio Fiscal) (20070524 - 20091231)For Each x In WSBFEGetParamNCM() DebugPrint x Next
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSBFE)bull cbt_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull zona_id Zona (seguacuten tabla de paraacutemetros) - Por el momento 0bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull imp_moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull imp_moneda_ctz Cotizacioacuten de la moneda de la facturabull imp_perc Importe de las precepcionesbull imp_iibb Importe de las percepciones de ingresos brutosbull imp_perc_mun Importe de las percepciones municipalesbull imp_internos Importe de los impuestos internosbull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
ncm coacutedigo habilitado seguacuten el Nomenclador Comuacuten del Mercosur (NCM)bull sec coacutedigo de la secretariacutea (no utilizado por el momento pasar )bull ds Descripcioacuten completabull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull bonif Bonificacioacutenbull iva_id Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_total Importe total (incluyendo descuentos e IVA)bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEUltNro puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSBFEResultado =A (Aceptado) y WSBFEVencimiento Sino devuelve
Descripcioacuten de la obtencioacuten de CAE 36
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSBFEObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX)
EL WSFEX es un Servicio Web de la AFIP para Facturas Electroacutenicas de Exportacioacutencorrespondiente a la Resolucioacuten General 27582010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSBFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar los datos de exportacioacutenpermisos comprobantes asociados y el detalle de cada item
A su vez el WSFEX devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
Al igual que el WSBFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda idiomas terminos de comercio exterior paises y cuits unidades de medida etc Estastablas pueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen unafecha de vigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (adiferencia del WSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEX en el sitio de la AFIP
Manual para el desarrolladorpdf (version 0) Informacioacuten importante sobre la operatoriabull Manual para el desarrolladorpdf (version 1) Informacioacuten importante sobre la operatoria ( NuevaVersioacuten)
bull
FacturaElectronicaExportacion Informacioacuten general cambios ejemplos descargas y paraacutemetrosvigentes (puede estar ligeramente desactualizado)
bull
La programacioacuten de la interfase WSFEX es similar a WSBFE se recomienda revisarlo
WSFEX Versioacuten 1 (WSFEXv1)
Seguacuten RG306611 AFIP publicoacute una nueva versioacuten 1 (WSFEXv1) a entrar en vigencia obligatoria el31-12-2011 para maacutes informacioacuten ver Cambios WSFEXv1 respecto a WSFEXv0
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX) 37
Ambos webservices son muy similares por lo que se documenta en esta seccioacuten solo las diferenciasintroducidas
Importante Si bien se mantiene retrocompatibilidad para conectarse al nuevo webservice es necesarioutilizar el objeto WSFEXv1 y usar las nuevas URL
httpswswhomoafipgovarwsfexv1serviceasmxWSDL (homologacioacuten)bull httpsservicios1afipgovarwsfexv1serviceasmxWSDL (producciograven)bull
Aclaracioacuten WSFEXv1 es un nuevo webservice y AFIP ha agregado campos (bonificacioacuten) ha cambiadovarios tipos de datos (en importes cantidad de decimales) ha agregado coacutedigos de tablas de paraacutemetros(unidades de medida) y comprobantes asociados (remitos de tabaco) y ademaacutes realiza nuevas validacionespor lo que recomendamos probar exhaustivamente la interfaz con el desarrollo para exportacioacuten
Ajustes desarrollos de WSFEX a WSFEXv1
Si no utiliza las caracteriacutesticas nuevas es posible utilizar el coacutedigo desarrollado para WSFEX con nuestrainterfaz WSFEXv1
Coacutedigo Anterior (WSFEX)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEX)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar(httpswswhomoafipgovarwsfexserviceasmx) homologacioacuten
Coacutedigo Nuevo (WSFEXv1)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL) homologacioacuten
RECEX vs RECEX1
Por linea de comando tenemos disponible la herramienta RECEX1EXE que reemplaza a RECEXEXE yutiliza praacutecticamente el mismo formato de archivo y campos El nuevo formato esta documentado la seccioacutenRECEX1 - WSFEXv1
Objeto
El objeto COM se crea invocando a CreateObject(WSFEX) para Versioacuten 0 (hasta 30-12-2011)bull El objeto COM se crea invocando a CreateObject(WSFEXv1) para Versioacuten 1 (desde 31-12-2011)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica url se utiliza servidores de homologacioacuten Importante para WSFEXv1 los paraacutemetros soncache url proxy httpwrapper y cacert ver WSFEv1 Nuevo
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
WSFEX Versioacuten 1 (WSFEXv1) 38
CrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte imp_totaltipo_expo permiso_existente dst_cmp cliente cuit_pais_clientedomicilio_cliente id_impositivo moneda_id moneda_ctzobs_comerciales obs forma_pago incoterms idioma_cbteincoterms_ds fecha_pago) crea internamente una factura para luego poder autorizarlarecibe los datos de la factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importantefecha_pago se agrega en WSFEXv1 Modificado
bull
AgregarItem(ncodigo ds qty umed precio imp_total bonif) agregainternamente un item (linea de factura) a una factura para luego poder autorizarla recibe los datos delitem a factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importante bonif se agrega enWSFEXv1 Modificado
bull
AgregarPermiso(id dst) agrega internamente un permiso de exportacioacuten a una factura paraluego poder autorizarla recibe identificacioacuten y paiacutes destino de la mercaderia Ver ejemplo para eldetalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccuit_cbte_asoc) agrega internamente un comprobante asociado a una factura para luego poderautorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de losparaacutemetros Importante cuit_cbte_asoc se agrega en WSFEXv1 Nuevo
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoExpo()GetParamIdiomas() GetParamUMed() GetParamIncoterms()GetParamDstPais() GetParamDstCUIT() recupera valores referenciales de coacutedigos de lastablas de paraacutemetros devuelve una lista de strings con el idcoacutedigo o CUIT y descripcioacuten delparaacutemetro (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
GetParamCtz(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada como paraacutemetrobull GetParamMonConCotizacion(fecha) devuelve la cotizacioacuten consultada de la base de datosaduanera de todas las monedas que posean cotizacioacuten a la fecha indicada Nuevo
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Vencimiento fecha devuelta junto con el CAEbull CbteNro nuacutemero de comprobante (del comprobante autorizado)bull
Meacutetodos 39
FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull Version versioacuten de la interfase (ej 111)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Errores
La interfase procesa los errores WSFEX y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
500 Error interno DB - FEXGetLadt_CMP - get_last problemas internos de los servidores de AFIP(se debe esperar a que lo solucionen)
bull
Operation FEXGetLast_CMP not found in WSDL la URL que se estaacute utilizando no es correcta(verificar URL para el ambiente que se estaacute utilizando)
bull
505 Error general (lockeo) problemas internos de los servidores de AFIP (se debe esperar a que losolucionen)
bull
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSFEX para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura electroacutenica de exportacioacuten a modo de ejemplo (ficticia)
Dim WSAA As Object WSFEX As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEXtra = WSAACreateTRA(wsfex)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service para autenticar (Homologacioacuten)ta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms)
Atributos 40
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1) Setear tocken y sing de autorizacioacuten (pasos previos)WSFEXToken = WSAATokenWSFEXSign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEXCuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (homologacioacuten)ok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEXDummyDebugPrint appserver status WSFEXAppServerStatusDebugPrint dbserver status WSFEXDbServerStatusDebugPrint authserver status WSFEXAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 19 FC Expo (ver tabla de paraacutemetros)punto_vta = 7 Obtengo el uacuteltimo nuacutemero de comprobante y le agrego 1cbte_nro = WSFEXGetLastCMP(tipo_cbte punto_vta) + 1 16fecha_cbte = Format(Date yyyymmdd)tipo_expo = 1 tipo de exportacioacuten (ver tabla de paraacutemetros)permiso_existente = Ndst_cmp = 203 paiacutes destinocliente = Joao Da Silvacuit_pais_cliente = 50000000016domicilio_cliente = Rua 76 km 345 Alagoasid_impositivo = PJ54482221-lmoneda_id = 012 para reales DOL o PES (ver tabla de paraacutemetros)moneda_ctz = 05obs_comerciales = Observaciones comercialesobs = Sin observacionesforma_pago = 30 diasincoterms = FOB (ver tabla de paraacutemetros)idioma_cbte = 1 (ver tabla de paraacutemetros)imp_total = 25000
Creo una factura (internamente no se llama al WebService)ok = WSFEXCrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total tipo_expo permiso_existente dst_cmp _ cliente cuit_pais_cliente domicilio_cliente _ id_impositivo moneda_id moneda_ctz _ obs_comerciales obs forma_pago incoterms _ idioma_cbte incoterms_ds fecha_pago )
Agrego un itemcodigo = PRO1ds = Producto Tipo 1 Exportacion MERCOSUR ISO 9001qty = 2precio = 12500umed = 1 Ver tabla de paraacutemetros (unidades de medida)imp_total = 25000 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSFEXAgregarItem(codigo ds qty umed precio imp_total)
Ejemplo 41
Agrego un permiso (ver manual para el desarrollador)id = 99999AAXX999999Adst = 225 paiacutes destino de la mercaderiaok = WSFEXAgregarPermiso(id dst)
Agrego un comprobante asociado (ver manual para el desarrollador)tipo_cbte_asoc = 19punto_vta_asoc = 2cbte_nro_asoc = 1ok = WSFEXAgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc)
id = 99000000000100 nuacutemero propio de transaccioacuten obtengo el uacuteltimo ID y le adiciono 1 (advertencia evitar overflow y almacenar)id = CStr(CCur(WSFEXGetLastID()) + 1)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEXAuthorize(id)
Verifico que no haya rechazo o advertencia al generar el CAEIf cae = Or WSFEXResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyElseIf WSFEXobs ltgt And WSFEXobs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyEnd If
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato) si es posible almacenar para referencias futurasDebugPrint WSFEXXmlRequest DebugPrint WSFEXXmlResponse
MsgBox Resultado amp WSFEXResultado amp CAE amp cae amp _ Reproceso amp WSFEXReproceso amp _ Obs amp WSFEXobs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEXEventos
If evento ltgt 0 Then MsgBox Evento amp evento vbInformation
End IfNext
Recuperar la facturacae2 = WSFEXGetCMP(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEXFechaCbteDebugPrint Importe Total WSFEXImpTotal
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIPElse MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales de paiacuteses destino habilitados
Ejemplo 42
recupero tabla de coacutedigo de pais destino (codigo descripcioacuten) Ej 203 BRASILFor Each x In WSFEXGetParamDstPais() DebugPrint xNext
Ejemplo para obtener la fecha y cotizacioacuten de una moneda
busco la cotizacioacuten del dolar (ver Parametro Mon) Ej 20100708 3937moneda_id = DOLctz = WSFEXGetParamCtz(moneda_id)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_cbte coacutedigo de comprobante (19 Facturas de Exportacioacuten 20 Nota de Deacutebito por Operacionescon el Exterior 21 Nota de Creacutedito por Operaciones con el Exterior
bull
punto_vta Nordm de punto de venta (debe estar autorizado para WSFEX)bull cbte_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull imp_total Importe total de la facturabull tipo_expo Tipo de exportacion (1 Exportacioacuten definitiva de Bienes 2 Servicios 4 Otros)bull permiso_existente Indica si se posee documento aduanero de exportacioacuten (permiso de embarque)Posibles Valores S N NULL (vaciacuteo)
bull
dst_cmp Paiacutes de destino del comprobante (200 ARGENTINA 203 BRASIL 212 ESTADOSUNIDOS etc)
bull
cliente Apellido y Nombre oacute Razoacuten Social del compradorbull cuit_pais_cliente CUIT del paiacutes destinoContribuyente (Ej 50000000059 BRASIL - PersonaFxedsica 51600000059 BRASIL - Otro tipo de Entidad etc)
bull
domicilio_cliente Domicilio comercial clientebull id_impositivo Clave de identificacioacuten tributaria del compradorbull moneda_id Moneda de la factura (DOL Doacutelar Estadounidense PES Pesos Argentinos 012Real etc)
bull
moneda_ctz Cotizacioacuten de la moneda de la facturabull obs_comerciales observaciones comerciales (texto arbitrario)bull obs observaciones (texto arbitrario)bull forma_pago texto arbitrario (ej 30 diacuteas)bull incoterms clausula de venta terminos de comercio exterior (DAF DDP CIF FCA FAS DESCPT EXW CIP DDU FOB DEQ CFR)
bull
incoterms_ds informacioacuten adicional de terminos comercialesbull idioma_cbte idioma del comprobante 1 Espantildeol 2 Ingleacutes 3 Portugueacutesbull fecha_pago Fecha de pago (yyyymmdd)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
codigo coacutedigo del productobull ds Descripcioacuten completabull precio Precio Unitariobull
Descripcioacuten de la obtencioacuten de CAE 43
qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull imp_total Importe totalbull bonif bonificacion sobre el producto (importe)bull
Consideraciones especiales (soacutelo WSFEXv1 Nuevo )
Para descuentos utilizar umed 99 y los importes en negativo sin cantidad ni preciobull Para sentildeas o adelantos utilizar umed 97 y los importes en negativo o positivo (seguacuten corresponda)sin cantidad ni precio
bull
Para gratificaciones utilizar umed 0 sin importes cantidad ni preciobull Para bonificaciones por item el caacutelculo es precio qty - bonifbull
Adicionalmente se puede llamar al meacutetodo AgregarPermiso para detallar los permisos de embarque ydestinaciones de la mercaderiacutea con los siguientes paraacutemetros
id Coacutedigo de despacho Permiso de Embarque formato 99999AAXX999999A (donde XX podraacutenser nuacutemeros o letras)
bull
dst Paiacutes de destino de la mercaderiacuteabull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los permisos de embarque y destinacionesde la mercaderiacutea con los siguientes paraacutemetros
cbte_tipo Coacutedigo de tipo de comprobante (remitos solo WSFEXv1 Nuevo )bull cbte_punto_venta Punto de ventabull cbte_numero Numero de comprobantebull cbte_cuit CUIT emisor del comprobante (solo WSFEXv1 Nuevo )bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEXGetLastID puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEXResultado =A (Aceptado) y WSFEXVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSFXEResultado = R (Rechazado) y WSFEXObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
IMPORTANTE Revisar las especificaciones teacutecnicas de la AFIP en el Manual para el desarrolladorpdf porlo relativo a tablas de paraacutemetros meacutetodos adicionales y operatoria en general (incluyendo obligatoriedadformatos de los campos y validaciones)
Descripcioacuten de la obtencioacuten de CAE 44
Servicio Web de Factura Electroacutenica Mercado InternoVersioacuten 1 (WSFEv1)
EL WSFEv1 es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten B (sin detalle de factura) de la Resolucioacuten General 29042010 -RG248508 obligatorio a partir de 1-7-2011
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los impuestos(IVA) y tributos
A su vez el WSFEv1 devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva Estas tablas pueden sufrir modificaciones realizadas por la AFIP conaltas y bajas loacutegicas por lo que tienen una fecha de vigencia (desde hasta) y se proveen meacutetodos paraconsultarlas por el mismo servicio web (a diferencia del WSFE que las tablas eran documentadasestaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiProyectoWSFEv1
La programacioacuten de la interfase WSFEv1 es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSFEv1)bull
Meacutetodos
Meacutetodos baacutesicos de WSFEv1
Conectar(cache wsdl proxy wrapper cacert) realiza la conexioacuten a losservidores de la AFIP (primer paso esencial) Si no se especifica url del wsdl se utiliza servidores dehomologacioacuten El paraacutemetro cache es un directorio donde se almacenan internamente la descripcioacutendel servicio (archivo WSDL) para mayor optimizacioacuten Parametros adicionales optativos wrapper esla libreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor(CA)
bull
Servicio Web de Factura Electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 45
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto imp_ivaimp_trib imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz caea fecha_hs_gen) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetros
bull
AgregarIva(iva_id base_imp importe) agrega internamente un subtotal de IVA auna factura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible eimporte Ver ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(tributo_id Desc base_imp alic importe) agregainternamente un subtotal de tributo a una factura para luego poder autorizarla recibe los datos delimpuesto nacional provincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo parael detalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc cuitfecha) agrega internamente un comprobante asociado a una factura para luego poder autorizarlarecibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de los paraacutemetrosEl campo cuit fueacute agregado seguacuten FEv29 13-03-2017 disponible desde actualizacioacuten 119a yrefiere al CUIT emisor del comprobante asociado El campo fecha fueacute agregado seguacuten FEv21320-02-2019 disponible desde actualizacioacuten 122a y refiere a la fecha del comprobante asociado
bull
AgregarOpcional(opcional_id valor) agrega internamente un dato opcional a unafactura para luego poder autorizarla recibe el id del tipo de dato opcional y valor (dependiendo de sise trata de proyectos promovidos bienes usados RG 3411 DDJJ F8001 presuncioacuten de novinculacioacuten con la actividad gravada RG366814) Ver tabla de paraacutemetros Disponible desdeactualizacioacuten 115a
bull
AgregarComprador(doc_tipo=80 doc_nro=0 porcentaje=10000) agregainternamente un dato de comprador a una factura para luego poder autorizarla recibe el tipo dedocumento (80 CUIT) nuacutemero de documento y porcentaje (Bienes Usados Registrables RG 4109 E)Ver COMPG 210 Disponible desde actualizacioacuten 120a
bull
EstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura (ver paraacutemetros del meacutetodo CrearFactura) devuelve True siel campo pertenece al encabezado y se ha actualizado correctamente (ver ejemplo) Disponible desdeactualizacioacuten 116a
bull
ObtenerCampoFactura(campo [[campo2 [campo3]]) devuelve individualmente elvalor de un campo del encabezado u otras sub-estructuras de la factura (ver ejemplo) Uacutetil luego dellamara a CompConsultar Disponible desde actualizacioacuten 117a
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125b 200620
bull
Meacutetodos principales de WSFEv1
CAESolicitar() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo de AutorizacioacutenElectroacutenico (CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
CompConsultar(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle de los paraacutemetros yvalores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos baacutesicos de WSFEv1 46
CAEASolicitar(periodo orden) solicita un CAE Anticipado para la quincenacorrespondiente Devuelve cadena vacia si no se ha solicitado A partir de COMPGv26 estableceel campo Observaciones
bull
CAEAConsultar(periodo orden) recupera un CAE Anticipado emitido con anterioridadDevuelve cadena vacia si no se ha solicitado
bull
CAEARegInformativo informa un comprobante emitido con CAE Anticipado Se debe crear elcomprobante previamente con CrearFactura consignando el CAEA Actualiza los atributos(Resultado Obs etc) de manera similar a CAESolicitar Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
Meacutetodos alternativos para solicitud de muacuteltiples CAE
IniciarFacturasX() inicializa lista interna de facturas (comprobantes) para Solicitar muacuteltiplesCAE (llamar una uacutenica vez antes de CrearFacturaAgregarFacturaX)
bull
AgregarFacturaX() agrega el uacuteltimo comprobante cargado internamente con CrearFacturaa la lista para Solicitar muacuteltiples CAE
bull
CAESolicitarX() autoriza la emisioacuten de muacuteltiples facturas electroacutenicas (varios CAE porsolicitud) devuelve la cantidad de registros enviadosrecibidos a AFIP
bull
LeerFacturaX(indice) activa internamente una factura (dada su posicioacuten en la lista) pararevisar los datoss devuelto por AFIP usando ObtenerCampoFactura luego de haber llamado aCAESolicitarX
bull
Meacutetodos Auxiliares del webservice
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull ParamGetTiposMonedas() ParamGetTiposCbte() ParamGetTiposDoc()ParamGetTiposIva() ParamGetTiposOpcional() ParamGetTiposTributos()ParamGetTiposPaises() recupera valores referenciales de coacutedigos de las tablas de paraacutemetrosdevuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde-(ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros ParamGetTiposPaises agregadopara COMPGv26
bull
ParamGetCotizacion(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada comoparaacutemetro
bull
ParamGetPtosVenta() devuelve los puntos de venta autorizados para factura electroacutenicabull
Meacutetodos Utilitarios provistos por este componente
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Atributos
El componente tiene las siguientes propiedades que pueden ser consultadas o modificadas
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull
Meacutetodos principales de WSFEv1 47
AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull CAEA coacutedigo de autorizacioacuten anticipado (si corresponde)bull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTribimportes del comprobante
bull
ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull Reprocesar habilita reproceso automaacutetico (habilitado por defecto ver abajo)bull EmisitonTipo tipo de coacutedigo de autorizacioacuten (CAE o CAEA)bull
Errores
La interfase procesa los errores WSFEv1 y los almacena en las propiedades Errores y ErrCodeErrMsg (porej motivo de rechazo al intentar solicitar CAE) AFIP tambieacuten puede enviar errrores o advertencias por lacomo Observaciones propiedad Obs Se recomienda revisarlos luego de llamar a los Webservices
Ver ejemplos y especificaciones teacutecnicas del WSFEv1 para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ver Manejo de Excepciones para conocer las tecnicas para controlar las distintas excepciones que puedenocurrir (ver atributos Excepcion y Traceback en general por problemas de conectividad) y como proceder yalmacenar los mensajes XML para depuracioacuten y futuras consultas (atributos XmlRequest y XmlResponse)
Validaciones WSFEv1
AFIP realiza varias validaciones a los datos enviados muchas agregadas recientemente por lo que para evitarinconvenientes se recomienda revisar las siguientes validaciones y consideraciones generales
10063 Factura individual DocTipo 80 DocNro XXXXXXXXX no se encuentra inscripto encondicion ACTIVA en el impuesto Las facturas A solo pueden ser emitidas a ResponsablesInscriptos consignando el CUIT vaacutelido y registrado (tipo_doc=80)
bull
10014 Para facturas B (CbteDesde distinto a CbteHasta) el resultado de la operacioacuten ImpTotal (CbteHasta - CbteDesde + 1 ) debe ser menor a $1000 y 10015 Para facturas B (CbteDesde distintoa CbteHasta) menor a $1000 el campo DocNro deberaacute ser cero (0) y el campo DocTipo 99 Los lotesde facturas B menores a $1000- pueden ser emitidos a soacutelo a Consumidor Final (tipo_doc=99 ynro_doc=0) indicando el importe total del reango de facturas
bull
10043 El campo ImpTotConc (Importe Total del Concepto) para comprobantes tipo C debe ser iguala cero (0) y 10047 El campo ImpIVA (Importe de IVA) para comprobantes tipo C debe ser igual a
bull
Atributos 48
cero (0) 10071 Para comprobantes tipo C el objeto IVA no debe informarse Para emitir FacturasC no se informa iva ni imp_tot_conc ver caso especial Monotributo10048 El campo Importe Total ImpTotal debe ser igual a la suma de ImpTotConc + ImpNeto +ImpOpEx + ImpTrib + ImpIVA La sumatoria de los campos imp_neto impto_iva imp_op_eximp_tot_conc imp_trib contra imp_total no debe diferir en maacutes de 1 centavo (o 001)
bull
10051 Los importes informados en AlicIVA no se corresponden con los porcentajes La baseimponible por la aliacutecuota de IVA no debe diferir en maacutes de 1 centavo con el impuesto liquidado deIVA (para cada tasa ver AgregarIVA)
bull
10020 El campo BaseImp en AlicIVA es obligatorio y debe ser mayor a 0 cero Si el imp_neto es 0no se debe enviar subtotal de IVA ni para la tasa 0 (no usar AgregarIVA)
bull
10018Si ImpIva es igual a 0 el objeto Iva y AlicIva son obligatorios Id iva = 3 (iva 0) Si elimp_neto es ltgt0 y el iva liquidado es 0 se debe enviar coacutedigo de alicuota 3 (0) -por ej casoespecial de hacer factura de 1 centavo- Si no corresponde IVA (exento o no gravado) se debe enviarimp_iva NULO (vbNull null o similar) y no enviar aliacutecuotas
bull
Consideraciones especiales
Para emitir Facturas B a Responsables No Inscriptos debe informarse en Tributos el importecorrespondiente (ver AgregarTributo)
bull
Para factura E no corresponde este webservice por maacutes que sea a Tierra del Fuego Ver WSFEXbull imp_tot_conc debe utilizarse para los importes no gravados (por ej cheques rechazados)bull IVA 0 es distinto a No Gravado (seriacutea imp_tot_conc) o Exento (imp_op_ex) En esos casos no vaalicuota de iva e imp_iva = NULL y imp_neto = 0 (ver validaciones arriba)
bull
Si se usa IVA 0 en el subtotal de la aliacutecuota iva_id=3 se debe pasar base_imp = 100 e importe = 0Ademaacutes imp_neto = 100 (gravado aunque no liquide IVA)
bull
Recordamos que si la AFIP detecta una validacioacuten no obligatoria (por ej no corresponde emitir factura A)devolvera un mensaje (en el atributo WSFEv1Obs) y el IVA liquidado no puede computarse como creacuteditofiscal (la factura debe incorporar dichos mensajes)
Dependiendo del caso los mensajes de validacioacuten pueden ser enviados por AFIP tanto en WSFEv1Obs o enWSFEv1ErrMsg se deben revisar ambos campos
Nota estas consideraciones pueden variar en cada caso dependiendo de cada situacioacuten particular frente aAFIP Recomendamos consultar con el contador los aspectos legales y la normativa vigente
Ejemplo
Ejemplo Solicitud CAE WSFEv1
Autorizar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSFEv1 As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1tra = WSAACreateTRA(wsfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() +
Validaciones WSFEv1 49
Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service WSAA para autenticarcache = directorio temporal (usar predeterminado)url_wsdl = httpswsaahomoafipgovarwsservicesLoginCms usar wsaaafipgovar en produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSAAConectar(cache url_wsdl proxy wrapper)ta = WSAALoginCMS(cms)
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSFEv1 = CreateObject(WSFEv1)DebugPrint WSFEv1version
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEv1Token = WSAATokenWSFEv1Sign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEv1Cuit = 20267565393
Conectar al Servicio Web de Facturacioacutencache = directorio temporal (usar predeterminado)url_wsdl = httpswswhomoafipgovarwsfev1serviceasmxWSDL usar servicios1 para produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSFEv1Conectar(cache url_wsdl proxy) homologacioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEv1DummyDebugPrint appserver status WSFEv1AppServerStatusDebugPrint dbserver status WSFEv1DbServerStatusDebugPrint authserver status WSFEv1AuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4001cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta) + 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 20267565393cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Ejemplo Solicitud CAE WSFEv1 50
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
datos de compradores RG 4109-E bienes muebles registrables ()If False Then solo productos y si hay maacutes de un comprador ok = WSFEv1AgregarComprador(80 30500010912 9999) ok = WSFEv1AgregarComprador(80 30999032083 001)End If
Solicito CAEcae = WSFEv1CAESolicitar()
DebugPrint Resultado WSFEv1ResultadoDebugPrint CAE WSFEv1cae
DebugPrint Numero de comprobante WSFEv1CbteNro
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSFEv1XmlRequestDebugPrint WSFEv1XmlResponse
MsgBox Resultado amp WSFEv1Resultado amp CAE amp cae amp Venc amp WSFEv1Vencimiento amp Obs amp WSFEv1obs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEv1eventos MsgBox evento vbInformation EventoNext
Ejemplo Consultar CAE WSFEv1
Recuperar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia continua elejemplo anterior) CAE normal
Buscar la facturacae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEv1FechaCbteDebugPrint Fecha Vencimiento CAE WSFEv1VencimientoDebugPrint Importe Total WSFEv1ImpTotal
comparar con los datos del ejemplo anterior
Ejemplo Consultar CAE WSFEv1 51
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIP amp cae amp vs amp cae2Else MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
obtener datos del encabezado (a partir de actualizacioacuten 117a)cae = wsfev1ObtenerCampoFactura(cae)tipo_doc = wsfev1ObtenerCampoFactura(tipo_doc)nro_doc = wsfev1ObtenerCampoFactura(nro_doc)imp_total = wsfev1ObtenerCampoFactura(imp_total) obtener primer alicuota de IVAimp_iva1 = wsfev1ObtenerCampoFactura(iva 0 importe) obtener primer tributoimp_trib1 = wsfev1ObtenerCampoFactura(tributos 0 importe) obtener primer opcionalvalor_opcional1 = wsfev1ObtenerCampoFactura(opcionales 0 valor) obtener primer coacutedigo de observacion de AFIPobs_code1 = wsfev1ObtenerCampoFactura(obs 0 code) pruebo obtener el segundo mensaje de observacion inexistenteobs_code2 = wsfev1ObtenerCampoFactura(obs 1 msg)debugPrint wsfev1Excepcion El campo 1 solicitado no existe
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1
Ejemplo para obtener las tablas de parametros en este caso puntos de venta habilitados (uacutetil en produccioacutenpara verificar el acceso al webservice)
recupero tabla de paraacutemetros de punto de venta habilitado (3|EmisionTipoCAE|BloqueadoN|FchBajaNULL)For Each x In WSFEv1ParamGetPtosVenta() DebugPrint xNext
Ejemplo Solicitud CAEA y registro informativo WSFEv1
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE Anticipado
PASO 1 Solicito CAE Anticipado para el periacuteodo NOTA solicitar por uacutenica vez para un determinado periacuteodo consultar si se ha solicitado previamente
periodo = 201102 Antildeo y mesorden = 2 Segunda Quincena
consulto CAEA ya solicitadoCAEA = WSFEv1CAEAConsultar(periodo orden)If CAEA = Then
solicito nuevo CAEA CAEA = WSFEv1CAEASolicitar(periodo orden)End If
MsgBox Periodo amp periodo amp Orden amp orden amp vbCrLf amp CAEA amp CAEA amp vbCrLf amp _Obs amp WSFEv1Obs amp vbCrLf amp _Errores amp WSFEv1ErrMsg
Si no tengo CAEA terminoIf CAEA = Then End
PASO 2 Establezco los valores de la factura a informar
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1 52
tipo_cbte = 6punto_vta = 4005cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta)If cbte_nro = Then cbte_nro = 0 no hay comprobantes emitidosElse cbte_nro = CLng(cbte_nro) convertir a entero largoEnd Iffecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
creo una factura (con CAEA)ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz CAEA fecha_hs_gen)
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
Informo comprobante emitido con CAE anticipadocae = WSFEv1CAEARegInformativo()
DebugPrint Resultado WSFEv1Resultado
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura o completar el registro de encabezado (ver archivo deintercambio) con los siguiente paraacutemetros
Ejemplo Solicitud CAEA y registro informativo WSFEv1 53
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc seguacuten tabla de paraacutemetros de AFIP) y nuacutemero deDocumento del cliente (receptor de la factura) Usar tipo_doc=99 y nro_doc=0 para consumidoresfinales (Factura B lt $1000)
bull
tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSFE)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta generalmente el mismo nuacutemero si es unafactura individual o un rango si son Factura B lt $ 1000 a Consumidor Final -en este uacuteltimo caso seobtiene un uacutenico CAE para el lote-)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la factura (debe ser igual a la suma de imp_tot_conc + imp_op_ex +imp_neto + imp_iva + imp_trib)
bull
imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la factura (igual a la suma de base_imp para todas lasalicuotas)
bull
imp_iva Importe del IVA liquidado (igual a la suma de importe_iva para todas las aliacutecutoas) Enviarnull o similar si no corresponde y no se enviacutean subtotales por aliacutecuota
bull
imp_trib Importe de otros tributos (incluyendo percepciones de IVA retenciones IVA no inscriptoetc)
bull
imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros actualmente solo PES)bull moneda_ctz Cotizacioacuten de la moneda de la factura (actualmente solo 100)bull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull caea codigo de autorizacioacuten anticipado (si corresponde)bull
Luego por cada alicuota de IVA (excepto para no gravado y exento) se debe llamar al meacutetodo AgregarIva ocompletar el registro respectivo con los siguientes paraacutemetros
iva_id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros AFIP)bull base_imp base imponible (importe)bull importe_iva importe liquidado (base_imp por alicuota)bull
De existir otros tributos (percepcionesretenciones o similares) se debe llamar al meacutetodo AgregarTributo ocompletar el registro respectivo con los siguientes paraacutemetros
tributo_id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros AFIP)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc o completar el registro respectivo para detallar loscomprobantes asociados a una nota de creacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo CAESolicitar o CAEARegInformativo dependiendo de lamodalidad (o ejecutar el programa RECE1 si se esta utilizando la herramienta por linea de comando)
Descripcioacuten de la obtencioacuten de CAE CAEA 54
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEv1Resultado= A (Aceptado) y WSFEv1Vencimiento del CAE (fch_venc_cae) Sino devuelve cae = La interfase nopudo procesar la respuesta del WebService o bien la conexioacuten a internet esta caiacuteda las direcciones de losservidores son incorrectas o el servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEv1Resultado = R (Rechazado) y WSFEv1Obs (o WSFEv1ErrMsg) con los diversos motivos derechazo proporcionados por el webservice (ver WSFEMotivo)
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Como requisito previo para la modalidad CAE Anticipado se debe llamar a CAEASolicitar oCAEAConsultar con los datos del periodo y orden (antes de comenzar la quincena) para obtener el uacutenicoCAEA para los comprobantes del periacuteodo
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (CompConsultar) o usar la rutina deReproceso Automaacutetico incluida en este componente
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEV1 en el sitio de la AFIP
Minisitio Factura Electroacutenica AFIP informacioacuten generalbull Manual para el desarrolladorpdf Informacioacuten importante sobre la operatoriabull
Reproceso Automaacutetico
Importante En el caso de que la conexioacuten se interrumpa al llamar a CAESolicitar luego de que la AFIPregistre la factura y antes de que la informacioacuten del CAE llegue al equipo se debe llamada aCompConsultar con los paraacutemetros de la factura (tipo_cbte punto_vta cbte_nro) para recuperar el CAEgenerado anteriormente (ver ejemplo pseudocoacutedigo y por RECE1 get)
Este procedimiento puede ser realizado automaacuteticamente por la interfaz (de manera similar a como realizabaAFIP originalmente en WSFEv0) habilitando el atributo Reprocesar = True (valor predeterminado) conlo que la interfaz automaticamente
Solicita un nuevo CAE en caso de que no exista en los registros de la AFIPbull Consulta y obtiene el CAE anterior en caso de que ya exista en los registros de AFIPbull
En ese caso si se da un reprocesamiento automaacutetico como se mencionoacute en el primer parrafoWSFEReproceso se establece a S para indicar que el CAE se ha recuperado
Si bien no se utiliza un ID por lo que se minimizan los errores al reprocesar los comprobantes igualmente serecomienda revisar el atributo de Reproceso ya que un incorrecto uso puede generar inconvenientes alregistrar los comprobantes en AFIP Para ello la interfaz cuenta con los atributos CbteNro FechaCbteImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTrib o XmlRequest yXmlResponse que deben ser contrastados contra la informacioacuten enviada en el caso de interrupciones oinconvenientes en la comunicacioacuten (a partir de la versioacuten 107d si Reproceso = S la interfaz verificoacuteautomaacuteticamente todos los datos enviados con los registrados en la AFIP y estos concuerdan)
Se recomienda almacenar los datos en un medio durable para poder enviar la misma factura que fuera
Reproceso Automaacutetico 55
interrumpida salvo que se tenga certeza de que la misma no ha sido procesada por AFIP Especialmente sedeberiacutea guardar el nuacutemero de factura antes de solicitar CAE y no utilizar ult o el meacutetodoCompUltimoAutorizado para consultar el uacuteltimo nuacutemero de comprobante emitido ya que ante cualquierinterrupcioacuten se no se podriacutea recuperar los datos registrados en AFIP (o se podriacutean generar duplicados)
En siacutentesis al re-enviar los datos de un comprobante que por alguacuten motivo no ha devuelto CAE (cuando lacomunicacioacuten se ha interrumpido y no ha sido aceptado o rechazado formalmente con Resultado=A o R)se recomienda revisar el reproceso y los datos registrados (devueltos por la interfaz) o en su defectodeshabilitar Reprocesar con False e implementar un procedimiento propio de recuperacioacuten ante fallas
Si el reproceso estaacute habilitado no es necesario modificar la aplicacioacuten en caso de fallas simplementereintentar la solicitud de CAE o informacioacuten de CAEA y la interfaz realizaraacute los meacutetodos pertinentes seguacutense describioacute anteriormente
En caso de que no haya sido necesario reprocesar el requerimiento el atributo Reproceso quedaraacute vacioEn caso de que haya sido necesario reprocesar pero no ha sido exitoso (ocurrioacute un error o validacioacuten que nopermitioacute recuperar el CAE o los datos enviados no concuerdan con los registrados en AFIP) Reprocesoseraacute N y se informaraacute el error original
Lo expuesto anteriormente aplica tambieacuten a CAEA -anticipado- al informar los comprobantes emitidos(CAEARegInformativo)
En ambas ocasiones se puede consultar el atributo EmisionTipo que contiene CAE o CAEA dependiendodel caso
Nota El Reproceso automaacutetico estaacute incluido internamente en CAESolicitar y CAEARegInformativopor lo que estaacute disponible tanto en la biblioteca Python Interfaz COM la herramienta por liacutenea de comandoRECE1EXE y al aplicativo PyRece
Advertencia El Reproceso automaacutetico es una caracteriacutestica adicional propia de la interface por lo tantopuede sufrir variaciones o mejoras se recuerda que la informacioacuten expuesta en esta documentacioacuten aplica a lauacuteltima versioacuten de los instaladores
Factura C Monotributo Exento
Seguacuten RG 30672011 se adiciona la posibilidad de autorizar comprobantes clase C (monotributistas) aWSFEv1 (RG2485)
Seguacuten RG 37492015 se incluye a los sujetos exentos en el impuesto al valor agregado Para poder emitircomprobantes clase C ademaacutes de seguir las pautas sentildealadas en esta seccioacuten el punto de venta debe estardado de alta como Factura Electroacutenica - Exento en IVA - Web Services
Los siguientes coacutedigos de comprobantes (tipo_cbte) pueden ser utilizados en este caso
11 Factura Cbull 12 Nota de Deacutebito Cbull 13 Nota de Creacutedito Cbull 15 Recibo Cbull
Los requisitos fundamentales para poder validar un comprobante informado son las los siguientes
Factura C Monotributo Exento 56
Ingresar siempre imp_tot_conc = 01 Ingresar siempre imp_op_ex = 02 Ingresar siempre imp_iva = 03 Informar en imp_neto el importe subtotal de la factura4 No informar subtotales de IVA (AgregarIVA)5
Coacutedigo de Ejemplo
Establezco los valores de la factura a autorizartipo_cbte = 11punto_vta = 4002cbte_nro = 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 10000 imp_tot_conc = 000 imp_neto = 10000imp_iva = 000 imp_trib = 000 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 2 o 3)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Solicito CAECAE = WSFEv1CAESolicitar()
Documentacioacuten Oficial Facturacioacuten Electroacutenica RG 2485 Proyecto FE v25 - Manual para el desarrollador(Revisioacuten correspondiente al 01 de Abril de 2015)
Datos Opcionales AFIP WSFEv1
El componente permite enviar los datos opcionales requeridos por las diversas resoluciones de AFIP seguacuten latabla de paraacutemetros Disponible desde actualizacioacuten 115b
Datos opcionales para proyectos promovidos
WSFEv1AgregarOpcional(2 1234) identificador del proyecto
Datos opcionales para RG Bienes Usados 3411 (del vendedor)
WSFEv1AgregarOpcional(91 Juan Perez) Nombre y Apellido WSFEv1AgregarOpcional(92 200) Nacionalidad (coacutedigo de paiacutes)WSFEv1AgregarOpcional(93 Balcarce 50) Domicilio
Datos opcionales para RG 3668 Impuesto al Valor Agregado - Art12 (presuncioacuten de no vinculacioacuten con laactividad gravada FORM 8001)
WSFEv1AgregarOpcional(5 02) IVA Excepciones (01 LocadorPrestador 02 Conferencias 03 RG 74 04 Bienes de cambio 05 Ropa de trabajo 06 Intermediario)
Datos Opcionales AFIP WSFEv1 57
WSFEv1AgregarOpcional(61 80) Firmante Doc Tipo (80 CUIT 96 DNI etc)WSFEv1AgregarOpcional(62 20267565393) Firmante Doc NroWSFEv1AgregarOpcional(7 01) Caraacutecter del Firmante (01 Titular 02 DirectorPresidente 03 Apoderado 04 Empleado)
Datos opcionales para RG 3749 (RG 3368 Establecimientos de educacioacuten puacuteblica de gestioacuten privada)
WSFEv1AgregarOpcional(10 1) Actividad ComprendidaWSFEv1AgregarOpcional(1011 80) Tipo de Documento (titular del pago)WSFEv1AgregarOpcional(1012 20267565393) Nuacutemero de Documento (titular del pago)
Datos opcionales para RG4520
WSFEv1AgregarOpcional(5 01) Actividad
Datos opcionales para FEv213 (RG 4367 Factura de Creacutedito Electroacutenica MiPyMEs (FCE))
WSFEv1AgregarOpcional(2101 2850590940090418135201) CBUWSFEv1AgregarOpcional(2102 pyafipws) aliasWSFEv1AgregarOpcional(27 SCA) tipo de transmisioacuten (desde el 01042021) if tipo_cbte in (203 208 213) WSFEv1AgregarOpcional(22 S) Anulacioacuten
Obtencioacuten de Atributos Avanzados WSFEv1
En versiones recientes (112a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosde la respuesta (uacutetiles para depuracioacuten y solucioacuten de errores) con los meacutetodos AnalizarXml yObtenerTagXml
Ejemplo para recuperar datos puntuales de un comprobante emitido (moneda cotizacioacuten CUIT etc)
cae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)ok = WSFEv1AnalizarXml(XmlResponse)If ok Then
datos del encabezado DebugPrint CAE WSFEv1ObtenerTagXml(CodAutorizacion) WSFEv1CAE DebugPrint CbteFch WSFEv1ObtenerTagXml(CbteFch) WSFEv1FechaCbte DebugPrint Moneda WSFEv1ObtenerTagXml(MonId) DebugPrint Cotizacion WSFEv1ObtenerTagXml(MonCotiz) DebugPrint DocTipo WSFEv1ObtenerTagXml(DocTipo) DebugPrint DocNro WSFEv1ObtenerTagXml(DocNro)
ejemplos con arreglos (primer elemento = 0 segundo = 1 etc) DebugPrint Primer IVA (alci id) WSFEv1ObtenerTagXml(Iva AlicIva 0 Id) DebugPrint Primer IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 0 Importe) DebugPrint Segundo IVA (alic id) WSFEv1ObtenerTagXml(Iva AlicIva 1 Id) DebugPrint Segundo IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 1 Importe) DebugPrint Primer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 0 Desc) DebugPrint Primer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 0 Importe) DebugPrint Segundo Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 1 Desc) DebugPrint Segundo Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 1 Importe) DebugPrint Tercer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 2 Desc) DebugPrint Tercer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 2 Importe)End If
Obtencioacuten de Atributos Avanzados WSFEv1 58
Servicio Web de Factura Electroacutenica Mercado InternoPrograma Matrix (WSMTXCA)
EL WSMTXCA es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten A (con detalle de factura) de la Resolucioacuten General 29042010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYY-MM-DD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los artiacuteculos losimpuestos (IVA) y tributos (similar a WSFEX y WSBFE)
A su vez el WSMTXCA devuelve mensajes de eventos (mantenimiento programado advertencias etc) losque deben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva tributos unidades de medida Estas tablas pueden sufrirmodificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha de vigencia(desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia del WSFE quelas tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiFacturaElectronicaMTXCAService
La programacioacuten de la interfase WSMTXCA es similar a WSFE WSFEX WSBFE y WSFEv1 serecomienda revisarlos
Objeto
El objeto COM se crea invocando a CreateObject(WSMTXCA)bull
Meacutetodos
Meacutetodos principales
Conectar(cache wsdl proxy) realiza la conexioacuten a los servidores de la AFIP (primerpaso esencial) Si no se especifica url del wsdl se utiliza servidores de homologacioacuten El paraacutemetrocache es un directorio donde se almacenan internamente la descripcioacuten del servicio (archivo WSDL)para mayor optimizacioacuten Proxy es un string con la informacioacuten del servidor intermediousuarioclaveservidorpuerto
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto
bull
Servicio Web de Factura Electroacutenica Mercado Interno Programa Matrix (WSMTXCA) 59
imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pagofecha_serv_desde fecha_serv_hasta moneda_id moneda_ctz obs) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetrosEstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura devuelve True si el campo pertenece al encabezado y se haactualizado correctamente (ver ejemplo)
bull
AgregarIva(id base_imp importe) agrega internamente un subtotal de IVA a unafactura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible e importeVer ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(id Desc base_imp alic importe) agrega internamente unsubtotal de tributo a una factura para luego poder autorizarla recibe los datos del impuesto nacionalprovincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccbte_cuit fecha) agrega internamente un comprobante asociado a una factura para luegopoder autorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detallede los paraacutemetros El campo cuit fueacute agregado seguacuten Release v05 15-03-2017 disponible desdeactualizacioacuten 113a El campo fecha fue agregado en Realse v010 01072019
bull
AgregarItem(u_mtx cod_mtx codigo ds qty umed precio bonifcod_iva imp_iva imp_subtotal) agrega internamente un item (linea de factura) a unafactura para luego poder autorizarla recibe los datos del item a factura a emitir Ver ejemplo para eldetalle de los paraacutemetros
bull
EstablecerCampoItem(campo valor) establece individualmente el valor de un campo deldetalle de la factura (uacuteltimo item agregado) devuelve True si el campo pertenece al encabezado y seha actualizado correctamente (ver ejemplo)
bull
AutorizarComprobante() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo deAutorizacioacuten Electroacutenico (CAE) Ver ejemplo
bull
AutorizarAjusteIVA() autoriza un ajuste de IVA (notas de creacutedito deacutebito) Se debe informarel coacutedigo 7790001001139 e informar solo el importe de IVA ajustado
bull
SolicitarCAEA(periodo orden) permite obtener un CAEA y su respectivo periacuteodo devigencia (fecha de validez desde y fecha de validez hasta)
bull
ConsultarCAEA(periodo orden caea) permite consultar la informacioacutencorrespondiente a un CAEA previamente otorgado (recibe periacuteodoorden o CAEA)
bull
InformarComprobanteCAEA() enviacutea la informacioacuten del comprobante emitido y asociado a unCAEA (ver AutorizarComprobante)
bull
InformarAjusteIVACAEA() enviacutea la informacioacuten del comprobante de ajuste de IVA emitidospara un CAEA (ver AutorizarAjusteIVA)
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125a 200620
bull
Meacutetodos secundarios
ConsultarComprobante(tipo_cbte punto_vta cbte_nro) recupera los datos deuna factura autorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobanteoriginal y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vezestablece los datos de la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle delos paraacutemetros y valores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos 60
ConsultarMonedas() ConsultarTiposComprobante()ConsultarTiposDocumento() ConsultarAlicuotasIVA()ConsultarCondicionesIVA() ConsultarUnidadesMedida()ConsultarTiposTributo() recupera valores referenciales de coacutedigos de las tablas deparaacutemetros devuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -sicorresponde- (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
ConsultarCotizacionMoneda(moneda_id) devuelve cotizacioacuten y fecha de la monedaindicada como paraacutemetro
bull
ConsultarPuntosVentaCAE() permite consultar los puntos de venta habilitados para CAE eneste WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPuntosVentaCAEA() permite consultar los puntos de venta habilitados para CAEAen este WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPtosVtaCAEANoInformados(caea) permite consultar que puntos de venta auacutenno fueron informados para un CAEA determinado devuelve una lista (array de strings) con los datosdel numero_punto_venta
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importes del comprobantebull ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull
Errores
La interfase procesa los errores WSMTXCA y los almacena en las proipedades Errores y ErrCodeErrMsgVer especificaciones teacutecnicas del WSMTXCA para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ejemplo
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSMTXCA As Object
Atributos 61
On Error GoTo ManejoError
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSMTXCAtra = WSAACreateTRA(wsmtxca)DebugPrint tra
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)DebugPrint cms
Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten (cambiar para produccioacuten)
Imprimir el ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint taDebugPrint Token WSAATokenDebugPrint Sign WSAASign
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSMTXCA = CreateObject(WSMTXCA)DebugPrint WSMTXCAversion
Setear tocken y sing de autorizacioacuten (pasos previos)WSMTXCAToken = WSAATokenWSMTXCASign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSMTXCACuit = 20267565393
Conectar al Servicio Web de FacturacioacutenWSDL = httpsserviciosjavaafipgovarwsmtxcaservicesMTXCAServicewsdlok = WSMTXCAConectar( WSDL) produccioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSMTXCADummyDebugPrint appserver status WSMTXCAAppServerStatusDebugPrint dbserver status WSMTXCADbServerStatusDebugPrint authserver status WSMTXCAAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4000cbte_nro = WSMTXCACompUltimoAutorizado(tipo_cbte punto_vta)fecha = Format(Date yyyy-mm-dd)concepto = 3tipo_doc = 80 nro_doc = 30000000007cbte_nro = CLng(cbte_nro) + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000
Ejemplo 62
imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs = Observaciones Comerciales libre
ok = WSMTXCACrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz obs)
Agrego los comprobantes asociadosIf False Then solo si es nc o nd tipo = 19 pto_vta = 2 nro = 1234 ok = WSMTXCAAgregarCmpAsoc(tipo pto_vta nro)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSMTXCAAgregarTributo(id Desc base_imp alic importe)
Agrego subtotales de IVAid = 5 21base_im = 10000importe = 2100ok = WSMTXCAAgregarIva(id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890codigo = P0001ds = Descripcion del producto P0001qty = 10000umed = 7precio = 10000bonif = 000cod_iva = 5imp_iva = 2100imp_subtotal = 12100ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx DESC Descuento 0 _
99 0 0 cod_iva -2100 -12100)
Solicito CAEcae = WSMTXCAAutorizarComprobante()
verifico que no haya erroresFor Each er In WSMTXCAErrores MsgBox er vbInformation ErrorNext
Ejemplo 63
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSMTXCAXmlRequestDebugPrint WSMTXCAXmlResponse
MsgBox Resultado amp WSMTXCAResultado amp CAE amp cae amp _ Venc amp WSMTXCAVencimiento amp Obs amp WSMTXCAobs _
vbInformation + vbOKOnly
Ejemplo para obtener coacutedigos referenciales (tabla moneda)
recupero tabla de paraacutemetros de moneda (id descripcioacuten)For Each x In WSMTXCAConsultarMonedas() DebugPrint xNext
busco la cotizacioacuten del dolar (ver Param Mon)ctz = WSMTXCAConsultarCotizacionMoneda(DOL)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSMTX factura electroacutenica con detalle)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta ambos el mismo nuacutemero si es una facturaindividual)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull imp_subtotal subtotal sin ivabull imp_trib Importe de otros tributosbull imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull moneda_ctz Cotizacioacuten de la moneda de la facturabull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull obs observaciones comerciales (campo libre)bull caea debe completarse si se informa una factura en esta modalidad (obtenido con SolicitarCAEA)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
u_mtx cantidad de unidades(ej 123456)bull cod_mtx codigo mtx del producto (ej 1234567890)bull codigo codigo opcional del producto (ej P0001)bull ds Descripcioacuten completabull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull
Descripcioacuten de la obtencioacuten de CAE CAEA 64
bonif Bonificacioacutenbull cod_iva Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_iva importe liquidado de IVAbull imp_subtotal = Importe total (incluyendo descuentos e IVA)bull
Para items descriptivos utilizar umed = 0 Para anticipos o descuentos utilizar umed = 99
Por cada alicuota de IVA se debe llamar al meacutetodo AgregarIva con los siguientes paraacutemetros
id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull base_imp base imponible (importe)bull importe importe liquidadobull
De existir otros tributos se debe llamar al meacutetodo AgregarTributo con los siguientes paraacutemetros
id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los comprobantes asociados a una nota decreacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobantebull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo AutorizarComprobante o InformarComprobanteCAEA
Si no hubiere inconvenientes la llamada debe devolver el CAE CAEA y se establece el atributoWSMTXCAResultado = A (Aceptado) y WSMTXCAVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSMTXCAObscon los diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (ConsultarComprobante)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSMTX en el sitio de la AFIP
Manual Desarrollador Informacioacuten importante sobre la operatoriabull
Descripcioacuten de la obtencioacuten de CAE CAEA 65
Establecer campos individualmente (ejemplo WSMTXCA)
Para lenguajes que no soporten el pasaje de varios parametros a un meacutetodo (por ej SERVOY por sulimitacioacuten de 6 argumentos) desde la versioacuten 106a es posible crear la factura en blanco (todos los camposvacios) y luego establecer los campos individualmente
ok = WSMTXCACrearFactura()ok = WSMTXCAEstablecerCampoFactura(concepto concepto)ok = WSMTXCAEstablecerCampoFactura(tipo_doc tipo_doc)ok = WSMTXCAEstablecerCampoFactura(nro_doc nro_doc)ok = WSMTXCAEstablecerCampoFactura(tipo_cbte tipo_cbte)ok = WSMTXCAEstablecerCampoFactura(punto_vta punto_vta)ok = WSMTXCAEstablecerCampoFactura(cbt_desde cbt_desde)ok = WSMTXCAEstablecerCampoFactura(cbt_hasta cbt_hasta)ok = WSMTXCAEstablecerCampoFactura(imp_total imp_total)ok = WSMTXCAEstablecerCampoFactura(imp_tot_conc imp_tot_conc)ok = WSMTXCAEstablecerCampoFactura(imp_neto imp_neto)ok = WSMTXCAEstablecerCampoFactura(imp_subtotal imp_subtotal)ok = WSMTXCAEstablecerCampoFactura(imp_trib imp_trib)ok = WSMTXCAEstablecerCampoFactura(imp_op_ex imp_op_ex)ok = WSMTXCAEstablecerCampoFactura(fecha_cbte fecha_cbte)ok = WSMTXCAEstablecerCampoFactura(fecha_venc_pago fecha_venc_pago)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_desde fecha_serv_desde)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_hasta fecha_serv_hasta)ok = WSMTXCAEstablecerCampoFactura(moneda_id moneda_id)ok = WSMTXCAEstablecerCampoFactura(moneda_ctz moneda_ctz)ok = WSMTXCAEstablecerCampoFactura(observaciones Obs)ok = WSMTXCAEstablecerCampoFactura(caea CAEA)ok = WSMTXCAEstablecerCampoFactura(vencimiento vencimiento)
Para los items de detalle seriacutea similar
ok = WSMTXCAAgregarItem()ok = WSMTXCAEstablecerCampoItem(u_mtx u_mtx)ok = WSMTXCAEstablecerCampoItem(cod_mtx cod_mtx)ok = WSMTXCAEstablecerCampoItem(codigo codigo)ok = WSMTXCAEstablecerCampoItem(ds ds)ok = WSMTXCAEstablecerCampoItem(qty qty)ok = WSMTXCAEstablecerCampoItem(umed umed)ok = WSMTXCAEstablecerCampoItem(precio precio)ok = WSMTXCAEstablecerCampoItem(bonif bonif)ok = WSMTXCAEstablecerCampoItem(iva_id cod_iva)ok = WSMTXCAEstablecerCampoItem(imp_iva imp_iva)ok = WSMTXCAEstablecerCampoItem(imp_subtotal imp_subtotal)
Interfase por archivos de texto siacutemil SIAP - RECE
Para lenguajes donde no es posible utilizar objetos COM se desarrolloacute una interfaz de texto (command lineinterfase) para poder utilizar los Web Services de la AFIP que funciona como un programa independientemanteniendo las ventajas y caracteriacutesticas presentadas anteriormente
Formatos de archivos de intercambio soportados
Archivos TXT de Texto plano estilo COBOL y aplicativos SIAP AFIPbull Tablas DBF para dBase III Fox Clipper Harbour (xBase) etcbull Formato JSON para lenguajes de programacioacuten maacutes modernos (PHP JAVA JavaScript etc)bull
Establecer campos individualmente (ejemplo WSMTXCA) 66
La herramienta es multiplataforma (LinuxWindows)
Ver secciones anteriores sobre la descripcioacuten de las opciones de configuracioacuten campos y procedimientos
Consideraciones Generalesbull Autenticacioacuten (WSAA) ticket de acceso certificados y claves privadasbull Gestioacuten de CAE (WSFEv1) mercado interno sin detalle (version 1)bull Gestioacuten de CAE (WSMTXCA) mercado interno con detalle (matrix)bull Gestioacuten de CAE (WSFEX) exportacioacutenbull
Configuracioacuten
Editar el archivo RECEINI en la carpeta de la intefase (CPYAFIPWS)
CERT ubicacioacuten del archivo certificado (ver WSAA)bull PRIVATEKEY ubicacioacuten del archivo de la clave privada (ver WSAA)bull CUIT CUIT del emisorbull ENTRADA ubicacioacuten del archivo de texto de entrada (para cada webservice)bull SALIDA ubicacioacuten del archivo de texto de salida (para cada webservice)bull URL direccioacuten de los servicios web de produccioacuten (para cada webservice)bull Seccion [DBF] configura los nombres de archivos con las tablas requeridasbull
Ejemplo
[WSAA]CERT=CSISTEMAempresacrtPRIVATEKEY= CSISTEMAempresakeyURL=httpswsaaafipgovarwsservicesLoginCmswsdl[WSFEv1]CUIT=30000000000CBU=2222222222222222222222ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
[WSMTXCA]CUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtReprocesar= SURL=httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAService
[WSBFE] aplica tambieacuten a WSBFEv1CUIT=30000000000ENTRADA= CSISTEMAentradatxtSALIDA= CSISTEMAsalidatxtURL=httpsservicios1afipgovarwsbfev1serviceasmxWSDL
[WSFEXv1] aplica tambieacuten a WSFEXCUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfexv1serviceasmxWSDL
Interfase por archivos de texto siacutemil SIAP - RECE 67
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalles = detallesdbfDatos Opcionales = opcionalesdbf
Seccioacuten [WSAA]
Configuracioacuten referente al web service de autenticacioacuten
CERT ubicacioacuten del archivo que contiene el certificadobull PRIVATEKEY ubicacioacuten de la clave privada correspondiente al certificadobull URL direccioacuten del servidor de AFIP Por ej para produccioacuten httpswsaaafipgovarwsservicesLoginCmswsdl
bull
Seccioacuten [WSFEv1]
Configuracioacuten referente al web service de factura nacional
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfev1serviceasmxWSDL
bull
Seccioacuten [WSFEX]
Configuracioacuten referente al web service de factura exportacioacuten
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfexserviceasmx
bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull
Seccioacuten [PROXY]
Configuracioacuten referente al servidor intermedio de salida a internet (firewall antivirus proxy etc) ej
Configuracioacuten 68
HOST = localhostbull PORT = 8000bull USER = marianobull PASS = reingartbull
NOTA solo debe configurarse esta seccioacuten si corresponde contactar al administrador de red de la empresapara determinar los paraacutemetros correctos de cada caso Para maacutes informacioacuten ver Errores de Conectividad
Formato de archivos de entrada y salida
Factura electroacutenica normal (WSFE)
El formato utilizado es similar a RECE pero extendido con algunos campos necesarios para utilizar losServicios Web A continuacioacuten se detalla nombre del campo posicioacuten inicial longitud y tipo
fecha_cbte (28A)bull tipo_cbte (102N)bull punto_vta (134N)bull cbt_desde (178N)bull cbt_hasta (258N)bull tipo_doc (362N)bull nro_doc (3811N)bull imp_total (7915I)bull imp_tot_conc (9415I)bull imp_neto (10915I)bull impto_liq (12415I)bull impto_liq_rni (13915I)bull imp_op_ex (15415I)bull cae (26114N)bull fecha_vto (2758A)bull resultado (2911A)bull motivo (2922A)bull reproceso (2941A)bull fecha_venc_pago (2958A)bull presta_serv (3031N)bull fecha_serv_desde (3048A)bull fecha_serv_hasta (3128A)bull id (32015N)bull
Tipos de campo
A Alfanumericobull N Numericobull I Importes con 2 decimales (sin incluir punto)bull
Los espacios no definidos se ignoran (completar con un espacio en blanco)
Para maacutes informacioacuten sobre los campos ver paraacutemetros y valores que retorna el meacutetodo Aut en el presentemanual
Seccioacuten [PROXY] 69
Como formato de entrada es posible utilizar el mismo archivo generado para el aplicativo SIAPRECE perono se podraacuten facturar servicios ya que los campo presta_serv y fecha_serv_desde y fecha_serv_hasta no estaacutencontemplados en dicho formato
Factura electroacutenica bienes de capital (WSBFE)
El formato es similar al de factura electroacutenica normal pero variacutea el tipo de registro (0 Encabezado 1 Detallede cada Item)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 0bull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numericobull Campo tipo_doc Posicioacuten 24 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 26 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 37 Longitud 15 Tipo Importebull Campo imp_tot_conc Posicioacuten 52 Longitud 15 Tipo Importebull Campo imp_neto Posicioacuten 67 Longitud 15 Tipo Importebull Campo impto_liq Posicioacuten 82 Longitud 15 Tipo Importebull Campo impto_liq_rni Posicioacuten 97 Longitud 15 Tipo Importebull Campo imp_op_ex Posicioacuten 112 Longitud 15 Tipo Importebull Campo impto_perc Posicioacuten 127 Longitud 15 Tipo Importebull Campo imp_iibb Posicioacuten 142 Longitud 15 Tipo Importebull Campo impto_perc_mun Posicioacuten 157 Longitud 15 Tipo Importebull Campo imp_internos Posicioacuten 172 Longitud 15 Tipo Importebull Campo imp_moneda_id Posicioacuten 187 Longitud 3 Tipo Alfanumericobull Campo imp_moneda_ctz Posicioacuten 190 Longitud 10 Tipo Importebull Campo zona Posicioacuten 200 Longitud 5 Tipo Alfanumericobull Campo cae Posicioacuten 205 Longitud 14 Tipo Numericobull Campo fecha_vto Posicioacuten 219 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 227 Longitud 1 Tipo Alfanumericobull Campo obs Posicioacuten 228 Longitud 2 Tipo Alfanumericobull Campo reproceso Posicioacuten 230 Longitud 1 Tipo Alfanumericobull Campo id Posicioacuten 231 Longitud 15 Tipo Numericobull
Detalle (por cada item)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 1bull Campo ncm Posicioacuten 2 Longitud 15 Tipo Alfanumericobull Campo sec Posicioacuten 17 Longitud 15 Tipo Alfanumericobull Campo qty Posicioacuten 32 Longitud 15 Tipo Importebull Campo umed Posicioacuten 47 Longitud 5 Tipo Numericobull Campo precio Posicioacuten 52 Longitud 15 Tipo Importebull Campo bonif Posicioacuten 67 Longitud 15 Tipo Importebull Campo imp_total Posicioacuten 82 Longitud 15 Tipo Importebull Campo iva_id Posicioacuten 97 Longitud 5 Tipo Numericobull Campo ds Posicioacuten 102 Longitud 200 Tipo Alfanumericobull
Factura electroacutenica normal (WSFE) 70
Si se informa el campo ID la factura se genera con dicho nuacutemero de secuencia De lo contrario para evitarproblemas y poder reprocesar el CAE se genera con un nuacutemero de secuencia del formatoTPPPPNNNNNNNN (tipo de comprobante punto de venta y nuacutemero de comprobante)
Factura electroacutenica exportacioacuten (WSFEX)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Formato
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 3bull Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo obs Posicioacuten 1618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 2618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 2668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 2671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 2691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 2692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 2706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 2714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 2715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 2716 Longitud 40 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 2756 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 2771 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 32 Longitud 12 Tipo Importe Decimalesbull Campo umed Posicioacuten 44 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 46 Longitud 12 Tipo Importe Decimales 3bull Campo imp_total Posicioacuten 58 Longitud 14 Tipo Importe Decimales 3bull Campo ds Posicioacuten 72 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica bienes de capital (WSBFE) 71
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Nota se utilizan 3 decimales para los importes y 6 para la cotizacioacuten de la moneda
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Tributo 2 IVA 3 Comprobante asociado 6 Opcionales 8 Periodo Comprobante asociado) y no tienedetalle de artiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbt_desde Posicioacuten 16 Longitud 8 Tipo Numericobull Campo cbt_hasta Posicioacuten 24 Longitud 8 Tipo Numericobull Campo concepto Posicioacuten 32 Longitud 1 Tipo Numericobull Campo tipo_doc Posicioacuten 33 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 35 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 46 Longitud 15 Tipo Importe Decimales 2bull Campo no_usar Posicioacuten 61 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 76 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 91 Longitud 15 Tipo Importe Decimales 2bull Campo imp_iva Posicioacuten 106 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 121 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 136 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 151 Longitud 3 Tipo Alfanumericobull Campo moneda_ctz Posicioacuten 154 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 164 Longitud 8 Tipo Alfanumericobull Campo cae Posicioacuten 172 Longitud 14 Tipo Alfanumericobull Campo fch_venc_cae Posicioacuten 186 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 194 Longitud 1 Tipo Alfanumericobull Campo motivos_obs Posicioacuten 195 Longitud 1000 Tipo Alfanumericobull Campo err_code Posicioacuten 1195 Longitud 6 Tipo Alfanumericobull Campo err_msg Posicioacuten 1201 Longitud 1000 Tipo Alfanumericobull Campo reproceso Posicioacuten 2201 Longitud 1 Tipo Alfanumericobull Campo emision_tipo Posicioacuten 2202 Longitud 4 Tipo Alfanumericobull Campo fecha_serv_desde Posicioacuten 2206 Longitud 8 Tipo Alfanumericobull
Factura electroacutenica exportacioacuten (WSFEX) 72
Campo fecha_serv_hasta Posicioacuten 2214 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 2222 Longitud 3 Tipo Numericobull Campo punto_vta Posicioacuten 2225 Longitud 5 Tipo Numericobull Campo fecha_hs_gen Posicioacuten 2230 Longitud 14 Tipo Alfanumerico formato yyyymmddhhmiss(pCAEA contingencia)
bull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tributo_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo desc Posicioacuten 18 Longitud 100 Tipo Alfanumericobull Campo base_imp Posicioacuten 118 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 133 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 148 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo iva_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo base_imp Posicioacuten 18 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 33 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numericobull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numericobull Campo nro Posicioacuten 9 Longitud 8 Tipo Numericobull Campo fecha Posicioacuten 17 Longitud 8 Tipo Numericobull Campo cuit Posicioacuten 25 Longitud 11 Tipo Numericobull
Opcionales Disponible desde actualizacioacuten 133b
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Compradores Disponible desde actualizacioacuten 137a (RG-4109-E Bienes Muebles Registrables)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo doc_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo doc_nro Posicioacuten 5 Longitud 80 Tipo Numerico Decimalesbull Campo porcentaje Posicioacuten 85 Longitud 6 Tipo Importe Decimales 2bull
Periodo Cbte Asoc Disponible desde actualizacioacuten 138a
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_desde Posicioacuten 2 Longitud 8 Tipo Numericobull Campo fecha_hasta Posicioacuten 10 Longitud 8 Tipo Numericobull
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 73
Factura electroacutenica Mercado Interno Matrix (WSMTXCA)
El formato es similar al de factura electroacutenica mercado interno version 1 pero variacutea el tipo de registro (0Encabezado 1 Tributo 2 IVA 3 Comprobante asociado 4 Detalle de cada item) y tiene detalle deartiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 10 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 12 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 14 Longitud 4 Tipo Numerico Decimalesbull Campo cbt_desde Posicioacuten 18 Longitud 8 Tipo Numerico Decimalesbull Campo cbt_hasta Posicioacuten 26 Longitud 8 Tipo Numerico Decimalesbull Campo concepto Posicioacuten 34 Longitud 1 Tipo Numerico Decimalesbull Campo tipo_doc Posicioacuten 35 Longitud 2 Tipo Numerico Decimalesbull Campo nro_doc Posicioacuten 37 Longitud 11 Tipo Numerico Decimalesbull Campo imp_total Posicioacuten 48 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 63 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 78 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 93 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 108 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 138 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 141 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 151 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_desde Posicioacuten 161 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_hasta Posicioacuten 171 Longitud 10 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 181 Longitud 14 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 195 Longitud 10 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 205 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 206 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 1206 Longitud 6 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 1212 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo reproceso Posicin 2212 Longitud 1 Tipo Alfanumerico Decimalesbull Campo emision_tipo Posicin 2213 Longitud 4 Tipo Alfanumerico Decimalesbull Campo observaciones Posicioacuten 2217 Longitud 1000 Tipo Alfanumerico Decimalesbull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tributo_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull Campo desc Posicioacuten 5 Longitud 100 Tipo Alfanumerico Decimalesbull Campo base_imp Posicioacuten 105 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 120 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 135 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo iva_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Mercado Interno Matrix (WSMTXCA) 74
Campo base_imp Posicioacuten 5 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 20 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Opcionales
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Detalle de item
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo u_mtx Posicioacuten 2 Longitud 10 Tipo Numerico Decimalesbull Campo cod_mtx Posicioacuten 12 Longitud 30 Tipo Alfanumerico Decimalesbull Campo codigo Posicioacuten 42 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 72 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo umed Posicioacuten 87 Longitud 3 Tipo Numerico Decimalesbull Campo precio Posicioacuten 90 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo bonif Posicioacuten 105 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo iva_id Posicioacuten 120 Longitud 3 Tipo Numerico Decimalesbull Campo imp_iva Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 138 Longitud 15 Tipo Importe Decimales 2bull Campo ds Posicioacuten 153 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo pais_dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo nombre_cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 2bull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1) 75
Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 4000 Tipo Alfanumerico Decimalesbull Campo obs_generales Posicioacuten 4618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 5618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 5668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 5671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 5691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 5692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 5706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 5714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 5715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 5716 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 6716 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 6731 Longitud 8 Tipo Alfanumerico Decimalesbull Campo excepcion Posicioacuten 6739 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 6839 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 6939 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo fecha_pago Posicioacuten 7939 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 50 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 52 Longitud 12 Tipo Importe Decimales 6bull Campo umed Posicioacuten 64 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 66 Longitud 12 Tipo Importe Decimales 6bull Campo importe Posicioacuten 78 Longitud 13 Tipo Importe Decimales 2bull Campo bonif Posicioacuten 91 Longitud 12 Tipo Importe Decimales 6bull Campo ds Posicioacuten 103 Longitud 4000 Tipo Alfanumerico Decimalesbull
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull Campo cbte_cuit Posicioacuten 17 Longitud 11 Tipo Numerico Decimalesbull
Formato Tablas xBase DBF (dBase III Fox Clipper)
Las ultimas versiones de la interfaz ademas de manejo por archivo de texto soporta manejo por tablas DBFEstas tablas pueden ser generadas con cualquier libreriacutea o aplicacioacuten compatible (incluso pueden ser abiertascon planillas de caacutelculo)
Formato Tablas xBase DBF (dBase III Fox Clipper) 76
Los tipos de campos son
C(l) caracter (longitud)bull N(ld) numerico (longitud y decimales)bull M camos memo (usado para errores y mensajes extensos gt250 caracteres)bull D campos fechabull
Los nombres de los campos son los mismos que se manejan para el archivo de texto pero sin el guioacuten bajo yrecortados a 10 caracteres
Se utiliza la libreriacutea Python dBase (dbf-08819) que soporta los siguientes tipos de archivos
dBase III Plusbull dBase III Plus wmemosbull dBase IVbull dBase IV SQLbull dBase IV wmemosbull dBase IV wmemosbull dBase IV wSQL tablebull dBase Vbull FoxBASEbull FoxPro wmemosbull Visual FoxProbull Visual FoxPro (auto increment field)bull
Reconoce archivos con extensioacuten DBF DBT FPT entre otros
Factura electroacutenica mercado interno (WSFEv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
IMPORTANTE algunos campos han cambiado su denominacioacuten en las uacuteltimas versiones para hacerloscompatibles con las tablas PDF (solo se muestra el nombre de campo perteneciente a la uacuteltima actualizacioacuten)
Encabezado (encabezadbf)
Encabezado (datos generales de la factura)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtdesde N(80)bull Campo cbthasta N(80)bull Campo concepto N(10)bull Campo tipodoc N(20)bull Campo nrodoc N(110)bull Campo imptotal N(152)bull Campo nousar N(152)bull Campo imptotconc N(152)bull
Factura electroacutenica mercado interno (WSFEv1) 77
Campo impneto N(152)bull Campo impiva N(152)bull Campo imptrib N(152)bull Campo impopex N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo fechavencp C(8)bull Campo cae C(14)bull Campo fchvenccae C(8)bull Campo resultado C(1)bull Campo motivosobs Mbull Campo errcode C(6)bull Campo errmsg Mbull Campo reproceso C(1)bull Campo emisiontip C(4)bull Campo fechaservd C(8)bull Campo fechaservh C(8)bull
Tributo (tributodbf)
Detalle de otros tributos
Campo tiporeg N(10)bull Campo tributoid N(160)bull Campo desc C(100)bull Campo baseimp N(152)bull Campo alic N(152)bull Campo importe N(152)bull
Iva (ivadbf)
Detalle de subtotales por aliacutecuota de IVA
Campo tiporeg N(10)bull Campo ivaid N(160)bull Campo baseimp N(152)bull Campo importe N(152)bull
Comprobante Asociado (comprobadbf)
Comprobante Asociado
Campo tiporeg N(10)bull Campo tipo N(30)bull Campo ptovta N(40)bull Campo nro N(80)bull
Opcionales (opcionaldbf)
Datos opcionales (adicionales seguacuten cada nueva RG 3411 3668 4004-E etc)
Encabezado (encabezadbf) 78
Campo tiporeg N(10)bull Campo opcionalid C(4)bull Campo valor C(250)bull
Compradores (compradodbf)
Datos para Venta de bienes muebles registrables (RG 4109-E)
Campo tiporeg N(10)bull Campo doctipo N(30)bull Campo docnro N(800)bull Campo porcentaje N(62)bull
Factura electroacutenica mercado interno matrix (WSMTXCA)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Tabla Encabezadbf Encabezado (datos generales de la factura)
tiporeg N(10)bull fechacbte C(10)bull tipocbte N(20)bull puntovta N(40)bull cbtdesde N(80)bull cbthasta N(80)bull concepto N(10)bull tipodoc N(20)bull nrodoc N(110)bull imptotal N(152)bull imptotconc N(152)bull impneto N(152)bull impsubtota N(152)bull imptrib N(152)bull impopex N(152)bull monedaid C(3)bull monedactz N(106)bull fechavencp C(10)bull fechaservd C(10)bull fechaservh C(10)bull cae N(140)bull fchvenccae C(10)bull resultado C(1)bull motivosobs Mbull errcode C(6)bull errmsg Mbull reproceso C(1)bull emisiontip C(4)bull observacio Mbull
Tabla Tributodbf Detalle de otros tributos
Opcionales (opcionaldbf) 79
tiporeg N(10)bull tributoid C(3)bull desc C(100)bull baseimp N(152)bull alic N(152)bull importe N(152)bull
Tabla Ivadbf Detalle de subtotales por aliacutecuota de IVA
tiporeg N(10)bull ivaid C(3)bull baseimp N(152)bull importe N(152)bull
Tabla Comprobadbf Comprobante Asociado
tiporeg N(10)bull tipo N(30)bull ptovta N(40)bull nro N(80)bull
Tabla Detallesdbf Detalles del item
tiporeg N(10)bull umtx N(100)bull codmtx C(30)bull codigo C(30)bull qty N(153)bull umed N(30)bull precio N(153)bull bonif N(153)bull ivaid N(30)bull impiva N(152)bull impsubtota N(152)bull ds Mbull
Factura electroacutenica exportacioacuten (WSFEXv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Encabezado (encabezadbf)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtenro N(80)bull Campo tipoexpo N(10)bull Campo permisoexi C(1)bull Campo paisdstcmp N(30)bull
Factura electroacutenica mercado interno matrix (WSMTXCA) 80
Campo nombreclie C(200)bull Campo cuitpaiscl N(110)bull Campo domicilioc Mbull Campo idimpositi C(50)bull Campo imptotal N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo obscomerci Mbull Campo obsgeneral Mbull Campo formapago C(50)bull Campo incoterms C(3)bull Campo incotermsd C(20)bull Campo idiomacbte C(1)bull Campo cae N(140)bull Campo fechavto C(8)bull Campo resultado C(1)bull Campo reproceso C(1)bull Campo motivosobs Mbull Campo id N(150)bull Campo fchvenccae C(8)bull Campo excepcion C(100)bull Campo errcode C(100)bull Campo errmsg Mbull
Detalle (detalledbf)
Campo tiporeg N(10)bull Campo codigo C(50)bull Campo qty N(122)bull Campo umed N(20)bull Campo precio N(122)bull Campo importe N(132)bull Campo bonif N(122)bull Campo ds Mbull
Permiso (permisodbf)
Campo tiporeg N(10)bull Campo idpermiso C(16)bull Campo dstmerc N(30)bull
Comprobante Asociado (comprobadbf)
Campo tiporeg N(10)bull Campo cbtetipo N(30)bull Campo cbtepuntov N(40)bull Campo cbtenro N(80)bull Campo cbtecuit N(110)bull
Encabezado (encabezadbf) 81
Formato JSON
Factura electroacutenica mercado interno (WSFEv1)
Para lenguajes modernos (PHP JAVA JavaScript etc) se pueden utilizar archivos de intercambio en formatoJSON
Ejecutar rece1exe json
Ejemplo archivo de entrada faactura_electronicajson
[ tipo_cbte 3 punto_vta 4002 cbt_desde 447 cbt_hasta 447 fecha_cbte 20190511 tipo_doc 80 nro_doc 30500010912
concepto 1 fecha_venc_pago null fecha_vto 20190521
imp_neto 10000 imp_iva 2100 imp_op_ex 000 imp_tot_conc 000 imp_trib 100 imp_total 12200
moneda_id PES moneda_ctz 1000
ivas [ iva_id 5 base_imp 100 importe 21 ] tributos [ tributo_id 99 alic 1 base_imp 100 importe 1 desc Impuesto Municipal Matanza ] cbtes_asoc [ nro 1234 pto_vta 2 tipo 1 ] opcionales [] compradores [] ]
La resupuesta del webservice de AFIP es agregada al mismo formato (ejemplo editado)
[ resultado A cae 69193742426586 fch_venc_cae 20190521 emision_tipo CAE motivos_obs err_code err_msg
Formato JSON 82
reproceso ]
Forma de uso
Llamar al ejecutable RECEEXE (factura electroacutenica normal WSFE) RECEBEXE (factura electroacutenicaBienes de Capital WSBFE) RECEXEXE (factura electroacutenica Exportacioacuten) RECE1EXE (facturaelectroacutenica mercado interno WSFE versioacuten 1) en la carpeta de la intefase (CPYAFIPWS)
En caso de ejecucioacuten correcta informara por pantalla los ID y CAE obtenidos y el coacutedigo de retorno es 0
ID 1000200000063 CAE 59033567692234 Motivo 00 Reproceso NID 1000200000064 CAE 59033693441244 Motivo 00 Reproceso NID 1000200000065 CAE 59033880026543 Motivo 00 Reproceso N
El CAE obtenido fecha de vencimiento y demaacutes valores devueltos por WSFE (resultado reproceso motivode rechazo u observacioacuten) son escritos en el archivo de salida con la misma informacioacuten de la factura que enel archivo de entrada
En el caso de error informa por pantalla el motivo y el coacutedigo de retorno es distinto de 0
ns1coenotAuthorized Computador no autorizado a acceder los servicio de AFIP
1000 FERecuperaLastCMPRequestSRV_RA Usuario no autorizado a realizar esta operacionValidacionDeToken No aparecioacute CUIT en lista de relaciones 30000000000
Paraacutemetros
RECEEXE RECEBEXE RECEXEXE RECE1EXE y RECEMEXE reciben los siguientes argumentospor liacutenea de comando
ayuda lista los paraacutemetros habilitadosbull prueba Teniendo los certificados instalados se puede realizar una prueba donde la interface generaraacuteun archivo de entrada para las tres proacuteximas facturas obteniendo los uacuteltimos nuacutemeros de transaccioacuteny comprobante
bull
ult Solicita Tipo de comprobante y Punto de Venta y devuelve el uacuteltimo numero de comprobanteregistrado
bull
dummy consulta estado de servidores (deberiacutean ser OK los 3 servidores)bull ptosventa devuelve los puntos de venta habilitados para emitir facturas electroacutenicas (soloWSFEv1RECE1)
bull
debug modo depuracioacuten (detalla y confirma las operaciones)bull formato muestra el formato de los archivos de entradasalidabull get recupera datos de un comprobante autorizado previamente (verificacioacuten solo para RECEXRECE1 y RECEM)
bull
xml almacena los requerimientos y respuestas XML (uacutetil para depuracioacuten y registro)bull dbf modo de trabajo con tablas Dbase IIIFoxPro o similares (solo RECE1 y RECEM)bull json modo de trabajo con formato JSON (JavaScript PHP Java) (solo RECE1)bull
Se puede especificar como primer paraacutemetro un nombre de archivo RECEINI alternativo para cargardistintas configuraciones por ej
Factura electroacutenica mercado interno (WSFEv1) 83
RECE1EXE rece-empresaxini
Si no se especifica accion por defecto se enviacutea la informacioacuten del archivo de intercambio para autorizar laemisioacuten de factura electroacutenica devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) y demaacutes datos queresponde AFIP
Para CAEA (CAE Anticipado) aplican las siguientes opciones (RECEMRECE1)
solicitarcaea obtiene un CAEA y su respectivo periacuteodo de vigencia (fecha de validez desde y fechade validez hasta)
bull
consultarcaea consulta la informacioacuten correspondiente a un CAEA previamente otorgado (recibeperiacuteodoorden o CAEA)
bull
informarcaeanoutilizado informarcaeanoutilizadoptovta registra en AFIP un CAEA no utilizadobull informarcaea enviacutea la informacioacuten del comprobante emitido y asociado a un CAEAbull
Ejemplo RECE1 para autorizar una factura electroacutenica
Al ejecutar la herramienta sin paraacutemetros se autoriza la factura en el archivo de entrada guardando elresultado de AFIP en el archivo de salida
CPYAFIPWSgt RECE1EXE
Procesando FAC A 4002 00002067 00002067 CUIT 30628789661 $ 12200 IVA $ 2100NRO 2067 Resultado A CAE 65253261906700 Obs Err Reproceso S
Ante cualquier dificultad agregar los paraacutemetros --trace debug para ver los mensajes de depuracioacuten y xmldetallados
Ejemplo RECE1 consulta ultimo comprobante
Ejemplo para obtener el uacuteltimo nuacutemero de factura emitida
CPYAFIPWSgt RECE1EXE ultConsultar ultimo numeroTipo de comprobante 19Punto de venta 2Ultimo numero 62
Si se pasa el tipo de comprobante y punto de venta por linea de comando (luego de ult) en el archivo desalida guardaraacute el dato devuelto por AFIP
CPYAFIPWSgt RECE1EXE ult 1 4001Consultar ultimo numeroUltimo numero 222
Ejemplo RECE1 consulta de comprobante
Es posible recuperar los datos de un comprobante indicando get y tipo de comprobante punto de venta ynuacutemero de comprobante
CPYAFIPWSgt RECE1EXE get 1 5 478Recuperar comprobanteFechaCbte = 20150703
Paraacutemetros 84
CbteNro = 478PuntoVenta = 5TipoDoc = 80NroDoc = 27269434894ImpTotal = 226875CAE = 65273821773505Vencimiento = 20150713EmisionTipo = CAE
Es posible agregar xml yo --trace para ver el mensaje enviado y recibido desde AFIP con datos completosLos datos del comprobante recuperado tambieacuten se guardaraacuten en el archivo de intercambio (salida)
Ejemplo RECE1 consulta puntos de venta
Ejemplo para consultar los puntos de venta habilitados por AFIP
CPYAFIPWSgt RECE1EXE ptosventa
=== Puntos de Venta ===3|EmisionTipoCAE|BloqueadoN|FchBajaNULL4|EmisionTipoCAE|BloqueadoN|FchBajaNULL
Ejemplo RECEX1 consulta monedas con cotizacioacuten
Retorna la cotizacioacuten a la fecha consultada de la base de datos aduanera de todas las monedas que poseancotizacioacuten a la fecha indicada
CPYAFIPWSgt RECEX1EXE monctz Fecha (AAAAMMDD) |024|1757370|2202019||030|10991355|2202019||034|2833349|2202019||009|39777268|2202019||012|10663978|2202019||028|21977839|2202019||014|6073274|2202019||023|0012042|2202019||018|30185896|2202019||019|0358860|2202019||032|0012749|2202019||DOL|3967|2202019||016|4295104|2202019||026|28471159|2202019||033|0060760|2202019||035|11955998|2202019||063|27265191|2202019||015|4659463|2202019||060|451564|2202019||062|0605559|2202019||010|2068376|2202019||029|0006557|2202019||011|1214078|2202019||021|520470|2202019||025|0381832|2202019||031|5761801|2202019||061|5902659|2202019|0 OK
Ejemplo RECE1 consulta de comprobante 85
Entorno
Algunas versiones de COBOL cambian el directorio u otras variables del entorno (codificacioacuten zona horariaetc) En este caso se recomienda armar un archivo RECEBAT
ECHO OFFREM limpiar la zona horaria y cambiar al directorio de la interfaseSET TZ=CD CPYAFIPWSRECEEXE
PyFEPDF generador de PDF de facturas electroacutenicas
La herramienta PyFEPDF permite generar archivos PDF con el contenido de las Facturas Electroacutenicas paraponerlos a disposicioacuten de los clientes o ser enviados electroacutenicamente viacutea email con cualquier servicio decorreos o por web
Utiliza un enfoque similar a las interfaces para webservices por lo que su uso es muy simple totalmenteautomatizado (sin intervencioacuten del usuario) y no necesita herramientas externas (ni impresoras PDF nitipografiacuteas para el coacutedigo de barras)
Cubre toda la operatoria de Factura Electroacutenica seguacuten AFIP dada la Resolicioacuten General 24852006 ynormativa relacionada (RG141503 y RG1361) aplicable a
merado interno (WSFEv1 y WSMTXCA incluyendo importacioacuten con y sin detalle)bull exportacioacuten (WSFEX)bull bono fiscal electroacutenico (WSBFE)bull
Ver muestra baacutesica en facturapdf
La interfaz maneja automaacuteticamente
Logotipos e informacioacuten particular de cada empresabull Disentildeo en PDF libre modificable (incluye disentildeador visual faacutecil e intuitivo)bull Paginado y transporte con muacuteltiples copias (Original Duplicado etc)bull Textos ilimitados (detalles observaciones etc)bull IVA discriminado (subtotales facturas A)bull Coacutedigo de barras Interleaved 2 of 7 con diacutegito verificador (reemplazado por coacutedigo QR)bull Coacutedigo QR (Obligatorio a partir de Marzo 2021 - ver cronograma de implementacioacuten)bull Metadatos en las propiedades del PDF para buacutesquedas y archivamientobull Impresioacuten directa sin intervencioacuten del usuariobull
Nota algunas caracteriacutesticas pueden no estar disponible dado limitaciones del lenguaje de programacioacuten yosistema operativo
De manera similar a las otras interfaces y herramientas el instalador de PyFEPDF para homologacioacuten(evaluacioacuten y pruebas) estaacute disponible en la seccioacuten Descargas
Importante PyFEPDF es una herramienta adicional independiente del resto de los webservices yherramientas y los costos del soporte comercial variacutean dependiendo de las necesidades para implementarlaVer Costos y Condiciones
Entorno 86
Aclaraciones PDF
Coacutedigo de Barras es recomendable generarlo especialmente si se imprime (dependiendo del casoseriacutea obligatorio) Este componente contempla internamente la generacioacuten directa de la imaacutegen demanera vectorial (escalable en cualquier resolucioacuten) seguacuten el formato que requiere AFIP (Interleaved2 of 5) y no es necesario utilizar ninguna tipografia ni cuestioacuten adicional Simplemente debecompletarse el CUIT emisor punto de venta tipo de comprobante CAE y fecha de vencimiento delCAE (esta uacuteltima en formato AFIP AAAAMMDD) El componente contempla tambieacuten el caacutelculo deldiacutegito verificador De no estar todos los datos correctos no se generaraacute el coacutedigo de barras Parainformacioacuten general ver nuestro componente auxiliar PyI25
bull
Observaciones AFIP Si esta presente motivos_obs (respuesta de AFIP en WSFEv1Obs osimilar) deberiacutea agregarse la leyenda El IVA discriminado no puede computarse como CreacuteditoFiscal (RG248508 Art 27) -esto estaacute contemplado internamente en el componente- Por ej unmensaje de observacioacuten de AFIP seriacutea Factura individual DocTipo 80 DocNro 30000000007 nose encuentra registrado en los padrones de AFIP Anteriormente AFIP solo informaba el coacutedigo (09en este caso) para maacutes informacioacuten ver WSFE F136
bull
Discriminacioacuten de IVA el programador es responsable de enviar los datos correctos seguacuten lasdiferentes normativas de AFIP Generalmente el importe de IVA solo se debe discriminar parafacturas clase A o M En las facturas clase B por lo general solo se muestra la tasa pero no el neto niIVA liquidado En las facturas clase C y E generalmente no se muestra la columna de IVA ni NETOEsta loacutegica esta contemplada internamente pero es responsabilidad de la aplicacioacuten que utilice elcomponente el revisar por la consistencia de los datos Salvo en la Factura A para el resto se debeindicar el precio unitario IVA Incluido (de corresponder) y el importe total de cada artiacuteculo tambieacutendeberiacutea ser IVA Incluido en todos los casos (de manera similar a como se emiten los comprobantespor el sitio de clave fiscal de AFIP) Recomendamos utilizar el campo imp_subtotal para evitardiferencias de calculo y redondeo (deberiacutea ser la suma del neto + importes no gravado y exento paracomprobantes clase A e incluir el importe de IVA para los comprobantes clase B)
bull
Descuentos si bien se provee un campo descuento para los importes generales es recomendableque se utilice un artiacuteculo de bonificacioacuten general en el detalle con coacutedigo de unidad de medidaumed=99 y el importe en negativo para un correcto caacutelculo de los subtotales (especialmente si lafactura se extiende por varias paacuteginas) y contemplar la normativa de almacenamientoinformacioacuten yformatos de otros webservices como WSMTXCA WSBFEv1 y WSFEXv1
bull
Logotipo AFIP en las uacuteltimas actualizaciones (107q) se incluye el logotipo de AFIP (similar al quese incluye en las facturas emitidas por clave fiscal) Para que muestre la leyenda ComprobanteAutorizado debe establecerse el campo resultado = A y no debe ser un instalador dehomologacioacuten Proacuteximamente se agregaraacuten maacutes validaciones en este sentido (la constatacioacuten delcomprobante es responsabilidad de la aplicacioacuten que utilice el componente ver WSCDC) Verejemplos y formatos a continuacioacuten para mayor informacioacuten
bull
Requisitos formato de Facturaver httpwwwafipgovarafip259IIcap1bhtmbull
Interfaz COM PyFEPDFDLL
PyFEPDFDLL es una interfaz COM (AutomatizacionActiveX) similar a un Control OCX pero que nonecesita un formulario visual por lo que se puede usar desde desde cualquier lenguaje compatible enWindows (VB VFP Delphi etc) Tambieacuten puede utilizarce desde aplicaciones como MS Excel MS Accessetc
Aclaraciones PDF 87
Objeto COM PyFEPDF propiedades y meacutetodos
El objeto COM se crea invocando a CreateObject(PyFEPDF)
Las propiedades del objeto son
CUIT cuit del emisorbull Version versioacuten de la herramienta (ej 101b)bull InstallDir directorio de instalacioacutenbull
Los meacutetodos generales del objeto para crear una factura son los siguientes (ver ejemplo en VB a continuacioacutenpara maacutes detalles)
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbte_nro imp_total imp_tot_conc imp_neto imp_iva imp_tribimp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz cae fecha_vto_caeid_impositivo nombre_cliente domicilio_cliente pais_dst_cmpobs_comerciales obs_generales forma_pago incoterms idioma_cbtemotivos_obs) recibe toda la informacioacuten del encabezado de una factura seguacuten la legislacioacutenvigente
bull
AgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed preciobonif iva_id imp_iva importe despacho) agrega un item de detalle de artiacuteculoAdicionalmente puede pasarse los paraacutemetros dato_a dato_b dato_c dato_d dato_edespacho tambieacuten es opcional
bull
AgregarIva(iva_id base_imp importe) agrega un subtotal de iva (por cada aliacutecuota)bull AgregarTributo(tributo_id Desc base_imp alic importe) agrega otrosimpuestos (uno por cada ingresos brutos retenciones y percepciones etc)
bull
AgregarCmpAsoc(tipo pto_vta nro) agrega un comprobante asociado a la facturabull
Una vez creada la factura con todos los items se debe especificar el formato mediante los siguientes meacutetodos(ver ejemplo en VB a continuacioacuten para maacutes detalles)
CargarFormato(archivo_csv) crea todos los campos del disentildeo de la factura (layout)leyendolos desde el archivo especificado
bull
AgregarCampo(nombre tipo x1 y1 x2 y2 font size bold italicunderline foreground background align text priority) agrega uncampo manualmente al disentildeo de la factura (layout)
bull
AgregarDato(campo valor pagina) con campo = nombre usado en plantilla el valorpara cada hoja y en pagina el nro de paacutegina o T todas P primera U ultima
bull
Luego se debe crear la plantilla que seraacute rellenada con los datos de la factura y por uacuteltimo se generaraacute ymostraraacute el PDF (ver ejemplo en VB a continuacioacuten para maacutes detalles)
CrearPlantilla(papel orientacion) crea una plantilla con el papel (A4 legal o letter)y orientacioacuten (portrait landscape)
bull
ProcesarPlantilla(num_copias lineas_max qty_pos) procesa los datos de lafactura dentro de la plantilla indicando la cantidad de copioas (1 original 2 duplicado 3triplicado)la cantidad de liacuteneas maacuteximas por paacutegina
bull
GenerarPDF(salida) genera el archivo PDF terminado con el nombre dado en salidabull
Objeto COM PyFEPDF propiedades y meacutetodos 88
MostrarPDF(salida imprimir) muestra el contenido del PDF generado (usando AdobeAcrobat Reader o similar) y opcionalmente lo enviacutea directo a la impresora
bull
AtributosPropiedades especiacuteficos de configuracioacuten
CUIT cuit del emisor (para generar el coacutedigo de barras)bull FmtCantidad formato numeacuterico para cantidades por ej 04 (4 decimales)bull FmtPrecio formato numeacuterico para precios unitarios por ej 02 (2 decimales)bull Locale configuracioacuten regional a utilizar para formatear importes y fechas por ejSpanish_Argentina1252 (Windows) es_ARutf8 (Linux)
bull
Atributos geneacutericos (similares a otros componentes)
Version versioacuten de la interfase (ej 107q)bull InstallDir directorio de instalacioacuten (ej CArchivos de ProgramaPyAfipWs)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Ver Formato de Intercambio PDF y los otros componentes a los webservices para informacioacuten adicional sobrecada campo
Ejemplo PyFEPDF en VB
A modo de demostracioacuten a continuacioacuten se detalla un ejemplo simple (lenguaje Visual Basic) comentando elfuncionamiento baacutesico de la interfaz para generacioacuten de Facturas Electroacutenicas en formato PDF
Crear objeto interface para generacioacuten de FE en PDFSet PyFEPDF = CreateObject(PyFEPDF)DebugPrint PyFEPDFVersionDebugPrint PyFEPDFInstallDir
CUIT del emisorPyFEPDFCUIT = 33693450239
establezco formatos (cantidad de decimales)PyFEPDFFmtCantidad = 04PyFEPDFFmtPrecio = 02
Datos del encabezado de la facturatipo_cbte = 1 Factura Apunto_vta = 40000 prefijocbte_nro = 12345678 nuacutemero de facturafecha = 20110327concepto = 3 datos del clientetipo_doc = 80 nro_doc = 30000000007nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16 coacutedigo para exportacioacutenid_impositivo = PJ54482221-l totales del comprobanteimp_total = 12200 imp_tot_conc = 000imp_neto = 10000 imp_iva = 2100imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000
Ejemplo PyFEPDF en VB 89
fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturadofecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libremoneda_id = 012moneda_ctz = 05forma_pago = 30 diasincoterms = FOB termino de comercio exterior para exportacioacutenidioma_cbte = 1 idioma para exportacioacuten (no usado por el momento)motivos_obs = 11 motivo de observacioacuten (F136 y otros)
Coacutedigo de Autorizacioacuten Electroacutenica y fecha de vencimiento (para facturas tradicionales no imprimir el CAE ni coacutedigo de barras)cae = 61123022925855fecha_vto_cae = 20110320
Creo la factura (internamente en la interfaz)ok = PyFEPDFCrearFactura( _ concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fecha_vto_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivos_obs)
Parametros adicionales del encabezado
ok = PyFEPDFEstablecerParametro(localidad_cliente Hurlingham)ok = PyFEPDFEstablecerParametro(provincia_cliente Buenos Aires)
Leyenda Comprobante Autorizado (verificar previamente con WSCDC o similar)
ok = PyFEPDFEstablecerParametro(resultado A)
Agregar comprobantes asociados (si es una NCND)tipo = 19pto_vta = 2nro = 1234pyfepdfAgregarCmpAsoc(tipo pto_vta nro)
Agrego subtotales de IVA (uno por alicuota)iva_id = 5 coacutedigo para aliacutecuota del 21base_imp = 100 importe neto sujeto a esta aliacutecuotaimporte = 21 importe liquidado de ivaok = PyFEPDFAgregarIva(iva_id base_imp importe)
Agregar cada impuesto (por ej IIBB retenciones percepciones etc)tributo_id = 99 codigo para 99-otros tributosDesc = Impuesto Municipal Matanzabase_imp = 10000 importe sujeto a este tributoalic = 100 alicuota (porcentaje) de este tributoimporte = 100 importe liquidado de este tributook = PyFEPDFAgregarTributo(tributo_id Desc base_imp alic importe)
Agrego detalles de cada item de la facturau_mtx = 123456 unidadescod_mtx = 1234567890123 coacutedigo de barrascodigo = P0001 codigo interno a imprimir (ej articulo)
Ejemplo PyFEPDF en VB 90
ds = Descripcion del producto P0001qty = 2 cantidadumed = 7 coacutedigo de unidad de medida (ej 7 para unidades)precio = 100 precio neto (A) o iva incluido (B)bonif = 0 importe de descuentosiva_id = 5 coacutedigo para aliacutecuota del 21imp_iva = 42 importe liquidado de ivaimporte = 242 importe total del itemdespacho = Nordm 123456 numero de despacho de importacioacutenok = PyFEPDFAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
ds = Descuento generalumed = 99precio = -100imp_iva = -21importe = -121ok = PyFEPDFAgregarDetalleItem( ds 0 umed _ precio 0 iva_id imp_iva importe)
Agrego datos adicionales fijosok = PyFEPDFAgregarDato(logo PyFEPDFInstallDir + fpdfpng)ok = PyFEPDFAgregarDato(EMPRESA Empresa de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE1 Direccion de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE2 Capital Federal)ok = PyFEPDFAgregarDato(ObservacionesGenerales1 Nota al pie1)
Cargo el formato desde el archivo CSV (opcional) (carga todos los campos a utilizar desde la planilla)ok = PyFEPDFCargarFormato(PyFEPDFInstallDir + facturacsv)
Agrego campos manualmente (opcional)nombre = prueba tipo = T T texto L lineas I imagen etcX1 = 50 Y1 = 150 X2 = 150 Y2 = 255 coordenadas (en milimetros)Font = Arial Size = 20 Bold = 1 Italic = 1 Underline = 1 tipo de letraforeground = 000000 background = FFFFFF colores de frente y fondoAlign = C Alineacioacuten Centrado Izquierda Derechaprioridad = 2 Orden Z menor prioridad se dibuja primero (para superposiciones)Text = iexclpruebaok = PyFEPDFAgregarCampo(nombre tipo X1 Y1 X2 Y2 _ Font Size Bold Italic Underline _ foreground background _ Align Text priority)
completo campos personalizados de la plantillaok = PyFEPDFAgregarDato(custom-nro-cli Cod123)ok = PyFEPDFAgregarDato(custom-pedido 1234)ok = PyFEPDFAgregarDato(custom-remito 12345)ok = PyFEPDFAgregarDato(custom-transporte Camiones Ej SRL)
Creo plantilla para esta factura (papel A4 vertical)papel = A4 o letter para carta legal para oficioorientacion = portrait o landscape (apaisado)ok = PyFEPDFCrearPlantilla(papel orientacion)num_copias = 3 original duplicado y triplicadolineas_max = 24 cantidad de linas de items por paacuteginaqty_pos = izq (cantidad a la izquierda de la descripcioacuten del artiacuteculo) Proceso la plantillaok = PyFEPDFProcesarPlantilla(num_copias lineas_max qty_pos) Genero el PDF de salida seguacuten la plantilla procesadasalida = facturapdfok = PyFEPDFGenerarPDF(salida)
Ejemplo PyFEPDF en VB 91
Abro el visor de PDF y muestro lo generado (es necesario tener instalado Acrobat Reader o similar)imprimir = False cambiar a True para que lo envie directo a la impresoraok = PyFEPDFMostrarPDF(salida imprimir)
Ver pyfepdfbas (ejemplo completo)
Herramienta PyFEPDFEXE por liacutenea de comando (consola)
La herramienta dispone de un programa PyFEPDFEXE que puede ser utilizado desde la consola y generarfacturas en formato PDF dado archivos de entada en texto o DBF
Los paraacutemetros son
--ayuda este mensajebull --licencia muestra la licencia del programabull --debug modo depuracioacuten (detalla y confirma las operaciones)bull --formato muestra el formato de los archivos de entradasalidabull --prueba genera y autoriza una factura de prueba (no usar en produccioacuten)bull --cargar carga un archivo de entrada (txt o dbf) con los datos del comprobantebull --grabar graba un archivo de salida (txt o dbf) con los datos de los comprobantesbull --pdf genera la imaacutegen de factura en PDFbull --dbf utiliza tablas DBF en lugar del archivo de entrada TXTbull
Ver receini para paraacutemetros de configuracioacuten
Ejemplos
Ver el formato de archivos de entrada
PYFEPDFEXE --formato
1
Realizar una prueba (genera facturatxt y facturapdf)
PYFEPDFEXE --prueba --mostrar --grabar
2
Realizar una prueba de DBF (genera encabezadbf detallesdbf ivadbfpermisodbf tributodbf cbteasocdbf datodbf y facturapdf)
PYFEPDFEXE --prueba --dbf --mostrar --grabar
3
Cargar archivo de entrada (leer facturatxt y generar facturapdf) mostrando la factura
PYFEPDFEXE --cargar --mostrar
4
Cargar tablas DBF (leer encabezadbf detallesdbf ivadbf permisodbftributodbf cbteasocdbf datodbf y generar facturapdf) imprimiendo la factura
PYFEPDFEXE --cargar --dbf --mostrar --imprimir
5
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYFEPDF_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico
Herramienta PyFEPDFEXE por liacutenea de comando (consola) 92
PYFEPDFEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Formato de Intercambio PDF
Para lenguajes donde no es posible utilizar objetos COM como en algunas versiones de COBOL sedesarrolloacute una interfase de texto para poder generar PDF con esta herramienta Adicionalmente laherramienta para generacioacuten de PDF soporta manejo por tablas DBF Estas tablas pueden ser generadas concualquier libreriacutea o aplicacioacuten compatible (dBase FoxPro Clipper incluso pueden ser abiertas con planillasde caacutelculo)
Los nombres de los campos y funcionamiento son los mismos entre los meacutetodos y archivos de texto perorecortados por compatibilidad con DBF
En este caso se puede utilizar un uacutenico archivo de texto (facturatxt) o varias tablas DBF (ver meacutetodorelacionado a la interfaz COM para maacutes informacioacuten) Los tipos de registros son
0 para encabezado (encabezadbf) - meacutetodo CrearFactura y EstablecerParametrobull 1 para detalles (detalle dbf) - meacutetodo AgregarDetalleItembull 2 para permisos (permisosdbf) - meacutetodo AgregarPermisobull 3 para comprobantes asociados (comprobadbf) - meacutetodo AgregarCmpAsocbull 4 para iva (ivadbf) - meacutetodo AgregarIvabull 5 para tributos (tributodbf) - meacutetodo AgregarTributobull 6 para datos opcionales (AFIP) -no utilizado-bull 9 para datos adicionales (datosdbf) -soacutelo PDF- - meacutetodo AgregarDatobull
A continuacioacuten se detalla el formato de cada registro y una breve descripcioacuten
Encabezado PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 1 tiporeg N(10) valor 0 (encabezado)
webservice Alfanumerico 6 2 webserviceC(6) wsfe wsbfe wsfex etc
fecha_cbte Alfanumerico 8 8 fechacbteC(8) ej 20100308
tipo_cbte Numerico 2 16 tipocbteN(20)
ej 1 para Facturas A (seguacuten tabla deparaacutemetros de AFIP Mercado Interno Exportacioacuten)
punto_vta Numerico 5 18 puntovtaN(40) ej 0001
cbte_nro Numerico 8 23 cbtenroN(80) ej 00000001
tipo_expo Numerico 1 31 tipoexpoN(10)
tipo de exportacioacuten (1 bienes 2 servicios 3otros)
permiso_existente Alfanumerico 1 32 permisoexiC(1) permiso de exportaioacuten S o N o nulo
pais_dst_cmp Numerico 3 33
Formato de Intercambio PDF 93
paisdstcmpN(30)
coacutedigo de paiacutes seguacuten tabla de paraacutemetros deAFIP (200 ARGENTINA 203 BRASIL212 ESTADOS UNIDOS etc)
nombre_cliente Alfanumerico 200 36 nombreclieC(200)
tipo_doc Numerico 2 236 tipodocN(20)
coacutedigo de tipo de documento seguacuten tablaAFIP WSFEv1 (80 CUIT)
nro_doc Numerico 11 238 nrodocN(110)
nuacutemero de documento (DNI CUIT etc) -ocorresponde a cuit_pais_cliente enexportacioacuten-
domicilio_cliente Alfanumerico 300 249 domicilioc M
id_impositivo Alfanumerico 50 549 idimpositiC(50)
categoriacutea frente al IVA (Resp InscriptoMonotributo etc) o identificacioacutenimpositiva en paiacutes destino (por ej CNJPRUC VAT ID etc)
imp_total Importe 153 599 imptotalN(153) importe total (con hasta 3 decimales)
imp_tot_conc Importe 153 614 imptotconcN(153)
importe conceptos no gravados (con hasta 3decimales)
imp_neto Importe 153 629 impnetoN(153)
importe neto sujeto a caacutelculo de IVA (conhasta 3 decimales)
impto_liq Importe 153 644 imptoliqN(153)
importe de IVA liquidado (con hasta 3decimales)
impto_liq_nri Importe 153 659 imptoliqnrN(153)
importe de IVA liquidado a RNI (con hasta 3decimales) -obsoleto-
imp_op_ex Importe 153 674 impopexN(153)
importe de operaciones exentas de IVA (conhasta 3 decimales)
impto_perc Importe 15 689 imptopercN(152)
importe de percepciones (con hasta 3decimales) -obsoleto ver tributos-
imp_iibb Importe 153 704 impiibbN(153)
mporte de ingresos brutos (con hasta 3decimales) -obsoleto ver tributos-
impto_perc_mun Importe 153 719 imptopercmN(153)
importe de percepciones municipales (conhasta 3 decimales) -obsoleto ver tributos-
imp_internos Importe 153 734 impinternoN(153)
importe de impuestos internos (con hasta 3decimales) -obsoleto ver tributos-
imp_trib Importe 153 749 imptribN(153)
importe total de impuestos y tributos (noincluye IVA)
moneda_id Alfanumerico 3 764 monedaidC(3)
coacutedigo de moneda seguacuten tabla de paraacutemetrosde AFIP (PES peso DOL doacutelares etc)
moneda_ctz Importe 106 767 monedactzN(106)
cotizacioacuten de la moneda (con hasta 6decimales)
obs_comerciales Alfanumerico 1000 777 obscomerci M observaciones comercialesobs_generales Alfanumerico 1000 1777 obsgeneral M observaciones generales
forma_pago Alfanumerico 50 2777 formapagoC(50)
descripcioacuten de la forma de pago (ejEfectivo)
incoterms Alfanumerico 3 2827 teacutermino de comercio exterior (ej FOB)
Encabezado PDF 94
incotermsC(3)
incoterms_ds Alfanumerico 20 2830 incotermsdC(20)
descripcioacuten de termino de comercio exterior(Free on board)
idioma_cbte Alfanumerico 1 2850 idiomacbteC(1)
idioma del comprobante seguacuten tabla deparaacutemetros de AFIP (1 espantildeol etc)
zona Alfanumerico 5 2851 zona C(5) -no utilizado-
fecha_venc_pago Alfanumerico 8 2856 fechavencpC(8)
fecha de vencimiento del pago (soloservicios)
presta_serv Numerico 1 2864 prestaservN(10) prestacioacuten de servicio (S o N)
fecha_serv_desde Alfanumerico 8 2865 fechaservdC(8) fecha de inicio del servicio facturado
fecha_serv_hasta Alfanumerico 8 2873 fechaservhC(8) fecha de finalizacioacuten del servicio facturado
cae Alfanumerico 14 2881 cae C(14) Coacutedigo de Autorizacioacuten Electroacutenicootorgado por AFIP
fecha_vto Alfanumerico 8 2895 fechavto C(8) fecha de vencimiento del CAE otorgado porAFIP
resultado Alfanumerico 1 2903 resultado C(1) resultado A aceptado R rechazado(respuesta AFIP)
reproceso Alfanumerico 1 2904 reprocesoC(1)
S si hubo reprocesamiento N si esprocesamiento original (respuesta AFIP)
motivos_obs Alfanumerico 1000 2905 motivosobs M
coacutedigo o descripcioacuten del motivo de rechazo uobservacioacuten del comprobante ej 11 -numeracioacuten 02 cuit no autorizada (respuestaAFIP)
id Numerico 15 3905 id N(150) identificador secuencial de la factura (usar 0)
telefono_cliente Alfanumerico 50 3920 telefonoclC(50)
localidad_cliente Alfanumerico 50 3970 localidadcC(50)
provincia_cliente Alfanumerico 50 4020 provinciacC(50)
formato_id Numerico 10 4070 formatoidN(100) -no utilizado-
email Alfanumerico 100 4080 email C(100) destinatario del PDFpdf Alfanumerico 100 4180 pdf C(100) ruta y nombre de archivo PDF a generar
err_code Alfanumerico 6 4280 errcode C(6) coacutedigo de error informado por AFIP (EjfexerrorErrCode=505)
err_msg Alfanumerico 1000 4286 errmsg M mensaje de error informado por AFIP (EjfexerrorErrMsg=Error de Lockeo)
Dato_adicional1 Alfanumerico 30 5286 datoadic01C(30) datos extra optativos
Dato_adicional2 Alfanumerico 30 5316 datoadic02C(30) datos extra optativos
Encabezado PDF 95
Dato_adicional3 Alfanumerico 30 5346 datoadic03C(30) datos extra optativos
Dato_adicional4 Alfanumerico 30 5376 datoadic04C(30) datos extra optativos
Campos extra (por compatibilidad con otras herramientas y formatos)
Nombre Tipo Long Pos DBF Descripcioacuten
descuento Importe 153 5405 descuentoN(153)
importe general de descuento (no recomendadousar descuento por itemdetalle)
cbt_desde Numerico 8 5420 cbtdesdeN(80)
nuacutemero de comprobante inicial del lote (usarcbte_nro)
cbt_hasta Numerico 8 5428 cbthastaN(80)
nuacutemero de comprobante final del lote (usarcbte_nro)
concepto Numerico 1 5436 conceptoN(10)
1 productos 2 servicios 3 productos + servicios(ver presta_serv)
no_usar Importe 153 5437 nousarN(153) -reservado-
imp_iva Importe 153 5452 impivaN(153) iacutedem impto_liq
emision_tipo Alfanumerico 4 5467 emisiontipC(4) CAE o CAEA
imp_subtotal Importe 153 5471 impsubtotaN(153)
se calcula internamente si no es pasado imp_neto+ imp_tot_conc + imp_op_ex - descuento(subtotal sin IVA ni otros tributos)
cat_iva Numerico 2 5486 cativa N(20) -reservado-NOTA estos campos pueden no utilizarse o tener el mismo valor que los campos originales estaacuten paracontemplar casos especiales y en general no deben utilizarse
Detalle Item PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 1
codigo Alfanumerico 30 2 codigoC(30) coacutedigo del artiacuteculo
qty Importe 122 32 qty N(122) cantidad (con 2 decimales)
umed Numerico 2 44 umed N(20) coacutedigo de unidad de medida seguacuten tabla de paraacutemetrosAFIP WSMTXCA (ej 1 - kg)
precio Importe 123 46 precioN(123) importe unitario (con hasta 3 decimales)
importe Importe 143 58 importeN(143) importe subtotal (con hasta 3 decimales)
iva_id Numerico 5 72 ivaid N(50) coacutedigo de aliacutecuota de IVA seguacuten tabla de paraacutemetrosAFIP WSFEv1 WSMTXCA (ej 5 - IVA RI Tasa
Detalle Item PDF 96
General 21 )
ds Alfanumerico 4000 77 ds M descripcioacuten del artiacuteculo (usar ltbrgt para salto delinea)
ncm Alfanumerico 15 4077 ncm C(15) coacutedigo habilitado del Nomenclador Comuacuten deMercosur -soacutelo WSBFEv1-
sec Alfanumerico 15 4092 sec C(15) coacutedigo habilitado de la Secretariacutea de Comercio-reservado-
bonif Importe 15 4107 bonifN(152)
importe de descuento (con 2 decimales) para estearticulo
imp_iva Importe 15 4122 impivaN(152) importe liquidado de IVA para este articulo
despacho Alfanumerico 20 4137 despachoC(20) -soacutelo importacioacuten-
u_mtx Numerico 10 4157 umtxN(100) unidades MTX
cod_mtx Alfanumerico 30 4167 codmtxC(30) coacutedigo de barras MTX
dato_a Alfanumerico 15 4197 datoa C(15) dato extra optativodato_b Alfanumerico 15 4212 datob C(15) dato extra optativodato_c Alfanumerico 15 4227 datoc C(15) dato extra optativodato_d Alfanumerico 15 4242 datod C(15) dato extra optativodato_e Alfanumerico 15 4257 datoe C(15) dato extra optativoNota en los campos numeacutericos (archivo de texto) para usar maacutes de los decimales especificados de manerapredeterminada indicar el punto explicitamente por ej cantidad = 0123456 para 6 decimales encantidad En la estructura del DBF cada programa puede cambiar la cantidadad de decimales
Importante para Facturas B de manera similar a las facturas tradicionales el IVA no debe estardiscriminado (enviar el precio unitario y subtotal final IVA incluido) y se debe enviar NULL en imp_iva
IVA PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 4
iva_id Numerico 5 2 ivaid N(50) tipo de aliacutecuota (ver tablas de paraacutemetros deWSFEv1 por ej 5 para 21)
base_imp Importe 153 7 baseimpN(153)
base imponible (neto gravado) para estaaliacutecuota
importe Importe 153 22 importe N(153) importe IVA liquidado para esta aliacutecuotaTributo PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 valor 5
IVA PDF 97
tiporegN(10)
tributo_id Numerico 5 2 tributoidN(50)
tipo de tributo (ver tablas de paraacutemetros de WSFEv1por ej 2 para impuestos provinciales)
desc Alfanumerico 100 7 desc C(100) descripcioacuten (por ej IIBB prov de BsAs)
base_imp Importe 153 107 baseimpN(153) base imponible para este impuesto (pude ser 0 nulo)
alic Importe 15 122 alic N(152) aliacutecuota (porcentaje por ej 3)
importe Importe 153 137 importeN(153) importe liquidado para este impuesto
Comprobante Asociado PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 3cbte_tipo Numerico 3 2 cbtetipo N(30) tipo de comprobante asociado (iacutedem encabezado)
cbte_punto_vta Numerico 4 5 cbtepuntovN(40) punto de venta
cbte_nro Numerico 8 9 cbtenro N(80) nuacutemero de comprobantePermisos PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea)- usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 2
id_permiso Alfanumerico 16 2 idpermisoC(16)
identificador del permiso de exportacioacuten ej99999AAXX999999A
dst_merc Numerico 3 18 dstmercN(30) coacutedigo de paiacutes de destino seguacuten tabla de AFIP
Datos PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 16 tiporeg N(10) valor 9campo Alfanumerico 30 17 campo C(30) nombre del campo en la plantilla PDFvalor Alfanumerico 1000 47 valor M contenido para el campo en la plantilla PDFpagina Alfanumerico 3 1047 pagina C(3) P primera U ultima T todasEste tipo de registro es opcional resultados similares se pueden lograr con el archivo de configuracioacuten(receini seccioacuten [PDF]) meacutetodo del Componente AgregarDato o directamente con el disentildeador visual(modificando la plantilla facturacsv)
Configuracioacuten PyFEPDF RECEINI
De manera similar a las otras herramientas PyFEPDF puede configurarse por el archivo de configuracioacutenRECEINI con las siguientes opciones predeterminadas
Tributo PDF 98
[FACTURA]ARCHIVO=tipoletranumeroFORMATO=facturacsvDIRECTORIO=PAPEL=letterORIENTACION=portraitDIRECTORIO=SUBDIRECTORIO=LOCALE=Spanish_Argentina1252FMT_CANTIDAD=06FMT_PRECIO=03CANT_POS=izqENTRADA=facturatxtSALIDA=facturapdf
[PDF]LOGO=fpdfpngEMPRESA=Empresa de PruebaMEMBRETE1=Direccion de PruebaMEMBRETE2=Capital FederalCUIT=CUIT 30-00000000-0IIBB=IIBB 30-00000000-0IVA=IVA Responsable InscriptoINICIO=Inicio de Actividad 01042006
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalle = detallesdbfPermiso = permisodbfDato = datodbf
Seccioacuten [FACTURA]
Controla la generacioacuten del PDF (si no se especifica campo PDF en tabla encabezado)
ARCHIVO nombre de archivo PDF a generar por ej incluyendo tipoletranumerobull FORMATO formato del PDF a generar por ej en planilla facturacsvbull DIRECTORIO directorio donde almacenar los archivos PDFbull SUBDIRECTORIO nombre de la carpeta a generar (una por diacutea de manera predeterminada)bull LINEAS_MAX cantidad de lineas para el detalle (artiacuteculos) por defecto 24bull PAPEL legal A4 letterbull ORIENTACION portrait landscape (apaisada)bull LOCALE configuracioacuten regional (Spanish_Argentina1252 en Windows es_ARutf8 en Linux)bull FMT_CANTIDAD formato de cantidad (04 para 4 decimales)bull FMT_PRECIO formato de precio unitario (03 para 3 decimales)bull CANT_POS posicioacuten de la columna cantidad (izq o der)bull ENTRADA nombre del archivo de intercambio (facturatxt)bull SALIDA nombre del archivo a generar (dejar en blanco para generar uno distinto seguacuten laconfiguracioacuten ARCHIVO)
bull
COPIAS cantidad de copias en el PDF (Original Duplicado Triplicado etc)bull
Configuracioacuten PyFEPDF RECEINI 99
Seccioacuten [PDF]
Controla campos del PDF a personalizar (si no se especifican los campo texto en tabla formato del PDF)
LOGO archivo con imagen logotipo por ej serpientepngbull EMPRESA ej Empresa de Pruebabull MEMBRETE1 ej Direccion de Pruebabull MEMBRETE2 ej Capital Federalbull CUIT CUIT 20-26756539-3bull IIBB IIBB 20-26756539-3bull IVA IVA Responsable Inscriptobull INICIO Inicio de Actividad 01042006bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull Dato = datodbfbull
Campo Subtotal
Dado que en general la columna importe deberiacutea mostrar Subtotal cIVA por similitud con el PDF quegenera AFIP por comprobantes en linea por disentildeo (actualizacioacuten 108b)
Si es A o M se imprime el subtotal SIN IVAbull Si es B o C se imprime el subtotal CON IVAbull
En el caso de factura A debe sumar los items sin el IVA ya que en la ultima hoja se le suma el IVA alsubtotal
Igualmente el campo subtotal podriacutea sobre-escribirse utilizando el meacutetodo AgregarDato(campovalor pagina) o el tipo de registro para datos adicionales En campo = subtotal el valor a imprimiren cada hoja y pagina el nro de paacutegina (T todas P primera U ultima) Se podriacutea agregar el dato paratodas las paginas vacio y para la uacuteltima con el valor que sea necesario (en ese orden)
Disentildeador Visual PyFEPDF
La herramienta incluye el progama designerexe para modificar visualmente los disentildeos de factura
Los archivos de entrada estaacuten son planillas CSV describiendo el disentildeo Al abrilos el disentildeador muestra laplantilla con los elementos donde se ubicaraacuten los futuros valores de cada factura
La barra de herramientas cuenta con botones para
Abrir guardar e imprimir (vista previa) las plantillasbull
Seccioacuten [PDF] 100
Agregar eliminar y duplicar elementosbull Buscar elementos por nombre o por textobull
Sobre un elemento con doble click izquierdo se abre un dialogo para editar el texto y con click derecho seabre un dialogo con la ventana de propiedades Es posible seleccionar muacuteltiples elementos manteniendopresionado shift y click izquierdo Para mover los elementos se puede usar las teclas de flechas o arrastrar loselementos
Ver a continuacioacuten los tipos de elementos y su definicioacuten
A modo de ejemplo se muestra un pantallazo del Disentildeador Visual con el elemento logo seleccionadoeditando sus propiedades
Para ejecutarlo simplemente ir al directorio de la interfaz y correr designerexe
Tipos de elementos para PyFEPDF
Para el disentildeo del PDF es posible establecer los siguientes tipos de campo (elementos graacuteficos)
Texto (T) con tipo de letra (fuente) tamantildeo formato (italico negrita subrayado) tamantildeo yalineacioacuten
bull
Liacuteneas (L) y Cuadros (B)bull Imaacutegenes (I) en formato PNG o JPGbull Coacutedigo de Barras (CB) en formato Entrelazado 2 de 5bull Codigo QR (I) (Requerido por AFIP a partir del 01032021 ver cronograma)bull
Definicioacuten de elementos para PyFEPDF
Las columnas de la planilla (facturacsv) o estructura de la tabla formato para definir los elementos graacuteficoses
name (alfanumeacuterico) nombre del campobull type (alfanumeacuterico) tipo del campo T L I B CBbull x1 (numeacuterico) coordenada horizontal izquierda (en mm)bull y1 (numeacuterico) coordenada vertical superior (en mm)bull x2 (numeacuterico) coordenada horizontal derecha (en mm)bull y2 (numeacuterico) coordenada vertical inferior (en mm)bull font (alfanumeacuterico) nombre de la tipografiacutea (fuente)bull size (numeacuterico) tamantildeo en puntos del textobull bold (verdaderofalso) estilo negrita para el texto (1 o 0)bull italic (verdaderofalso) estilo cursiva (itaacutelica) para el texto (1 o 0)bull underline (verdaderofalso) estilo subrayado para el texto (1 o 0)bull foreground (numeacuterico) color RGB de dibujobull backgroud (numeacuterico) color RGB de relleno del fondo (si aplica al elemento)bull align (alfanumeacuterico) alineacioacuten I izquierda D derecha C centradobull text (alfanumeacuterico) texto estaacutetico o foacutermulabull priority (numeacuterico) orden z en el que se dibujan los elementos (a menor prioridad se dibuja primero)bull
Estilos HTML Adicionalmente los estilos negrita itaacutelica y subrayado pueden establecerse en tiempo deejecucioacuten encerrando todo el texto con el tag html correspondiente (en el orden indicado) Ej
Disentildeador Visual PyFEPDF 101
ltBgttexto en negritaltBgtbull ltIgttexto en cursivaltIgtbull ltUgttexto subrayadoltUgtbull ltBgtltIgtltUgttexto en negrita cursiva y subrayadoltUgtltIgtltBgtbull
PyI25 Generador de Coacutedigos de Barras
Utilitario PYI25EXE (py25py) para generar los coacutedigos de barras Interleaved 2 of 5 (Entrelazado 2 de 5)seguacuten Resolucioacuten General 170204
Ver Descargas para descargar el instalador
Los datos a consignar son (ver RG170204 Art 1 Anexo 1)
Clave Unica de Identificacioacuten Tributaria (CUIT) del emisor de la factura (11 caracteres)bull Coacutedigo de tipo de comprobante (3 caracteres)bull Punto de venta (5 caracteres)bull Coacutedigo de Autorizacioacuten de Electroacutenica (CAE) o Coacutedigo de Autorizacioacuten de Impresioacuten (CAI) (14caracteres)
bull
Fecha de vencimiento del CAE CAI (8 caracteres)bull Diacutegito verificador (1 caraacutecter) ver rutinabull
El utilitario genera una imaacutegen en formato PNG o JPG funciona tanto de liacutenea de comando consola (DOS)como por interfaz COM (automatizacioacuten DLL similar a OCX) y es uacutetil para facturas electroacutenicas otradicionales (autoimpresores o imprentas)
Imaacutegen de Ejemplo de Coacutedigo de Barras para CAE
Importante De generar imaacutegenes para imprimir es recomendado respetar la resolucioacuten de la impresora (Laacutesero Chorro de tinta no pueden usarse matriz de punto) por ej con una resolucioacuten por lo menos tres vecesmayor que la utilizada en pantalla
Nota Nuestro generador de PDF ya contempla generar los coacutedigos de barra para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PYI25EXE (utilitario por linea de comando)
Opciones
--barras a continuacioacuten se indica el coacutedigo de barras en formato numeacutericobull --noverificador deshabilitar caacutelculo de digito verificadorbull --archivo a continuacioacuten se indica el nombre del archivo de salidabull
Ejemplo de uso (generar el archivo pruebapng)
PYI25EXE --barras 202675653930240016120303473904220110528 --mostrar --archivo pruebapng
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYI25_cliEXE queesta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primer como
Definicioacuten de elementos para PyFEPDF 102
segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and is startedautomatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico PYI25EXEpuede estar compilado para ser registrado en Windows (componente para VBVFP y similares)
Objeto PYI25 (interfaz COM)
Objeto PyI25 (registrar PYI25DLL)
Meacutetodos
DigitoVerificadorModulo10(codigo) recibe el codigo de barras en formato numeacutericodevuelve el diacutegito verificador en base 10
bull
GenerarImagen(codigo archivo anchobase ancho alto extension )recibe el codigo de barras en formato numeacuterico nombre de archivo de salida tamantildeos y formato deimagen (PNG o JPEG) y genera el codigo de barras especificado
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyI25 As Object
Set PyI25 = CreateObject(PyI25)
cuit tipo_cbte punto_vta cae fch_venc_caebarras = 202675653930240016120303473904220110529 calculo digito verificadorbarras = barras + PyI25DigitoVerificadorModulo10(barras)
genero imagen en png aspecto 1x para ver en pantalla o por mailok = PyI25GenerarImagen(barras Cbarraspng)
formato en jpg aspecto 3x maacutes ancho para imprimir o incrustarok = PyI25GenerarImagen(barras cbarrasjpg 9 0 90 JPEG)
PyQR Generador de Coacutedigos QR
Utilitario PYQREXE (pyqrpy) para generar los coacutedigos QR seguacuten RG48922020
Cronograma de Implementacioacuten
Para responsables inscriptos en el impuesto al valor agregado que hayan efectuado operaciones (gravadasexentas y no gravadas) declaradas en el impuesto durante el antildeo calendario 2020 por un importe total neto deimpuestos y tasas
11 Superior a PESOS DIEZ MILLONES ($10000000-) desde el 1 de marzo de 2021
12 Superior a PESOS DOS MILLONES ($2000000-) e inferior o igual a PESOS DIEZ MILLONES ($10000000-) desde el 1 de abril de 2021
13 Superior a PESOS QUINIENTOS MIL ($500000-) e inferior o igual a PESOS DOS MILLONES ($2000000-) desde el 1 de mayo de 2021
PYI25EXE (utilitario por linea de comando) 103
2 Para el resto de los responsables inscriptos en el impuesto al valor agregado sujetos exentos ante dichogravamen y pequentildeos contribuyentes inscriptos en el Reacutegimen Simplificado (Monotributo) a partir del 1junio de 2021
Los datos a consignar son (ver QR especificaciones)
Fecha de emisioacutenbull CUIT del emisorbull Punto de ventabull Tipo de Comprobantesbull Nuacutemero de Comprobantebull Importe totalbull Monedabull Cotizacioacutenbull Tipo Documento Receptor (de corresponder)bull Nuacutemero de Documento de Receptor (de corresponder)bull Coacutedigo del Tipo de Autorizacioacutenbull Coacutedigo de Autorizacioacutenbull
Ejemplo Visual Basic script pyafipwsblobdevelopejemplospyqrpyqrvbs
Ejemplo Visual Basic claacutesico
Dim pyqr As Object
Set pyqr = CreateObject(PyQR)
Establecer tipo de imagen (PNG o JPEG)PyQRExtension = JPEG
Generar un nombre de archivo temporal para la imagenarchivo = pyqrCrearArchivo
Alternativo Especificar ubicacioacuten y extensioacutenpyqrarchivo = CQRgeneradopyqrjpg
DebugPrint archivo
ver = 1fecha = 2020-10-13cuit = 30000000007pto_vta = 10tipo_cmp = 1nro_cmp = 94importe = 12100moneda = DOLctz = 65tipo_doc_rec = 80nro_doc_rec = 20000000001tipo_cod_aut = Ecod_aut = 70417054367476
genero imagen en png con el codigo qr
url = pyqrGenerarImagen(ver fecha cuit pto_vta tipo_cmp nro_cmp _ importe moneda ctz tipo_doc_rec nro_doc_rec _ tipo_cod_aut cod_aut)
PyQR Generador de Coacutedigos QR 104
DebugPrint url
Paraacutemetros por liacutenea de comandos
--datos recibe los datos a procesar version fecha cuit pto_vta tipo_cmp nro_cmp importemoneda ctz tipo_doc_rec nro_doc_rec tipo_cod_aut cod_aut
bull
--prueba genera un QR de muestrabull --archivo permite especificar una ruta (de lo contrario usa un archivo temporal)bull --mostrar abre el archivo para visualizar la imagenbull
Ejemplo por liacutenea de comando
Linux
python pyqrpy --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
Windows
pyqrexe --archivo qrjpg --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
En windows usar pyqrexe en vez de python pyqrpy
Imaacutegen de Ejemplo de Coacutedigo QR
PyQR Generador de Coacutedigos QR 105
Nota Nuestro generador de PDF ya contempla generar los coacutedigos QR para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PyEmail Envio de correo electroacutenico
Herramienta para enviar correos electroacutenicos incluyendo por ej adjunto PDF de con factura electroacutenica
Soporta servidores SMTP con y sin autenticacioacuten
Proacuteximamente soporte para correos con contenido HTML e imagenes de factura embebida
PyEmail Envio de correo electroacutenico 106
PYEMAILEXE utilitario de correo
Para utilizar esta herramienta debe tener configurado la seccioacuten [EMAIL] en el receini
Ejemplo desde linea de comando
PYEMAILEXE motivo reingartgmailcom mensaje FacturaA0002-00117826pdf
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYEMAIL_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacutericoPYEMAILEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Objeto PyEmail (interfaz COM)
Objeto PyEmail (registrar PyEmailDLL)
Meacutetodos
Conectar(servidor usuario clave) recibe el nombre del servidor a conectarse usuario y contrasentildea(opcional)
bull
Enviar(remitente motivo destinatario mensaje archivo) envia el correo electroacutenico con los datosproporcionados
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyEmail As Object
Set PyEmail = CreateObject(PyEmail)
Primer paso conexioacuten al servidor (por unica vez)servidor = mailsistemasagilescomarusuario = norespondernsiscomarclave = 1238478puerto = 465ok = PyEmailConectar(servidor usuario clave)
Envio el o los correos (repetir por cada FE)remitente = norespondersistemasagilescomardestinatario = marianosistemasagilescomarmensaje = Se envia factura electronica adjuntaarchivo = CFACTURAPDF
ok = PyEmailEnviar(remitente motivo destinatario mensaje archivo)
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361)
Con la interfaz se provee un utilitario para generar los archivos requeridos por el aplicativo SIRED (SIAP) dela Resolucioacuten General 136102 referente al almacenamiento digital de los comprobantes emitidos (Libro
PYEMAILEXE utilitario de correo 107
Ventas Detalle y Cabeceras de Factura)
El formato de entrada es una planilla csv similar al PyRece respetando los tipos de datos y coacutedigos requeridospor los webservices con las siguientes columnas tipo_cbte punto_vta cbt_numero fecha_cbte tipo_docnro_doc imp_neto impto_liq imp_total cae fecha_vto nombre
Ejemplo de uso
CD CPYAFIPWSRG1361EXE planillacsv
Generaraacute los archivos
VENTAS_200902txtbull CABECERA_200902txtbull DETALLE_200902txtbull
Para maacutes informacioacuten ver RG136102 de AFIP
Disentildeo de registro (archivos de texto)bull Guia Temaacuteticabull
Ejemplo
Ejemplo en Visual Basic claacutesico
sired = CreateObject(SIRED)
creo una factura de ejemplotipo_cbte = 2punto_vta = 4000fecha = 20150721concepto = 3tipo_doc = 80nro_doc = 30000000007cbte_nro = 12345678imp_total = 12200imp_tot_conc = 300imp_neto = 10000imp_iva = 2100imp_trib = 100imp_op_ex = 200imp_subtotal = 10000fecha_cbte = fechafecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fechafecha_serv_hasta = fechamoneda_id = PESmoneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libre
nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361) 108
id_impositivo = Responsable Inscriptoforma_pago = 30 diasincoterms = FOBidioma_cbte = 1motivo = 11
cae = nullfch_venc_cae = null
siredCrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fch_venc_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivo)
agrego comprobantes asociado
tipo = 91pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)tipo = 5pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)
tributo_id = 99desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100siredAgregarTributo(tributo_id desc base_imp alic importe)
iva_id = 5 21base_imp = 100importe = 21siredAgregarIva(iva_id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890123codigo = P0001ds = Descripcion del producto P0001qty = 100umed = 7precio = 10000bonif = 000iva_id = 5imp_iva = 2100importe = 12100despacho = uNordm 123456siredAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
siredAgregarDato(prueba 1234)
id_factura = siredGuardarFactura()
siredEstablecerParametro(cae 61123022925855)siredEstablecerParametro(fch_venc_cae 20110320)
Ejemplo 109
siredEstablecerParametro(motivo_obs )ok = siredActualizarFactura(id_factura)
Otros Servicios WEB y herramientas similares de AFIP
Constatacioacuten de Comprobantes
WSCDC es la Interfaz para los Servicios Web para verificar en forma dinaacutemica si los comprobantes recibidosse encuentran autorizados por la AFIP Ver manual especiacutefico en ConstatacionComprobantes
Padroacuten de Contribuyentes
Herramienta para consultar el archivo completo de la condicioacuten tributaria de los contribuyentes y responsables(RG1817) Ver manual especiacutefico en PadronContribuyentesAFIP
Coacutedigo de Trazabilidad de Granos
WSCTGv2 es la Interfaz para generar Coacutedigo de Trazabilidad de Granos AFIP (RG2806 RG3113 RG3493)Ver manual especiacutefico en CodigoTrazabilidadGranos
Liquidacioacuten Primaria de Granos
WSLPG es la Interfaz para autorizar y ajustar Liquidaciones Primarias de Granos (RG34192012) Vermanual especiacutefico en LiquidacionPrimariaGranos
Consulta de Operaciones Cambiarias
WSCOC es la Interfaz para Consultas de Operaciones (moneda extranjera) Ver manual enConsultaOperacionesCambiarias
wDigDepFiel Depositario Fiel
Servicio Web de AFIP para Aviso de Recepcioacuten y Aceptacioacuten de la Digitalizacioacuten de Documentos por partede los Prestadores de Servicios de Archivos y Digitalizacioacuten (PSAD) y Aviso de Digitalizacion deDocumentos por parte de los Despachantes o de los Prestadores de Servicios de Archivos y Digitalizacioacuten(PSAD) -
Sujetos Alcanzados ver Resolucioacuten General 25702009
Actualmente la interfaz expone las funcionalidades de este webservice
Aviso de Digitalizacioacutenbull Aviso de Recepcioacuten y Aceptacioacutenbull Meacutetodo Dummy para verificacioacuten de funcionamientobull
Ejemplo Interfaz COM wDigDepFiel
De igual manera que el resto de los servicios web el web service de depositario fiel puede ser invocado desdelenguajes visuales y no visuales (en windows) utilizando la interfaz COM
Otros Servicios WEB y herramientas similares de AFIP 110
Ejemplo en Visual Basic (similar para Visual FoxPro Delphi etc)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet wDigDepFiel = CreateObject(wDigDepFiel) Setear tocken y sing de autorizacioacuten (pasos previos)wDigDepFieltoken = WSAAtokenwDigDepFielsign = WSAAsign
CUIT del emisor (debe estar registrado en la AFIP)wDigDepFielcuit = 20267565393
Conectar al Servicio Web de Depositario Fiel (homologacioacuten)ok = wDigDepFielConectar(httpstestdiaafipgovarDiaWswDigDepFielwDigDepFielasmx)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)wDigDepFielDummyDebugPrint appserver status wDigDepFielAppServerStatusDebugPrint dbserver status wDigDepFielDbServerStatusDebugPrint authserver status wDigDepFielAuthServerStatus
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393codigo = 000 carpeta completa 001 carpeta adicional FechaHora en formato ISO 2010-06-07T002351750000fecha_hora_acept = Format(Now() yyyy-MM-dd) amp T amp _ Format(Now() hhmmss) amp 000000ticket = 1234errCode = wDigDepFielAvisoRecepAcept(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie _ codigo fecha_hora_acept ticket)DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoRecepAcept Coacutedigo Error amp wDigDepFielCodError
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000 1234567890123456cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393cuit_ata = 20267565393codigo = 000 carpeta completa 001 carpeta adicionalticket = 1234url = httpwwwexamplecomhashing = db1491eda47d78532cdfca19c62875aade941dc2
inicializo aviso limpio datos (familias)wDigDepFielIniciarAvisocodigo = 02cantidad = 1wDigDepFielAgregarFamilia codigo cantidadcodigo = 03cantidad = 3wDigDepFielAgregarFamilia codigo cantidad
cantidad_total = 4
Ejemplo Interfaz COM wDigDepFiel 111
errCode = wDigDepFielAvisoDigit(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie cuit_ata _ codigo url ticket hashing cantidad_total)
DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoDigit Coacutedigo amp wDigDepFielCodError
Otros Servicios Web relacionados de otros organismos
Remito Electroacutenico (COT ARBA)
Interfaz para Servicio Web Coacutedigo de Operaciones de Traslado (COT) Remito Electronico correspondienteal articulo 41 del Coacutedigo Fiscal que establece la obligacioacuten de amparar el traslado o transporte de bienes en elterritorio de la provincia de Bs As Ver manual especiacutefico en RemitoElectronicoCotArba
Trazabilidad de Medicamentos (ANMAT)
Interfaz para Servicio Web Coacutedigo de Trazabilidad de Medicamentos (SOAP) correspondiente a laResolucioacuten 4352011 del Ministerio de Salud y Disposicioacuten 36832011 de ANMAT Sistema Nacional deTrazabilidad de Medicamentos que deberaacuten implementar las personas fiacutesicas o juriacutedicas que intervengan en lacadena de comercializacioacuten distribucioacuten y dispensacioacuten de especialidades medicinales incluidas en elRegistro de Especialidades Medicinales SNT Especificacioacuten Teacutecnica V2 Ver manual especiacutefico enTrazabilidadMedicamentos
Trazabilidad de Precursores Quiacutemicos (SEDRONAR)
Interfaz para Servicio Web Trazabilidad de Precursores Quiacutemicos TrazaMedSDRN (SOAP) para informarmovimientos de Sustancias Quiacutemicas Controladas Decreto 109596 modificado por Decreto 116100Sistema Nacional de Trazabilidad modulo de Precursores Quiacutemicos (RENPRE SEDRONAR PAMI INSSJP)que deberaacuten implementar el operador de precursores quiacutemicos obtencioacuten de nuacutemero de CUFE (Coacutedigo deUbicacioacuten Fiacutesica de Establecimiento) Entrenamiento y Alineacioacuten de Datos Resolucioacuten 90012 RENPREVer manual especiacutefico en TrazabilidadPrecursoresQuimicos
Certificados
Generacioacuten
Para poder utilizar la interfase se deben tramitar y asociar los certificados de homologacioacutenproduccioacuten en laAFIP Para mas informacioacuten ver Paacutegina principal de Factura Electroacutenica (AFIP)
Crear Pedido CSR con WSAA
A partir de la revisoacuten 1632 (ver Actualizaciones Factura Electroacutenica moacutedulo WSAApy versioacuten 110b) esposible generar el pedido de certificado automaacuteticamente utilizando la opcioacuten --crear_pedido_cert)La herramienta solicitaraacute el CUIT buscaraacute la denominacioacuten del contribuyente en el padroacuten de AFIP ygeneraraacute los archivos necesarios (clave privada y pedido de certificado)
Ejemplo
Otros Servicios Web relacionados de otros organismos 112
CPyAfipWsgt WSAA-cliexe --crear_pedido_certreingartS55t-B~pyafipws$ python wsaapy --crear_pedido_certIngrese un CUIT 20267565393Denominacioacuten seguacuten AFIP REINGART MARIANO ALEJANDROLongitud clave 2048 (bits)Se crearon los archivosclave_privada_20267565393_201609105952keypedido_cert_20267565393_201609105952csr
Tambieacuten pueden especificarse esos datos por linea de comando (CUIT nombrealias empresa y longitud de laclave -2048 bits predeterminados-) ejecutando
WSAA-cliexe --crear_pedido_cert 20267565393 PyAfipWS SHA-2 REINGART MARIANO ALEJANDRO 2048
Nota desde el coacutedigo fuente ejecutar python wsaapyTambieacuten es posible realizar el procedimiento por programa (automatizadamente) llamando a los meacutetodoswsaaCrearClavePrivada(clave_privada) y wsaaCrearPedidoCertificado(cuitempresa nombre pedido_cert)
La herramienta deja listos los archivos respectivos pudiendo subir el pedido de certificado CSR a AFIP (tantoen homologacioacuten como en produccioacuten)
WSASS
Video Explicativo completo (incluyendo WSASS autogestioacuten de certificados en homologacioacuten AFIP) httpswwwyoutubecomwatchv=ietDXvUzVIQ
OpenSSL
Pasos para crear el certificado (maacutes informacioacuten en Instructivo AFIP)
Bajar e instalar OpenSSL para Windows 098i (historico) o 102k o superior (recomendado) Encaso de inconvenientes instalar Redistribuible de Visual C++
bull
Ingresar por liacutenea de comando al directorio de OpenSSL COpenSSLbingtbull Generar la clave privada
openssl genrsa -out empresakey 2048
bull
Generar el pedido (CSR certificate signing request) por liacutenea de comando
openssl req -new -key empresakey -subj C=ARO=[empresa]CN=[nombre]serialNumber=CUIT [nro_cuit] -out empresacsr
Reemplazar [empresa] por el nombre de su empresa Ej Nombre de la empresa tal cualfigura en la consulta de inscripcioacuten ej Empresa S A
diams
Reemplazar [nombre] por su nombre o server hostname Nombre del servicio aplicacioacuten uunidad operativa ej Interfaz PyAfipWs
diams
Reemplazar [nro_cuit] por la CUIT sin guiones de la empresa o programador Ej CUITxxxxxxxxxxx
diams
bull
Enviar el empresacsr a la AFIP para que lo firmen y devuelvan el certificado empresacrtbull
Ejemplo concreto
Crear Pedido CSR con WSAA 113
openssl req -new -key empresakey -subj C=ARO=Mariano ReingartCN=PyAfipWsserialNumber=CUIT 20267565393 -out empresacsr
Generar Certificado CRT
Una vez generado el pedido de certificado CSR (ver puntos anteriores) el traacutemite es
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Nuevo Certificado en el WSASSdiams Nombre simboacutelico del DN un alias del computador fiscal (nombre de fantasiacutea ej PC1)diams Solicitud de certificado en formato PKCS10 abrir con un editor de texto el CSR y copiaraqui el contenido
diams
Presionar Crear DN y obtener certificadodiams Abrir un archivo nuevo y copiar el campo Resultado (este es el certificado usar extensioacutenCRT)
diams
bull
Produccioacuten Ingresar por clave fiscal al servicio online Administracioacuten de Certificados DigitalesIr a Agregar Alias escribir el alias (nombre relacionado al certificado)diams Subir el archivo CSR presionar Agregardiams Luego buscar y descargar el certificado CRTdiams
bull
Con esta interfase no es necesario convertir el certificado en formato pkcs12 ni importarlo alrepositorio de Windows
bull
Para maacutes informacioacuten ver instructivo oficial AFIP
Asociacioacuten
Para poder usar los servicios web se debe asociar el certificado al webservice y CUIT (empresa) que loutilizaraacute
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Crear autorizacioacuten a servicio en el WSASSdiams Seleecionar el Nombre simboacutelico del DN a autorizar (igual que en el paso anterior)diams Revisar el CUIT representado y quien genera la autorizacioacutendiams Seleccionar el Servicio al que desea acceder (por ej wsfe factura electroacutenica)diams Presionar Crear autorizacioacuten de Acceso y revisar el resultadodiams
bull
Produccioacuten en el sitio de AFIP ingresar por clave fiscalEntrar en Administrador de Relaciones de Clave Fiscaldiams Elegir Nueva Relacioacutendiams Presionar BUSCAR para seleccionar el webservice de AFIP por ej ws - FacturacioacutenElectroacutenica
diams
Presionar BUSCAR para seleccionar el Representante seleccionar el nombre del alias delComputador Fiscal (ver seccioacuten anterior)
diams
Confirmardiams
bull
Anteriormente en produccioacuten debiacutea realizarse utilizando el servicio de clave fiscal ARFE - GestionarRelaciones yendo a Realizar una nueva Asociacioacuten completando Empresa Servicio y computador-certificado- que utilizara los webservices
OpenSSL 114
Para maacutes informacioacuten en produccioacuten ver instructivos oficiales de la AFIP
obtener certificado AFIPbull asociar certificado AFIPbull
Es el mismo traacutemite para la renovacioacuten (ns1cmscertexpired Certificado expirado) debesubirse el arcihvo CSR (pedido de certificado) y descargar el nuevo CRT Recordamos que los certificadostienen una vigencia de 2 antildeos en produccioacuten y 1 antildeo en homologacioacuten
Pre-requisitos para Produccioacuten (RECE)
Para poder usar Factura Electroacutenica en Produccioacuten (modo definitivo) ademaacutes de los puntos mencionadosanteriormente dentro de Clave Fiscal servicio online Regimenes de facturacioacuten y registracioacuten(REARRECERFI) es necesario
Adherirse al reacutegimen (realizarlo con anterioridad este traacutemite puede demorar varias semanas)Importante en el Rubro I C) RECE RCEL (Factura Electroacutenica y Factura Electroacutenica en Linea)especificar RECE (no RCEL que es para Comprobantes en linea y Facturador Plus nocontemplados por los webservices)
bull
Dar de alta los nuevos puntos de ventas (uno por cada webservice a utilizar factura nacionalexportacioacuten bono fiscal etc)
bull
Para maacutes informacioacuten ver demo interactiva oficial empadronamiento AFIP
Descargas
OpenSSL para windowsbull Redistribuibe VC++bull
Comprobacioacuten de Autenticacioacuten (WSAA)
Para descartar problemas teacutecnicos de acceso en produccioacuten u homologacioacuten (y verificar la validez delcertificado generado) se puede utilizar la herramienta WSAAEXE WSAA-cliEXE en modo depuracioacuten(sin necesidad de autorizar una factura solo solicitar acceso) yo el mensaje XML devuelto porWSAACallWSAA()
CPYAFIPWSgtWSAA-cliEXE reingartcrt reingartkey wsfe 2400 httpswsaaafipgovarwsservicesLoginCms --trace
Usando CERT=reingartcrt PRIVATEKEY=reingartkey URL=httpswsaaafipgovarwsservicesLoginCms SERVICE=wsfex TTL=2400Creando TRA------------------------------------------------------------------------------ltxml version=10 encoding=UTF-8gtltloginTicketRequest version=10gt ltheadergt ltuniqueIdgt1279058341ltuniqueIdgt ltgenerationTimegt2010-07-13T181901ltgenerationTimegt ltexpirationTimegt2010-07-13T193901ltexpirationTimegt ltheadergt ltservicegtwsfexltservicegtltloginTicketRequestgt------------------------------------------------------------------------------
Asociacioacuten 115
Frimando TRALlamando WSAA--------------------------------------------------------------------------------POST httpswsaaafipgovarwsservicesLoginCmsSOAPAction httpargovafipdiffacturaelectronicaloginCmsContent-length 3369Content-type textxml charset=UTF-8
================================================================================El archivo TAxml se ha generado correctamente
Nota Cambiar WSAAEXE por WSAA-CLIEXE o viceversa dependiendo del paquete de instalacioacuten o comoeste compilado (si aparece el mensaje This program host a COM object an is started automatically) Parausarlo desde el coacutedigo fuente utilizar en su lugar python wsaapy
Para descartar cualquier problema teacutecnico se puede utilizar la salida que es la traza de depuracioacuten de lacomunicacioacuten con AFIP a la mesa de ayuda (requerimiento y respuesta xml)
Si se estariacutea conectando correctamente a produccioacuten el certificado y las URL son correctas etc se deberiacuteaconstatar que
El ticket de requerimiento de acceso (TRA) correctamente solicita servicio correcto (wsfex)ltservicegtwsfexltservicegt
bull
Se estaacute solicitando acceso a los servidores del ambiente correcto (wsaa_url) POSThttpswsaaafipgovarwsservicesLoginCms (produccioacuten) o POSThttpwsaahomoafipgovarwsservicesLoginCms (homologacioacuten)
bull
El equipo que responde seriacutea del ambiente correcto perezaafipgovarenvidiaafipgovar iraafipgovar (produccioacuten) o avariciaafipgovar(homologacioacuten) Nota los nombres de los servidores pueden cambiar y solo se informan en caso deerror
bull
Si la autenticacioacuten es exitosa (El archivo TAxml se ha generado correctamente en elmensaje XML contenido en dicho archivo se puede verificar los siguientes datos
Fuente AFIP produccioacuten (ltsourcegtCN=wsaa O=AFIP C=AR SERIALNUMBER=CUIT33693450239ltsourcegt) sinoacute diriacutea CN=wsaahomo O=AFIP C=ARSERIALNUMBER=CUIT 33693450239
bull
Destino datos del certificado de produccioacutenhomologacioacuten (C=ar O=pyafipws-sistemasagiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart)
bull
Si el ambiente es el correcto (produccioacutenhomologacioacuten) y sigue devolviendo acceso denegadons1coenotAuthorized Computador no autorizado a acceder al servicio(govafipdeseindvadacsuaviewwsaaLoginFault) revisar el certificado ARFE(asociacioacuten de servicio) RECEREARRFI sobre reacutegimen habilitado puntos de venta y demaacutes traacutemites anteAFIP Si aparece error 600 ValidacionDeToken Error al verificar hashVerificacionDeHash No valida la firma digital se estaacute usando un sign y token en elambiente incorrecto (de produccioacuten en homologacioacuten y viceversa)
Comprobacioacuten de Autenticacioacuten (WSAA) 116
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)
De manera similar a lo expuesto anteriormente se provee una aplicacioacuten visual a modo de ejemplo paracomprobar el funcionamiento de la interfaz y los certificados tramitados desde AFIP
El instalador para este aplicacioacuten puede descargarse de
instalar-ej-wsaa-202zip (archivado en 1GoogleCode)bull
Por defecto se instala en CArchivos de Programawsaaej-wsaaexe
Importante Es necesario configurar correctamente el certificado y clave privada con la ruta completa a dichosarchivos
Para pruebas en produccioacuten cambiar la URL ahttpswsaaafipgovarwsservicesLoginCms y configurar los certificados
La version de la interfaz no debe decir Homologacioacuten y debe permitir cambiar la URL sino deben reinstalarlos instaladores para produccioacuten eliminando cualquier archivo anterior
Importante generalmente solo debe correr el ejemplo no instalar ni actualizar el componente WSAA si tieneuna versioacuten superior (o incluida con otro webservice como WSFEv1 o WSLPG) o esta usando el instaladorpara produccioacuten Si no lo tiene instalado puede usar instalador-WSAA-202cexe o superior
Errores Frecuentes
Los siguientes son posibles interpretaciones y soluciones a los errores que enviacutean los servidores de AFIP
Fallas SOAP
Falla SOAP ns1coenotAuthorized o ns1cmscertuntrusted
En WSAA descartando que se este usando el certificado del ambiente incorrecto (certificado dehomologacioacuten en produccioacuten y viceversa) es necesario que el certificado y CUIT esteacuten habilitados paraacceder al servicio web especificado (wsfe wsfex wsbfe wsctg wDigDepFiel etc) No es suficiente generarel certificado (en homologacioacuten o en produccioacuten) hay que solicitar explicitamente acceso al serviciorequerido ver Asociacioacuten de Certificado
Los servicios no relacionados a factura electroacutenica en produccioacuten tienen otros meacutetodos para asociar loscertificados
Ver Comprobacioacuten de Autenticacioacuten WSAA con informacioacuten para determinar o depurar el problema deacceso
Mensajes de Error Original
Computador no autorizado a acceder los servicios de AFIP (ns1coenotAuthorized)bull Certificado no emitido por AC de confianza (ns1cmscertuntrusted)bull
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA) 117
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso alWSN solicitado
Este error es reportado por AFIP cuando se esta solicitan varios tickets de acceso para el mismo certificado yservicio
Ver Reutilizacioacuten de Ticket de Acceso
Falla SOAP Server was unable to read request ---gt There is an error in XML document (41339) ---gt Input string was not in a correct format
Este error correponde al protocolo de intercambio de datos (ver Errores por Tipos de Datos) y puede significarque
Un campo obligatorio no fue completadobull Se completoacute un campo con un tipo de datos invaacutelido (float en lugar de int coma en vez de punto etc)bull Se especificoacute un valor no esperado por el web servicebull
En cualquier caso se puede revisar el mensaje XML de requermiento (atributos xml_request o XmlRequest) ybuscar la etiqueta con datos incorrectos en la liacutenea y caracter donde se informa el error (por ej en este casoliacutenea 4 cerca del caracter 1339) Ver maacutes informacioacuten y rutinas en Manejo de Excepciones
Otras fallas SOAP
WSAA y otros webservices pueden devolver errores no documentados o capturados por AFIP por ej
Server was unable to process request ---ampgt This OracleTransactionhas completed it is no longer usable
bull
SoapFault soapenvServer Could not initialize classorghibernatetransformTransformers
bull
Nuestra interfaz no utiliza Java ni Hibernate por lo que este tipo de problemas son cuestiones internas deAFIP Los errores Oracle u ORA son un problema interno de la base de datos de AFIP
Puede ocurrir en homologacioacuten y se debe esperar a que AFIP solucione el problema
En estos casos para produccioacuten se puede consultar con la mesa de ayuda sriafipgovar (seguramente es untema que lo resolveraacuten en el diacutea y no requiera una intervencioacuten de programacioacuten o configuracioacuten especial)
Errores generales AFIP
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token
Posiblemente haya un problema interno en AFIP (frecuentemente se soluciona automaacuteticamente ya que puedeser un problema de los servidores de AFIP ver abajo) o se este enviando incorrectamente el WSAAToken(por ej el lenguaje de programacioacuten o la base de datos recortoacute el string) Revisar que dicho dato se esteacutecopiando tal cual al webservice de negocio (WSFEv1Token WSMTXCAToken etc) o utilizar los nuevosmeacutetodos como WSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado118
En python se puede analizar el sign ejecutando
import base64print base64b64decode(wsaaToken)
Que deberiacutea mostrar un XML (token del ticket de acceso) como el siguiente
ltxml version=10 encoding=UTF-8 standalone=yesgtltsso version=20gt ltid unique_id=788962471 src=CN=wsaahomo O=AFIP C=AR SERIALNUMBER=CUIT 33693450239 gen_time=1401116887 exp_time=1401160147 dst=CN=wsfe O=AFIP C=ARgt ltoperation value=granted type=logingt ltlogin uid=C=ar O=pyafipws-sistemas agiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart service=wsfe regmethod=22 entity=33693450239 authmethod=cmsgt ltrelationsgt ltrelation reltype=4 key=20267565393gt ltrelationsgt ltlogingt ltoperationgtltssogt
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 a la firma
Posiblemente se este enviando incorrectamente el WSAASign (por ej el lenguaje de programacioacuten o la basede datos recortoacute el string) Revisar que dicho dato se esteacute copiando tal cual al webservice de negocio(WSFEv1Sign WSMTXCASign etc) o utilizar los nuevos meacutetodos comoWSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
600 ValidacionDeToken Error al verificar hash VerificacionDeHash No valid la firmadigital
Este error es reportado por AFIP cuando no se estaacute enviando al webservice de negocio (WSFEv1WSMTXCA WSFEXv1 etc) el Token y Sign obtenido con WSAA (o se lo enviacutea vaciacuteo)
Esto puede deberse porque no se esteacute validando correctamente el ticket de requerimiento de acceso(certificado invaacutelido fecha invaacutelida ambiente de produccioacuten homologacioacuten incorrecto ticket de acceso yaotorgado etc) Revisar que la URL de cada webservice sea correcta (homologacioacuten o produccioacuten tanto deWSAA como del servicio web de negocio WSFEv1 WSMTXCA etc) y que el certificado corresponda alambiente correcto
Ver Manejos de excepciones para detectar el inconveniente en WSAA
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC
No estaacuten sincronizados la fecha y hora del equipo con los servidores de AFIP
En linux se actualiza con
sudo ntpdate timeafipgovar
En windows se actualiza yendo a Propiedades del Reloj Hora de Internet introduciendotimeafipgovar
Otros mensajes similares
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token119
Token vencido fecha y hora de vencimiento del token enviado - fecha y hora actual del servidorbull Validaciondetoken No validaron las fechas del token Gen Time Exp Time Now Utcbull WSAA xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid Eltiempo de generacioacutenexpiracioacuten es invaacutelido generationTime posee formato o dato invaacutelido (ej en elfuturo o maacutes de 24 hs de antiguedad)
bull
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken No aparece CUITen lista de relaciones
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesovaacutelido pero se intenta operar con un CUIT incorrecto yo que no se corresponde al certificado Revisar que elCUIT sea correcto y que esteacute asociado al servicio y certificado (ver ARFE en punto anterior)
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken Error al verificarhash VerificacionDeHash No valid la firma digital
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el ambiente requerido (por ej ticket de acceso de homologacioacuten usado en produccioacuten) o no seenvioacute correctamente el tocken y sign
Usuario no autorizado para realizar esta operacioacuten Validacionde Token No valido idSistema wsfex (Id Sistema de token es wsfe)
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el servicio web requerido (por ej ticket de acceso de factura nacional -wsfe- usado enexportacioacuten -wsfex-)
Se debe revisar el valor del servicio al crear el requerimiento de acceso (CreateTRA)
Problemas con los certificados
Error inesperado no existe el archivo o directorio de certificadoclave privada
Este error corresponde a que la interfaz no encuentra los archivos del certificadoclave privada o la ruta notiene alguacuten directorio Revisar la ruta completa y reintentar
Mensaje de Error Original (certificado)
Unexpected Python Error lttype exceptionsIOErrorgt [Errno 2] No such file or directoryreingartcrt
Mensaje de Error Original (clave privada)
Unexpected Python Error 936error02001002system libraryfopenNo such file ordirectorycryptobiobss_filec122fopen(reingartkeyr) 936error2006D080BIOroutinesBIO_new_fileno such filecryptobiobss_filec125 None
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC 120
Error inesperado La clave privada no coincide con el certificado
Este error corresponde a que el certificado no fue creado con la clave privada dada por lo que no se puederealizar la encriptacioacuten necesaria Revisar que la clave privada sea con la que se creoacute el pedido de certificadooriginal (CSR) y reintentar Si no se cuenta con la clave privada original es imposible utilizar el certificadopor lo que es necesario generar y asociar uno nuevo
Mensaje de Error Original
Unexpected Python Error ltclass M2CryptoSMIMESMIME_Errorgt936error0B080074x509 certificate routinesX509_check_private_keykey valuesmismatchcryptox509x509_cmpc399 936error2107407FPKCS7routinesPKCS7_signprivate key does not match certificatecryptopkcs7pk7_smimec76
Error Inesperado La clave privada es invaacutelida
Mensaje de Error Original
Unexpected Python Error 936error0906D06CPEM routinesPEM_read_biono startlinecryptopempem_libc647Expecting ANY PRIVATE KEY
Este error corresponde a que la clave privada no estaacute en el formato correcto (texto plano PEM) seguramenteel archivo se encuentra en PKCS12 (binario certificado x509 + clave privada con extensioacuten p12 o pfx)lo que no es necesario para esta interfaz
Para convertir de pkcs12 a pem utilizar
openssl pkcs12 -in empresap12 -out empresapem -nodes
Eso generaraacute el archivo empresapem donde
La clave privada (key) se encuentra entre -----BEGIN RSA PRIVATE KEY----- y-----END RSA PRIVATE KEY-----
bull
El certificado (crt) se encuentra entre -----BEGIN CERTIFICATE----- y -----ENDCERTIFICATE-----
bull
Copiar dichas lineas en archivos separados Los archivos deben incluir el encabezado (-----BEGIN ) ypie (-----END ) para ser vaacutelidos
En caso de ser necesario para recorrer el camino inverso generar archivo PKCS12 desde PEM (no necesariopor esta interfaz) realizar
openssl pkcs12 -export -inkey empresakey -in empresacrt -out empresap12
Error inesperado Mala Desencriptacioacuten
Este error corresponde a que el certificado fue creado usando una frase de seguridad (passphrase) por lo queen tiempo de ejecucioacuten solicita entrada dicha contrasentildea (bloqueandose si no se proporciona)
Mensaje de Error Original
Error inesperado La clave privada no coincide con el certificado 121
M2CryptoEVPEVPError 3079395008error06065064digital enveloperoutinesEVP_DecryptFinal_exbaddecryptevp_encc3303079395008error0906A065PEM routinesPEM_do_headerbaddecryptpem_libc428
Para remover la passphrase (contrasentildea) por ej del archivo privadapem y grabarlo en privadakeyejecutar el siguiente comando
openssl rsa -in privadapem -out privadakey
Error inesperado Esperando certificado
El certificado proporcionado es invaacutelido
Es posible leer los datos de un certificado utilizando el comando openssl
openssl x509 -in reingartcrt -noout -text
Deberiacutea mostrar la informacioacuten completa del certificado
Certificate Data Version 3 (0x2) Serial Number 0791000000000000 Signature Algorithm sha1WithRSAEncryption Issuer CN=AFIP-Autoridad Certificante Homologacion C=AR ST=Capital Federal L=Ciudad Autonoma de Buenos Aires O=Administracion Federal de Ingresos Publicos OU=Subdireccion General de Sistemas y TelecomunicacionesemailAddress=ac_homoafipgovarserialNumber=CUIT 33693450239 Validity Not Before Feb 1 174604 2010 GMT Not After Feb 1 174604 2011 GMT Subject CN=Mariano ReingartserialNumber=CUIT 20267565393 O=PyAfipWs-Sistemas Agiles C=AR
Si no lo muestra posiblemente el certificado esteacute en otro formato (ver como convertir desde pk7 en puntosanteriores)
Mensaje de Error Original
M2CryptoX509X509Error 3078817472error0906D06CPEM routinesPEM_read_bionostart linepem_libc650Expecting CERTIFICATE
Error al dar de alta computador
A partir de Agosto de 2016 aparentemente AFIP estaacute solicitando claves maacutes largas pudiendose presentar elsiguiente error al tratar de generar un certificado por WSASS Autoservicio de Acceso a WebServices(TESTINGHOMOLOGACIOacuteN)
ERROR clsCrearComputador (CUIT=20267565393 ALIAS=test_1024) createComputer Error al dar de alta al computador (CUIT=20267565393 ALIAS=test_1024) La longitud de clave puacuteblica debe ser estar comprendida entre 2048 y 8192 bits
En este caso de debe generar la clave con mayor cantidad de bits por ej indicando el paraacutemetro 2048 aInstructivo OpenSSL
Error inesperado Mala Desencriptacioacuten 122
La herramienta WSAA 110g ya crea de manera predeterminada claves de 4096 bits ver Crear Pedido CSR
Se estima que estas cuestiones afectaraacuten en PRODUCCIOacuteN cuando venzan la mayoriacutea de los certificados paraese entorno el 21 de Febrero de 2016 Es posible con este componente revisar el vencimiento de cada crtcon los Metodos para Certificados
Excepcioacuten SSLError X509_load_cert_crl_file
No se puede cargar el archivo afip_ca_infocrt de la lista de autoridades de certificacioacuten de confiaza(CACERT) necesario para verificar el canal seguro como solicita AFIP
Ese archivo en las ultimas actualizaciones se encuentra en la carpeta conf o puede ser descargado desde el el repositorio
El archivo debe ser copiado a la carpeta principal donde esteacute el programa WSAA o configurar el paraacutemetroCACERT con la ruta a la ubicacioacuten completa
Mensaje de Error Original
[Errno 185090050] _sslc345 error0B084002x509 certificateroutinesX509_load_cert_crl_filesystem lib
Falla SOAP WSAA (SoapFault)
En ciertas ocaciones WSAA puede denegar el acceso con los siguientes mensajes
ns1cmscertexpired Certificado expiradobull ns1xmlbad No se ha podido interpretar el XML contra el SCHEMAbull cmscertuntrusted Certificado NO emitido por un AC de confianzabull cmssigninvalid cmsbad y cmsbadbase64 no se esta informando correctamente el mensajecriptograacutefico firmado (Firma invaacutelida o algoriacutetmo no soportado)
bull
Generalmente se esta tratando de usar un certificado invaacutelido o expirado se estaacute pasando mal alguacuten paraacutemetro(servicio o tiempo de vida) o se estaacute tratando de acceder al ambiente equivocado (el cerificado es deproduccioacuten y el servidor de homologacioacuten o viceversa)
Ver consulta tema anterior para revisar el certificado Modo Homologacioacuten Produccioacuten y Comprobacioacuten deAutenticacioacuten WSAA
Errores de Conectividad
Antes las fallas de conexioacuten sobrecarga caiacutedas de internet u otros problemas de comunicacioacuten la interfazpuede devolver los siguientes errores (en su mayoriacutea del lenguaje de programacioacuten Python o sistemaoperativo)
AttributeError NoneType object has no attribute makefile no sepuede establecer el canal de comunicacioacuten (socket) puede que internet no este funcionando en elcliente
bull
socketgaierror [Errno -2] Name or service not known no se puede resolverel nombre del equipo revise los servidores DNS asignados a su conexioacuten de internet
bull
Error al dar de alta computador 123
socketerror [Errno 104] Connection reset by peer la conexioacuten fue cerradapor la contraparte (servidor AFIP) posiblemente por sobrecarga
bull
lturlopen (11001 getaddrinfo failed)gt no se puede resolver el nombre de archivorevise los DNS y si estaacute utiliando alguacuten servidor intermedio (proxy)
bull
ExpatError Not well formed token el servidor posiblemente no esta devolviendo XMLcorrecto debido a un error interno
bull
BadStatusLine ResponseNotReady significa que los servidores de AFIP no contestan algocoherente (compatible con el protocolo HTTP)
bull
AttributeError Tag not Found Body (no elements found) significa que losservidores de AFIP no contestan un XML vaacutelido seguacuten el protocolo de webservices SOAP
bull
SSLError The read operation timed out la conexioacuten SSLTLS supero el tiempo deespera posiblemente es un error de conectividad de Internet o los servidores de AFIP estaacuten caiacutedos
bull
Service Unavailable El servidor de AFIP no estaacute disponible y no devuelve un mensaje XMLcorrecto
bull
ServerNotFoundError Unable to find the server atservicios1afipgovar no estaacute resolviendo el nombre del Servidor de AFIP a la direccioacutenIP revisar la configuracioacuten DNS con su proveedor de Internet
bull
error [Errno 111] Connection refused error [Errno 10061] No sepuede establecer una conexioacuten ya que el equipo de destino denegoacuteexpresamente dicha conexioacuten revisar que no esteacute mal configurado el servidor proxy(comentar o no enviar parametro si no corresponde)
bull
En todos estos casos se recomienda reintentar la operatoria luego de unos instantes despueacutes de verificar laconexioacuten de internet Se puede probar ingresando a la URL del webserice (por ej[ httpsservicios1afipgovarwsfev1serviceasmxWSDL
WSFEv1]) con un navegador y ver si les abre correctamente la paacutegina
Tambieacuten puede haber un tema de antivirus o proxy que esteacute bloqueando la conexioacuten saliente En ese caso(servidor intermedio para poder salir a internet) se debe consultar con los administradores de la red yposiblemente se necesite configurar
El paraacutemetro proxy en el meacutetodo Conectar formato usuarioclaveservidorpuerto (verejemplo)
bull
o seccioacuten [PROXY] en el archivo receini (ver ejemplo)bull
Ver la siguiente seccioacuten si el problema persiste Recordar que a veces funciona o no dependiendo del lugardesde donde se conecta el cliente ya que AFIP tiene una granja de servidores pueden probar reconectandosea internet desde otra IP para ver si los deriva a un servidor que funcione (o esperar a que baje la demanda yover si lo solucionan)
Errores de Protocolo SSL
AFIP estaacute desafectando los protocolos de seguridad obsoletos (SSLv3 requiriendo TLSv1+) por lo que ensistemas operativos antiguos o desactualizados (por ej Windows XP) puede existir una incompatibilidad conque imposibilite la comunicacioacuten segura es recomendable actualizar el sistema operativo lenguaje deprogramacioacuten y componentes
SSLEOFError EOF occurred in violation of protocol (_sslc590)bull SSLHandshakeError [SSL SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alertbull
Errores de Conectividad 124
handshake failure (_sslc581)[Errno 1] _sslc490 error14094410SSLroutinesSSL3_READ_BYTESsslv3 alert handshake failure
bull
Como mitigacioacuten puede utilizare un transporte alternativo basado en la biblioteca CURL que en general tienemejor cobertura para este tipo de cuestiones en Windows
Para ello establecer paraacutemetro wrapper=pycurl en el meacutetodo Conectar si se utilizan loscomponentes
wrapper = pycurlok = WSFEv1Conectar(cache wsdl proxy wrapper)
Si se utilizan las herramientas por linea de comando configurar en el receini
[WSFEv1]wrapper = pycurl
Errores AFIP CUIT Emisor
En caso de problemas con el CUIT emisor y no superar una de las siguientes validaciones excluyentes(verificacioacuten de datos registrales inscripcioacuten en el reacutegimen autorizacioacuten de emisioacuten de comprobantesdomicilio fiscal etc) AFIP devolveraacute un Coacutedigo de Error 10000 con los mensajes posibles
01 LA CUIT INFORMADA NO CORRESPONDE A UN RESPONSABLE INSCRIPTO EN ELIVA ACTIVO
bull
02 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESELECTRONICOS ORIGINALES O EL PERIODO DE INICIO AUTORIZADO ES POSTERIORAL DE LA GENERACION DE LA SOLICITUD
bull
03 LA CUIT INFORMADA REGISTRA INCONVENIENTES CON EL DOMICILIO FISCALbull 04 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESCLASE A
bull
05 EL CUIT INFORMADO COMO EMISOR NO SE ENCUENTRA REGISTRADO DE FORMAACTIVA EN LAS BASES DE LA ADMINISTRACIOacuteN
bull
06 DEBE POSEER AL MENOS UNA ACTIVAD ACTIVAbull
En estos casos debe contactar la mesa de ayuda de AFIP para solucionar el inconveniente que esteacute bloqueandola emisioacuten de facturas electroacutenicas (generalmente no es un tema teacutecnico sino un traacutemite administrativo)
Errores AFIP Punto de Venta
Otros errores relacionados a la emisioacuten de facturas electroacutenicas pueden ser
1501 El Punto de Venta debe ser del tipo habilitado para el reacutegimen CAE Codificacioacuten de Productos- Web Services o del reacutegimen CAEA
bull
Errores de Protocolo SSL 125
En este caso se debe revisar que el tipo de punto de venta dado de alta coincida con el servicio web aconsumir (campo sistema de facturacioacuten asociado)
RECE para aplicativo y web services (CAE WSFEv1 factura electroacutenica mercado interno tradicionalsin detalle)
bull
RECE para aplicativo y web services EXPORTACION (CAE WSFEXv1 factura electroacutenicaexportacioacuten con detalle)
bull
Codificacioacuten de Productos Web Services (CAE WSMTXCA factura electroacutenica mercado interno condetalle)
bull
CAEA - Codificacioacuten de Productos (CAE anticipado WSMTXCA factura electroacutenica mercado internocon detalle)
bull
No debe figurar Factura en Linea porque ese punto de venta solo permite operar por Clave Fiscal serviciointeractivo de Comprobantes en Liacutenea
Errores de tipos de datos
Se recuerda que este componente es dinaacutemico y generalmente no realiza conversioacuten ni ajustes en los tipos dedatos por lo que la aplicacioacuten que lo utilice debe revisarlos y verificar que sean correctos para ser enviadosrespetando las especificaciones y validaciones de AFIP
Debido a que los distintos lenguajes de programacioacuten pueden almacenar y pasar los valores de formasdiferentes (eventualmente en registros recordsets campos fields o similares) es recomendable que seconviertan todos los datos a string (cadenas de caracteres) para evitar errores de conversioacuten y redondeoTambieacuten se pueden usar otros tipos de datos baacutesicos como enteros (integer) flotantes (float)numeacutericomoneda (currencydecimal) que son los que en definitiva reconoce AFIP Las fechas deben pasarseen formato string seguacuten el formato de cada webservice Los importes deben pasarse con punto decimal (nocoma y sin separadores de miles ni signo pesos)
En VB se pueden convertir los valores con CStr (string) CLng (long) CCur (currency) etc o incluso lasfunciones str o val en ciertos casos ejemplo
tipo_cbte = CInt(rstipo_cbte)
Para un ejemplo concreto ver la implentacioacuten completa de referencia factura_electronicamdb (Access 2k osuperior)
En caso de enviar los tipos de datos incorrectos en Traceback (ver Manejo de Excepciones) podraacuteencontrarse algunos de los mensajes frecuentes
AttributeError PyIDispatch object has no attribute strip se envioacuteun dato que no puede convertirse a string
bull
PyIDispatch at 0x10531678 with obj at 0x0C997832 se usoacute un tipo de datos noconvertidosoportado ver Mensajes XML
bull
TypeError int() argument must be a string or a number notNoneType se envioacute un nulo en un campo que necesitaba un nuacutemero
bull
ValueError invalid literal for int() with base 10 A se envioacute un stringen un campo que necesitaba un nuacutemero
bull
Errores AFIP Punto de Venta 126
Errores internos de AFIP
Ocasionalmente pueden producirse errores no documentados en las especificaciones teacutecnicas de AFIP Por ejcuando se intenta utilizar la URL de un webservice obsoleto como WSBFE en vez de WSBFEv1 el servidorde AFIP ha devuelto el siguiente error
soapServer Server was unable to process request ---ampgt Object reference not set to an instance ofan object
bull
Otros problemas internos de los servidores de AFIP que los resuelve dicho organismo automaacuteticamente (sinintervencioacuten necesaria generalmente en el transcurso del diacutea) son
500 Error general DB (InsertandAuthorize - fex_pckprc_ins_rcel_comprobantes OEX ) - (1654) -ORA-01654 unable to extend index MIGRARCEL_CMP_UNC_INDEX by 4 in tablespaceFISCO_DATOS ORA-06512 at MIGRAFEX_PCK line 353 ORA-06512 at line 1
bull
500 Error interno DB - fex_Rece_Pckget_ctzbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
500 Error general DB (InsertandAuthorize - prc_ws_ins_cab) BFEErrorbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-12535 TNSoperationtimed out
bull
500 Error interno de aplicacioacuten - Metodo FECAESolicitar - Index was outside the bounds of thearray
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-00257 archiver error Connect internalonly until freed ORA-02063 preceding line from GHOST ORA-06512 at ORARECE_V1_PCKline 1651 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-28000 the account is lockedORA-02063 preceding line from E15K_PADR ORA-06512 at ORARECE_V1_PCK line 1806ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLEinitialization or shutdown in progress
bull
501 Error interno de base de datos - CAECabInsert ORA-02068 following severe error fromCONTRIB ORA-03113 end-of-file communication channel ORA-06512 atORARECE_V1_PCK
bull
501_ Error interno de base de datos - CAECabInsert ORA-01001 invalid cursor ORA-06512 atORARECE_V1_PCK line 580 ORA-06512 at ORARECE_V1_PCK line 1070 ORA-06512 atline 1
bull
501 Error interno de base de datos - CAEDetInsert ORA-03233 unable to extend tableORAF136_DETALLES_FACTE subpartition F136_DET_2011_CLAVE_08 by 128 in tablespaceUSERS
bull
501 Error interno de base de datos - CAESequenceGenerarORA-01502 indexORAF136_DET_CAE_UK or partition of such index is in unusable state ORA-06512 atORARECE_V1_PCK line 1477 ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace FISCO_DATOS ORA-06512 at ORARECE_V1_PCK line1168 ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLE initializationor shutdown in progress
bull
501 Error interno de base de datos - AlicIvaCAEInsertORA-14400 inserted partition key does notbull
Errores internos de AFIP 127
map to any partition ORA-06512 at ORARECE_V1_PCK line 1308 ORA-06512 at line 1501 Error interno de base de datos - CuitsEnPadronSet ORA-12541 TNSno listener ORA-06512 atORARECE_V1_PCK line 1831 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-04031 unable to allocate 20528 bytesof shared memory (shared poolunknown objectsga heap(10)KTI SGA freeable small pool)ORA-02062 preceding line from SEFI ORA-06512 at ORARECE_V1_PCK line 1898ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace USERS at ORARECE_V1_PCK line 1202
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-12505 TNSlistener could notresolve SID given in connect descriptor
bull
501 Error interno de base de datos - CAECompConsultarORA-01502 indexORAIX_F136_DETALLES_TPN or partition of such index is in unusable state
bull
501 Error interno de base de datos - CAECabInsert ORA-01502 index ORAF136_CAB_CUIT_IDor partition of such index is in unusable state
bull
501 DataBase - Resultado inesperadobull 501 Error interno de base de datos - CAESequenceGenerarORA-01654 unable to extend indexORAF136_DET_CAE_UK by 1024 in tablespace FISCO_FE ORA-06512 atORARECE_V1_PCK line 1781 ORA-06512 at line 1
bull
502 Error interno de base de datos - Autorizador CAE - Transaccioacuten Activabull Error interno de aplicacioacuten - Metodo FECompConsultarORA-01034 ORACLE not availableORA-27101 shared memory realm does not exist
bull
Error interno de aplicacioacuten - Metodo FECompConsultarORA-01035 ORACLE only available tousers with RESTRICTED SESSION privilege
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-28000 the account is lockedbull soapenvServer Error de conexin DB [Cd A001]bull soapenvClient Error de acceso a la base de datosbull soapenvClient business0010bull soapenvClient orgapacheaxis2databindingADBExeption unexpected subelementconsultarCTGDatos
bull
Tambieacuten pueden ocurrir Errores de Conectividad a nivel de sistema operativo socket error ioerror timeout connection refused ssl handshake server not found etc (verarriba) especialmente cuando los servidores de AFIP se saturan por cambios y actualizaciones
Realizar la consulta con la mesa de ayuda de AFIP sriafipgovar (produccioacuten) y webservicesafipgovar(homologacoacuten) para dejar constancia del problema y si corresponde ver de utilizar los meacutetodos tradicionalespara emitir comprobantes seguacuten RG248508 Artiacuteculo 33
En el caso de inoperatividad del sistema se deberaacute emitir y entregar el comprobanterespectivo utilizando el controlador fiscal o los comprobantes manuales seguacuten correspondahasta tanto esta Administracioacuten Federal apruebe otro procedimiento alternativo de respaldo
Importante en general es obligatorio informar los comprobantes emitidos manualemente por formulariomultinota en dependencia de AFIP a traveacutes de servicios en linea o como AFIP disponga en casos particularesConsultar con el contador la normativa y legislacioacuten vigente
Errores internos de AFIP 128
Errores de Permisos
Dependiendo de las poliacuteticas de seguridad puede ser necesario dar permisos de acceso a la carpeta cache(archivos temporales) o aquellas donde se almacenen los archivos de intercambio (entrada salida PDF oXML)
IMPORTANTE los certificados y claves privadas no deben ser expuestas en una carpeta puacuteblica delservidor web o similar Utilizar passphrase (ver Meacutetodos WSAA) para mayor proteccioacuten y seguridad
Linux
En GNULinux generalmente es necesario que el usuario del servidor web (www-data o similar) puedaacceder a la carpeta
Por ejemplo se podriacutea utilizar los siguientes comandos
chown www-data -R optpyafipwschmod a+xr -R optpyafipwschmod a+xwrt -R optpyafipwscache
Revisar los permisos con su administrador de sistemas
Windows
Acceso Denegado (Archivos)
Error IOError [Errno 13] Permission denied cArchivos deProgramaPyAfipWSCacheTAXML
En general es recomendable utilizar una carpeta con permisos de escritura para la aplicacioacuten
Si esto no es posible se puede configurar los permisos de acceso
Explorador de Archivosbull Buscar carpeta de instalacioacuten (CArchivos de ProgramaPyAfipWS)bull Propiedades (click derecho)bull Solapa Seguridadbull Seleccionar Usuarios que ejecutan la aplicacioacutenbull Editarbull Modificar (habilitar)bull Aceptarbull
Ejemplo
Acceso Denegado (CreateObjectCreateInstance)
En ciertos servidores (Windows 7 o superior) dependiendo de la configuracioacuten debe permitir inicio yactivacioacuten de los componentes
Errores de Permisos 129
Error al llamar a CreateObject CreateInstance o similar Acceso Denegado(HRESULT0x80070005 E_ACCESSDENIED
Solucioacuten
Inicio buscar Servicios de Componentes (o via el Panel de Control HerramientasAdministrativas)
bull
Equipos Mi PC Configuracioacuten DCOMbull Buscar WSAA WSFEv1 o el componente que desee configurarbull Propiedades (Click Derecho)bull Solapa Seguridadbull Permisos de inicio y activacioacuten Personalizado Editarbull Agregar los usuarios que deben tener permisos necesariosbull Aceptarbull
Repetir para Permisos de Acceso y Configuracioacuten de ser necesario
Ejemplo
Acceso Denegado (CreateObjectCreateInstance) 130
Se agrega video explicativo WSASS y actualiza instructivo certificadosbull Se actualizan paraacutemetros WSAA SignTRA (passphrase y contenido archivos)bull Se agregan ejemplos simples de reutilizacioacuten de TA para VFP y VBbull Se ajustan links al coacutedigo fuente hacia repositorio GitHub por baja de GoogleCodebull Se agregan ejemplos de RECE1 y PYFEPDFbull Se ajusta descripcioacuten obtencioacuten de CAE WSFEv1bull Se agregan errores internos de AFIPbull Se realizan correcciones menores de tipeo (motivos_obs base_imp)bull Se actualiza infomacioacuten para Factura C Exentos (RG3749)bull
Abril 2015 (hasta revisioacuten interna 504)
Se agrega metodo WSFEv1EstablecerCampoFacturabull Se ajusta formato de intercambio WSMTXCAbull Se ajustan instaladoresbull Se agregan maacutes errores frecuentes de AFIPbull
Octubre 2014 (hasta revisioacuten interna 479)
Se agrega informacioacuten y ejemplo datos opcionales RG 3668 WSFEv1bull Se agrega campos opcionales RG3668 al formato de RECE1bull Se ajusta manejo de errores (ejemplo VFP y simplificacion)bull Se agregan errores internos de AFIP (shared pool ora account locked) punto de venta y temasmenores
bull
Diciembre 2013 (hasta revisioacuten interna 389)
Se ajusta tabla comparativa (RG3536 y RG3571)bull Se agregan errores internos de AFIP ORA-12535bull Se ajusta formato RECE1 y temas menores (estilo)bull
Abril 2013 (hasta revisioacuten interna 343)
Se agrega ejemplo WSAA sobre reuso del ticket de accesobull Se agrega ejemplo WSAA sobre verificacioacuten de canal segurobull Se actualiza info sobre autoridades certificantebull Se actualiza info sobre renovacioacuten de certificadosbull Se ajusta links WSBFEbull Cambios menoresbull
NoviembreDiciembre 2011 (hasta revisioacuten interna 319)
Se ajusta seccioacuten WSFEXv1 Versioacuten 1bull Se agrega secciones Ajustes de WSFEX a WSFEXv1 y RECEX vs RECEX1bull Se ajusta ejemplo WSFEX (WSFEXv1)bull Se actualiza Mensajes XML con instrucciones para enviar campos vacios o nulosbull Cambios menores (coealreadyAuthenticated)bull
Julio 2011 (hasta revisioacuten interna 281)
Se agrega seccioacuten Version 1 (WSFEXv1) a WSFEX y se ajusta al nuevo webservicebull
Historial de Cambios 4
Se agrega seccion PyI25 Generador de Coacutedigos de Barrasbull Se agrega seccioacuten PyEmail Envio de correo electroacutenicobull Se agrega seccioacuten Nuevas Validaciones a WSFEv1bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
AbrilMayo 2011 (hasta revisioacuten interna 221)
Se agrega seccioacuten Manejo de Excepcionesbull Se agrega seccioacuten Verificacioacuten del Canal de Comunicacioacuten Segurobull Se agrega seccioacuten Tabla Comparativa Webservicesbull Se agrega seccioacuten Reutilizacioacuten de Ticket de Acceso a WSAAbull Se agrega seccioacuten Obtencioacuten de atributos avanzados a WSAA y WSFEv1bull Se agrega seccioacuten Factura C Monotributo a WSFEv1bull Se actualiza secciones WSAA (meacutetodos atributos errores)bull Se actualiza secciones WSFEv1 (meacutetodos atributos errores)bull Se actualiza secciones WSFEX (meacutetodos atributos errores)bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
FebreroMarzo 2011 (hasta revisioacuten interna 155)
Se agrega seccioacuten WSMTXCA (objeto meacutetodos atributos ejemplo errores) y RECEMbull Se agrega seccioacuten Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)bull Se actualiza seccioacuten WSFEv1 y RECE1bull Se agrega seccioacuten PyFEPDF (interfaz COM herramient CLI archivos de texto tablas DBFconfiguracioacuten y disentildeador visual)
bull
Se ajusta seccioacuten Interfase por archivos de texto siacutemil SIAP - RECE (configuracioacuten tablas DBF)bull
Ver historial completo desde revisioacuten 1 -2009- (solo usuarios autorizados)
Funcionamiento del campo ID
Importante El ID no aplica a los nuevos webservices (WSFEv1 ni WSMTXCA) igualmente se aconseja leery seguir las siguientes recomendaciones Si bien los nuevos webservices tampoco tienen reprocesamiento lainterfaz lo realiza internamente verificando los datos enviados y recibidos (ver informacioacuten adicional en cadawebservice)
El ID es el Identificador del requerimiento requerido por AFIP un nuacutemero interno de secuencia controladopor el emisor que permite identificar de manera uacutenica cada operacioacuten de autorizacioacuten (solicitud de CAE)Este dato es de vital importancia para poder recuperar un CAE frente a problemas de comunicacioacuten o fallasdel hardwaresoftware Sin el eacutes imposible recuperar un CAE y se puede llegar a bloquear todo el circuito defacturacioacuten electroacutenica en los servidores de AFIP Por ello es recomendable que sea un dato propio delsistema de facturacioacuten almacenado en un soporte permanente (base de datos en el disco riacutegido o similares)
El ID debe ser uacutenico para cada comprobante autorizado y debe cambiar si hubo rechazo previo Los ID nodeben reutilizarse salvo para realizar reprocesos (recuperar un CAE ya emitido) La AFIP almacena lastransacciones seguacuten su ID a mismo ID mismo resultado y CAE (independientemente de los otros datos de laoperacioacuten de transaccioacuten)
En el caso de fallas los webservices poseen meacutetodos para recuperar el uacuteltimo ID informado (por ej verUltNro o GetLastID)
Funcionamiento del campo ID 5
Si bien los ejemplos (incluyendo los oficiales) utilizan generalmente el uacuteltimo ID + 1 esto es solo para ilustrarel meacutetodo en general no es recomendable su uso en produccioacuten ademaacutes de requerir comunicacioacuten extra (noes obligatorio llamar al meacutetodo uacuteltimo ID) ya que puede generar inconvenientes en caso de muacuteltiples equipossolicitando autorizacioacuten simultaacuteneamente fallas de comunicacioacuten o problemas de almacenamiento Seriacutearecomendable por ej que el ID sea un campo autonumeacuterico autoincremental o serial secuencial queacompantildee a la factura
El ID es arbitrario y no tiene relacioacuten con el nordm de factura La uacutenica condicioacuten es que debe ser uacutenico pero noes necesario que sea creciente o secuencial
Validez de Comprobantes Electronicos emitidos
El uso incorrecto de los servicios web (no respetando el funcionamiento de los campos en especial el IDreproceso motivos de observacioacuten y errores) puede ocasionar comportamientos erraacuteticos (facturas noautorizadas o autorizadas con otros datos) Se recomienda revisar el funcionamiento general de su sistema enproduccioacuten utilizando las validaciones que prevee la AFIP
Consulta interactiva de CAE httpsservicioswebafipgobargenericoscomprobantescaeaspxbull Consulta interactiva de CAE Anticipado httpsservicioswebafipgobargenericoscomprobantescaeaaspx
bull
Por Clave Fiscal servicio Verificacioacuten de validez de comprobantes emitidos (solo receptores)bull Por servicio web para Facturas E A y B (Bono Fiscal) Meacutetodo Recuperar comprobante (para facturasde exportacioacuten solo emisores)
bull
Para maacutes informacioacuten y automatizacioacuten del proceso ver servicio web Constatacioacuten de ComprobantesWSCDC
Mensajes XML
Los mensajes XML contienen la comunicacioacuten transmitida entre el sistema y la AFIP en el formato deintercambio de los servicios web
Atributo XmlRequest (requerimientoxml) incluye credenciales de acceso y la solicitud remota(meacutetodo a utilizar paraacutemetros etc)
bull
Atributo XmlResponse (respuestaxml) incluye los datos devueltos por el proceso remotoincluyendo mensajes de error (si corresponde)
bull
Almacenar estos archivos es de vital importancia para el registro de las operaciones realizadas por webservicey su eventual verificacioacuten depuracioacuten o solucioacuten de inconvenientes La informacioacuten contenida en estosarchivos es solo relevante a los desarrolladores no es necesario que sean enviados al usuario final
Dependiendo de la interfaz se pueden recuperar estos mensajes en forma de cadenas de texto para su posterioralmacenamiento o generar los archivos correspondientes
Para maacutes informacioacuten ver atributos XmlRequest y XmlResponse o paraacutemetros xml --trace
Guardar WSFEv1XmlRequest y WSFEv1XmlResponse (ver Manejo de Excepciones para unarutina completa)
bull
RECE1EXE xml --trace generaraacute los archivos con la extensioacuten xml en el directorio de laherramienta (ver Paraacutemetros para maacutes informacioacuten)
bull
Validez de Comprobantes Electronicos emitidos 6
Nota de Seguridad los mensajes pueden incluir datos sensibles (credenciales de acceso a AFIP token ysign) que pueden ser vaacutelidos por varias horas auacuten despueacutes de efectuada la comunicacioacuten En caso compartirestos archivos (por ej en el foro puacuteblico de consultas) se deberiacutean tomar las medidas necesarias para evitarinconvenientes (recortar el campo sign es suficiente para que no se puedan reutilizar las credenciales deacceso)
Importante En ciertos casos para determinados webservices AFIP solicita tag vacios (por ejpermiso_existente en WSFEXv1) por lo que se ha ajustado en la biblioteca de comunicacioacuten SOAP(versioacuten 127 y superiores) para manejar tres escenarios
Enviar un dato por ej permiso_existente = Sltpermiso_existentegtSltpermiso_existentegt
bull
Enviar un tag vacio completando con string vacio por ej permiso_existente = ltpermiso_existentegtltpermiso_existentegt
bull
No enviar un tag (valor NULL NIL None Void etc) por ej permiso_existente = NULL(no genera XML)
bull
En caso de no seguir las especificaciones de AFIP el webservice retornaraacute un mensaje de error del tipoServer was unable to read request ---gt There is an gt error in XMLdocument (5 1353) ---gt Input string was not in a correct format dondeindica revisar el XmlRequest liacutenea 5 columna 1353 (en este caso puntual) para corregir el dato enviado
Documentacioacuten Oficial AFIP
Recomendamos revisar y seguir los lineamientos y normativa de AFIP
httpwwwafipgovarfebull httpwwwafipgovarwsbull
Recordamos que la interfaz y bibliotecas (PyAfipWs) no realizan ninguacuten tipo de chequeo o validacioacutenadicional (ya que esta tarea la realizan los servidores de AFIP) y tampoco convierte entre distintos tipos dedatos (salvo conversioacuten trivial a cadenas -strings- para ser enviadas por XML) por lo que es responsabilidadde la aplicacioacuten principal cumplir con las especificaciones y legislacioacuten vigente referidas a los servicios webde AFIP proporcionando los datos correctos que correspondan
Modos Homologacioacuten y Produccioacuten
Por disentildeo el instalador para Windows publicado de la interfaz COM (pyafipwspy) y herramientas por liacuteneade comando (recepy recexpy recebpy rece1py) funcionaraacute inicialmente solo en modo homologacioacuten(testing) ya que su objetivo es simplemente facilitar las pruebas para que los usuarios que no concen Pythonpuedan evaluar el producto antes de interiorizarse en el lenguaje yo contratar el soporte comercial
Con los instaladores de evaluacioacuten en modo de homologacioacuten (pruebas) se ignoraraacute las URLsproporcionadas a CallWSAA Conectar o especificadas en receini En ese caso para activar modo produccioacuten(definitivo) es necesario ajustar el coacutedigo fuente ver instrucciones de Instalacioacuten desde Coacutedigo Fuente( video explicativo) Ofrecemos soporte comercial contemplando el acceso al instalador compilado ampajustado para produccioacuten para los clientes que asiacute lo requieran Ver Costos y Condiciones
Mensajes XML 7
Configuracioacuten para Produccioacuten
Para entrar en el ambiente de produccioacuten de AFIP ademaacutes de utilizar el instalador correcto (no el deevaluacioacuten ver arriba) se debe usar las URLWSDL correspondientes para cada webservice (modohomologacioacuten deshabilitado)
WSAA httpswsaaafipgovarwsservicesLoginCmswsdlbull WSFE httpsservicios1afipgovarwsfeserviceasmx -obsoleto desde 2011 por AFIP-bull WSFEv1 httpsservicios1afipgovarwsfev1serviceasmxWSDLbull WSFEXv1 httpsservicios1afipgovarwsfexv1serviceasmxWSDLbull WSMTXCA httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAServicewsdlbull WSBFEv1 httpsservicios1afipgovarwsbfev1serviceasmxWSDLbull
Ejemplo en el receini
[WSAA]CERT=reingartcrtPRIVATEKEY=reingartkeyURL=httpswsaaafipgovarwsservicesLoginCmsCACERT=confafip_ca_infocrt
[WSFEv1]CUIT=20267565393ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
Ejemplo en Visual Basic o similar (segundo paraacutemetro del meacutetodo Conectar)
Certificado = reingartcrt certificado de produccioacutenClavePrivada = reingartkey clave privada de produccioacutencms = WSAASignTRA(WSAACreateTRA(wsfe) Certificado ClavePrivada)
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlok = WSAAConectar(cache wsaa_url)ta = WSAALoginCMS(cms)
wsfev1_url = httpsservicios1afipgovarwsfev1serviceasmxWSDLok = WSFEv1Conectar(cache wsfev1_wsdl)
WSFEv1Cuit = 20267565393 CUIT del emisor (segun certificado)
Luego de configurar las opciones para produccioacuten se puede verificar el correcto funcionamiento de lascredenciales y URL utilizando los meacutetodos auxiliares por ej consultando los puntos de venta habilitados
parametros RECE1 ptosventabull meacutetodo ParamGetPtosVentabull
Aclaracioacuten No es obligatorio usar el instalador ni realizar compilacioacuten se puede bajar revisar modificar yejecutar directamente el coacutedigo fuente Python publicado en modo homologacioacuten o produccioacuten
Configuracioacuten para Produccioacuten 8
Importante Los CAE obtenidos en modo homologacioacuten no tienen validez fiscal
Advertencia Teoacutericamente no deberiacutea ser posible conectarse a produccioacuten con certificados de homologacioacuten(y viceversa) pero en la praacutectica han sucedido casos (obteniendo CAE de homologacioacuten sin validez fiscal)por lo que recomendamos extremar las medidas de seguridad y control (verificando certificados yconfiguracioacuten de URL de servidores) para generar las facturas en el ambiente correcto Ver Verificar ValidezCAE y Comprobacioacuten WSAA
Manejo de Excepciones
Las versiones recientes de WSAA (202) WSFEv1 (110) WSMTXCA (101) y WSFEX (126123) incluyenmejoras y unificaciograven en el manejo de excepcioneserrores (atributos LanzarExcepciones Excepciony Traceback) permitiendo un control maacutes simple de los Unexpected Python Error (errores noesperados que informa Python el lenguaje de programacioacuten de la interfaz generalmente por problemas deconexioacuten o tipos de datos invaacutelidos) sobre todo para lenguajes que no soportar mensajes de Error COM(previniendo mensajes por errores no controlados como Error fatal coacutedigo de excepcion=C0000005 y elcierre del programa)
Dependiendo de cada caso (en especial para lenguajes de programacioacuten legados) es conveniente deshabilitarlos errores no manejados (LanzarExcepciones = False) y controlar manualmente las excepciones y el valorretornado luego de llamar a cada meacutetodo
Ejemplo para Visual Basic
Dim ta as Variant
WSAALanzarExcepciones = Falseta = WSAALoginCMS(cms)If WSAAExcepcion ltgt Then
muestro al usuario solo el mensaje de error no la traza MsgBox WSAAExcepcion vbCritical Excepcioacuten
Exit SubEnd If
Mismo ejemplo para Visual Fox Pro
WSAALanzarExcepciones = Fta = WSAALoginCMS(cms)IF LEN(WSAAExcepcion) gt 0 THEN WSAATraceback MESSAGEBOX(WSAAExcepcion 5 + 48 Excepcion) CANCELENDIF
Tambieacuten se puede verificar que la respuesta del meacutetodo (en este caso en la variable ta notar que es del tipoVariant) no sea nula en ese caso se ha producido una excepcioacuten y el mensaje deberiacutea estar en el atributoExcepcion con su traza en Traceback
Nota dependiendo de la version los atributos Excepcion y Traceback pueden estar disponibles solo luego deocurrido el error (utilizar las ulitmas versiones para poder consultar estos atributos en cualquier momento)
Es recomendable que se muestre al usuario solo la Excepcioacuten (la traza es informacioacuten teacutecnica que no tieneutilizad para el operador) y para facilitar la depuracioacuten en todos los casos es uacutetil guardar los Mensajes XML
Manejo de Excepciones 9
y excepcioacuten ya que a veces los lenguajes de programacioacuten cortan el mensaje y se dificulta saber el motivo delerror Ademaacutes es recomendable siempre verificar que los objetos hayan sido creados (para no generar nuevoserrores) y que estos sean compatibles con la versioacuten que manejamos (si tenemos varias instalaciones distintaspara no solicitar atributos inexistentes)
Por ej para VB (cambiar WSAA por el webservice que corresponda)
verifico que el objeto haya sido creadoIf Not WSAA Is Nothing Then
verifico que la versioacuten del objeto sea compatibleIf WSAAVersion gt= 102a Then creo el archivo guardo alliacute todos los atributos para depuracioacuten
fd = FreeFile Open cerrortxt For Append As fd Print fd WSAAExcepcion Print fd WSAATraceback Print fd WSAAXmlRequest Print fd WSAAXmlResponse Close fd
End IfEnd If
Ejemplo para VFP (cambiar WSAA por el webservice que corresponda)
-- Depuracioacuten (grabar a un archivo los datos de prueba)gnErrFile = FCREATE(cerrortxt) =FWRITE(gnErrFile WSAAToken + CHR(13))=FWRITE(gnErrFile WSAASign + CHR(13)) =FWRITE(gnErrFile WSAAXmlRequest + CHR(13))=FWRITE(gnErrFile WSAAXmlResponse + CHR(13))=FWRITE(gnErrFile WSAAExcepcion + CHR(13))=FWRITE(gnErrFile WSAATraceback + CHR(13))=FCLOSE(gnErrFile)
Error Handler
Importante este meacutetodo no es estrictamente necesario si su programa ya tiene incorporado el manejo deerrores seguacuten el lenguaje de programacioacuten que utilicie (especialmente si utiliza el control de excepcionesmencionado en la seccioacuten anterior)
Todas estas consideraciones no quitan que se deba tener previsto el controlador de errores habitual dellenguaje para capturar los errores graves (por ej al no poder crear el objeto enviar un tipo de dato incorrectoo llamar un meacutetodoatributo inexistente) ya sea utilizando
Visual Basic ON ERROR GOTO bull Visual Fox Pro ON ERROR DO bull o bloques TRY EXCEPT CATCH o similaresbull
Lo mismo aplica a WSFEv1 WSMTXCA y WSFEX Para maacutes informacioacuten ver los ejemplos actualizados
Para VB
On Error GoTo ManejoError
Crear objeto interface (WSAA WSFEv1 etc)
Error Handler 10
Set WSAA = CreateObject(WSAA) llamar a los meacutetodos de WSAA
Exit Sub
ManejoError
Si hubo error (tradicional no controlado)
Mostrar mensajes de Depuracioacuten en ventana de inmediatoIf Not WSAA Is Nothing Then
If WSAAVersion gt= 102a Then DebugPrint WSAAExcepcion DebugPrint WSAATraceback DebugPrint WSAAXmlRequest DebugPrint WSAAXmlResponse
End IfEnd IfIf Not WSFEv1 Is Nothing Then
If WSFEv1Version gt= 110a Then DebugPrint WSFEv1Excepcion DebugPrint WSFEv1Traceback DebugPrint WSFEv1XmlRequest DebugPrint WSFEv1XmlResponse DebugPrint WSFEv1DebugLog()
End IfEnd If
Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipSelect Case MsgBox(ErrDescription vbCritical + vbRetryCancel Error amp ErrNumber - vbObjectError amp en amp ErrSource)
Case vbRetry DebugAssert False
ResumeCase vbCancel
DebugPrint ErrDescriptionEnd Select
Para VFP (con procedimiento para captura de errores automaacutetica)
ON ERROR DO errhand2-- Crear objeto interface Web Service de Factura ElectroacutenicaWSFE = CREATEOBJECT(WSFEv1) -- llamar a los meacutetodos de WSFE
-- Procedimiento para manejar errores WSFEPROCEDURE errhand2 --PARAMETER merror mess mess1 mprog mlineno
-- Depuracioacuten (mostrar los mensajes de error en la ventana principal)
WSFEv1XmlRequest WSFEv1XmlResponse WSFEv1Excepcion WSFEv1Traceback
Error number + LTRIM(STR(ERROR()))
Error Handler 11
Error message + MESSAGE() Line of code with error + MESSAGE(1) Line number of error + LTRIM(STR(LINENO())) Program with error + PROGRAM()
-- Preguntar Aceptar o cancelar ch = MESSAGEBOX(WSFEExcepcion 5 + 48 Error) IF ch = 2 ampamp Cancelar ON ERROR CLEAR EVENTS CLOSE ALL RELEASE ALL CLEAR ALL CANCEL ENDIF ENDPROC
Es posible seguir utilizando para las versiones anteriores o por compatibilidad hacia atraacutes LanzarExcepciones= Verdadero (predeterminado) en dicho caso se generaraacute un Error COM que deberaacute ser capturado por laaplicacioacuten y el mensaje estaraacute en ErrDescription (para VB) o MESSAGE() (para VFP)
Time-Out
En casos de falla de los servidores de AFIP la respuesta se puede demorar por lo que se puede configurar elparametro timeout (tiempo de espera) en el meacutetodo Conectar(cache wsdl proxy wrappercacert timeout) para controlar el periacuteodo y minimizar los bloqueos
De manera predeterminada el tiempo de espera en las uacuteltimas versiones es de 30 segundos pero se puedenpasar otros valores como 300 para que espere hasta 5 minutos (si los servidores de AFIP estaacuten muycongestionados) o reducir a 15 o 10 para esperar un tiempo maacutes reducido y dar una respuesta raacutepida alusuario (ver en ese caso Reproceso Automaacutetico para reintentarconsultar en caso de fallas en AFIP)
Es recomendable establecer la propiedad LanzarExcepciones a Falso y comprobar el valor deExcepcion (ver arriba) que generalmente informaraacute el error del sistema operativo por timeout Varioswebservices de AFIP tienen un meacutetodo Dummy que se pueden combinar con el timeout para detectar si elservidor de AFIP esta funcionando correctamente o no (justamente ese meacutetodo tambieacuten puede fallar desdeAFIP y es necesario controlar el tiempo de espera para un chequeo raacutepido)
Ver Errores de Conectividad y Errores internos de AFIP para mayor informacioacuten sobre los problemasfrecuentes con la comunicacioacuten hacia los servidores de AFIP
Importante Si no se utiliza los paraacutemetros cache proxy wrapper y cacert deberiacutean ser pasados como stringvacio (no saltear) Para poder utilizar estos paraacutemetros se deberiacutea usar una versioacuten actualizada de loscomponentes (2015)
Verificacioacuten del Canal de Comunicacioacuten Seguro
Por nueva Especificacioacuten Teacutecnica WSAA 122(Requerimientos de canal seguro comunicacioacuten para los CEE WSAA y WSN) se debe verificar la identidaddel servidor de AFIP (transformando lo que antes era una sugerencia (no documentada) en una verificacioacutenobligatoria de comprobar el certificado y URL del servidor)
Time-Out 12
Para ello los meacutetodos Conectar reciben dos paraacutemetros adicionales (actualmente solo para uacuteltimasversiones de desarrollo de WSAA 204 y WSFEv1 112 o superiror)
wrapper libreriacutea http con soporte avanzado de ssl (por el momento pycurl)bull cacert ruta al certificado de la autoridad certificante a verificar geotrustcrt ocomodocrt Puede utilizar el archivo con ambos certificados afip_ca_infocrt que lomantenemos actualizado con todos los certificados requeridos
bull
IMPORTANTE es recomendable empezar a utilizar el archivo geneacuterico de entidades certificantes pasandocacert=True o cacert=default De este modo si AFIP cambia el certificado o se vence algunaCA es probable que el nuevo certificado esteacute en el archivo generico por lo que no habriacutea que modificar elcoacutedigo y agregarlo manualmente (siempre que se este utilizando una versioacuten actualizada del proyecto)
Como solucioacuten provisoria se pueden descargar cacertpem desde el siguiente link httpscurlhaxxsedocscaextracthtml Esos son los certificados de Firefox (Mozilla) que contiene todos loscertificados existentes Se deberiacutea reemplazar por el archivo afip_ca_infocrt
Ejemplo en Visual Basic
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlwrapper = pycurl para situaciones especiales o versiones anteriores (instalador lt 27)proxy = formato usuarioclaveservidorpuertocacert = WSAAInstallDir + confafip_ca_infocrt Indicar ruta completa (directorio conf instalador gt 27)WSAAConectar(cache wsaa_url proxy wrapper cacert)
Ejemplo en RECEINI (solo se agrega los paraacutemetros de configuracioacuten CACERT y WRAPPER el resto seusa normalmente)
[WSAA]URL=httpswsaaafipgovarwsservicesLoginCmswsdlCACERT=confafip_ca_infocrtWRAPPER=pycurl
Nota De realizar la verificacioacuten debe agregar los paraacutemetros a todas las secciones que se conecten con loswebservices [WSAA] [WSFEv1] [WSLPG] etc y usar un instalador actualizado
Para verificar la Autoridad Certificante (CACERT) se recomienda probar el uacuteltimo ejemplo interactivo(cambiando httplib2 por pycurl para validar el nuevo certificado de wsaa) Para maacutes informacioacuten ver EjemploInteractivo de Autenticacioacuten (requiere instalacioacuten)
De encontrarse alguna inconsistencia el meacutetodo Conectar devolveraacute falso y en Excepcioacuten estaraacute el motivo deerror
No verifica el certificado (60 SSL certificate problem verify that the CAcert is OK Details error14090086SSLroutinesSSL3_GET_SERVER_CERTIFICATEcertificate verify failed)
bull
No verifica URL (51 SSL certificate subject namewsaahomoafipgovar does not match target host namewsaahomoafipgobar)
bull
El archivo de autoridades certificantes (paraacutemetro cacert) es incorrecto SSLError [Errno185090050] _sslc344 error0B084002x509 certificate
bull
Verificacioacuten del Canal de Comunicacioacuten Seguro 13
routinesX509_load_cert_crl_filesystem lib error (77 )SSLHandshakeError [ SSL CERTIFICATE_VERIFY_FAILED ] certifiacutecateverify failed (_sslc581 ) o WindowsError [Error 2] El sistema nopuede encontrar el archivo especificado IOError [Errno 2] No suchfile or directory (usar alternativamente confafip_ca_infocrt)
Se utiliza una libreriacutea de transporte distinta (pycurl) y posiblemente sea reemplazada en el futuro por lo querecomendamos dejar parametrizado este tema para evitar inconvenientes (pudiendo usar cualquier libreriacutea httpyo deshabilitar la comprobacioacuten de autoridad certificante al no pasarle los nuevos paraacutemetros a Conectarpara mantener compatibilidad con versiones anteriores yo en caso de que AFIP instale un certificadoincompatible en sus servidores)
Tabla comparativa Webservices
A continuacioacuten se presenta un resumen de webservices herramientas atributos y meacutetodos soportados
Caracteriacutestica WSFE v0 WSFE v1 v11 v2 v26 WSBFE v0 y v1 WSFEX v0 y v1 WSMTXCA
Normativa AFIP RG2485RG2485 RG2926 RG2959RG2975 RG3067 RG3571RG3668 RG3749 RG3779
RG2557 RG2758 RG3066RG3689 RG2904 RG2926 RG3536
Reacutegimen Mercado Internooriginal
Mercado interno (sin informardetalle)
Bono Fiscal - Bienes deCapital Exportacioacuten Mercado Interno (informar detalle
codificacioacuten de artiacuteculos)Clases de Facturas A B C M A B C M A B E A B
Sujetos comprendidos RI (obsoleto desde172011)
Responsables InscriptosExentos y MonotributoReacutegimen General
ResponsablesInscriptos inscriptos enla Secretariacutea deComercio
Exportadores inscriptosen los RegistrosEspeciales Aduaneros(V1 obligatorio desde31122011)
Responsables Inscriptos Notificadospor Juez Administrativo AFIP
Objeto COM(Windows) WSFE WSFEv1 WSBFE o WSBFEv1 WSFEX o WSFEXv1 WSMTXCA
Biblioteca COM(Windows) wsfedll wsfev1dll pyafipwsdll o
wsbfev1dllpyafipwsdll owsfexv1dll wsmtxdll
Modulo Python(Linux) wsfepy wsfev1py wsbfepy o wsbfev1py wsfexpy o wsfexv1py wsmtxpy
Herramienta siacutemilSIAPRECE(WindowsLinux)
receexe recepy rece1exe rece1py recebexe recebpy recexexe recexpy recemexe recempy
Informacioacuten General PyAfipWs Proyecto Version 1 Bonos FiscalesElectroacutenicos
Factura ElectroacutenicaExportacioacuten Proyecto Matrix
DocumentacioacutenTeacutecnica (Manual) WSFE WSFEv1 WSBFE WSFEX WSMTXCA
Nombre de servicioparaWSAACreateTRA
wsfe wsfe wsbfe wsfex wsmtxca
Meacutetodo Solicitud deAutorizacioacuten CAE oinformacioacuten deCAEA
Aut (CAE) CAESolicitar CAEARegInformativo
Authorize (CAE) Authorize (CAE) AutorizarComprobante InformarComprobanteCAEA
Tabla comparativa Webservices 14
Meacutetodos para CAEA(anticipado)
CAEASolicitarCAEAConsultar
SolicitarCAEAConsultarCAEAEntreFechasConsultarCAEA (emulado)
Campo ID(identificador uacutenico) en Aut en Authorize en Authorize
Reproceso siacute (realizado por AFIP) automaacutetico (emulado en lainterfaz) siacute (realizado por AFIP) siacute (realizado por AFIP) automaacutetico (emulado en la interfaz)
Campoproductosservicios presta_serv=SN concepto=123 tipo_expo=123 concepto=123
Campomonedacotizacioacuten moneda_id moneda_ctz imp_moneda_id
imp_moneda_ctz moneda_id moneda_ctz moneda_id moneda_ctz
MeacutetodoCrearFactura oAut
id presta_servtipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_totalimp_tot_concimp_neto impto_liqimpto_liq_rniimp_op_exfecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta
concepto tipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_total imp_tot_concimp_neto imp_iva imp_tribimp_op_ex fecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz
tipo_doc nro_doczona tipo_cbtepunto_vta cbte_nrofecha_cbte imp_totalimp_neto impto_liqimp_tot_concimpto_liq_rniimp_op_ex imp_percimp_iibbimp_perc_munimp_internosimp_moneda_idImp_moneda_ctz
tipo_cbte punto_vtacbte_nro fecha_cbteimp_total tipo_expopermiso_existentedst_cmp clientecuit_pais_clientedomicilio_clienteid_impositivomoneda_id moneda_ctzobs_comerciales obsforma_pago incotermsidioma_cbteincoterms_dsfecha_pago)
concepto tipo_doc nro_doctipo_cbte punto_vta cbt_desdecbt_hasta imp_total imp_tot_concimp_neto imp_subtotal imp_tribimp_op_ex fecha_cbtefecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz obs
MeacutetodoAgregarItem(detalle de artiacuteculo)
ncm sec ds qtyumed precio bonifiva_id imp_total
codigo ds qty umedprecio imp_total bonif
u_mtx cod_mtx codigo ds qtyumed precio bonif cod_ivaimp_iva imp_subtotal
MeacutetodoAgregarCbteAsoc(comprobantesasociados)
tipo_cbte pto_vta nro_cbteCUIT fecha
tipo_cbte pto_vtanro_cbte cuit_cbte tipo_cbte pto_vta nro_cbte fecha
MeacutetodoAgregarPermiso(permisos deembarque)
permiso_id pais_dst
MeacutetodoAgregarIVA(subtotales de aliacutecuotade iva)
iva_id base_imp importe iva_id base_imp importe
MeacutetodoAgregarTributo(otros impuestos)
tributo_id ds base_imp alicimporte tributo_id ds base_imp alic importe
Meacutetodo para consultarpuntos de ventahabilitados
ParamGetPtosVentaConsultarPuntosVentaCAEConsultarPuntosVentaCAEA
Meacutetodo pararecuperar un
CompConsultar GetCMP GetCMP ConsultarComprobante
Tabla comparativa Webservices 15
comprobanteMeacutetodo para obteneruacutetlimo nordmcomprobante
RecuperaLastCMP CompUltimoAutorizado GetLastCMP GetLastCMP CompUltimoAutorizado
Meacutetodos para obtenertablas de paraacutemetros
ParamGetTiposCbteParamGetTiposConceptoParamGetTiposDocParamGetTiposIvaParamGetTiposMonedasParamGetTiposOpcionalParamGetTiposTributosParamGetCotizacionParamGetPtosVenta
GetParamMonGetParamTipoCbteGetParamUMedGetParamTipoIVAGetParamNCM
GetParamMonGetParamTipoCbteGetParamTipoExpoGetParamIdiomasGetParamUMedGetParamIncotermsGetParamDstPaisGetParamDstCUITGetParamCtz
ConsultarComprobanteConsultarTiposComprobanteConsultarTiposDocumentoConsultarAlicuotasIVAConsultarCondicionesIVAConsultarMonedasConsultarUnidadesMedidaConsultarTiposTributoConsultarCotizacionMoneda
SEUO
Notas Generales
Convencioacuten de nombres si bien por transparencia se tratoacute de utilizar los nombres de los meacutetodosdefinidos en las especificaciones teacutecnicas se han cambiado los nombres de paraacutemetros y meacutetodosauxiliares para simplificar y unificar las interfaces manteniendo cierta coherencia entre los distintoswebservices por lo que algunas denominaciones internas pueden variar respecto a lasespecificaciones teacutecnicas de AFIP
bull
Esta tabla contiene un resumen de las consideraciones generales revisar la normativa vigenteespecificaciones y documentacioacuten teacutecnica actualizada para contemplar los casos particulares Ademaacutesse respetan las descripciones de servicios (WSDL) por ej si bien AFIP publica la especificacioacutenteacutecnica RG 2485 - Manual para el desarrollador V25 el webservice sigue siendo WSFEv1 ver RG 2485 - WSFEV1 - Manual para el desarrollador V26 RG 2904 - WSMTXCA - Manual para elDesarrollador - V02 RG 2758 - wsfex - Manual del desarrollador - V011 WSBFEV1 BonosFiscales Electroacutenicos Manual para el desarrollador V11
bull
Todas las facturas generadas en PDF o formatos similares pueden incluir el detalle de las operaciones(artiacuteculos coacutedigos descripcioacuten precio unitario etc) independientemente de lo que obligue ainformar AFIP en cada webservice No se podriacutea optar por utilizar el WSMTXCA (con detalleRG2904) si no ha recibido notificacioacuten por juez administrativo de AFIP en general corresponde elWSFEv1 (sin detalle RG2485 etal) para la mayoriacutea de los contribuyentes Para emitir facturas conCAEA (coacutedigo de autorizacioacuten electroacutenico anticipado) se deben cumplir ciertas condiciones(cantidad miacutenima de facturas por mes) en general solo aplicable a Auto-Impresores y GrandesContribuyentes
bull
La numeracioacuten de los comprobantes comienza de 1 por cada punto de venta y tipo de comprobante(no se comparten talonarios como con la facturacioacuten tradicional) Incluso cada webservicegeneralmente requiere dar de alta un punto de venta exclusivo No se puede continuar la numeracioacutenprevia ni de otro webservice
bull
La fecha de los comprobantes no puede ser anterior al uacuteltimo emitido pero generalmente se puedeautorizar facturas con fecha entre 5 a 10 diacuteas en el pasado o en el futuro por contingencias(dependiendo del webservice y si es servicios o productos) Ver meacutetodo de consultas y recupero decomprobantes No se podraacute emitir comprobantes antes de la fecha indicada en el formulario deEmpadronamiento (por ej si se eligioacute el inicio en Julio2015 no se pueden emitir facturas con fechade junio)
bull
En caso de inoperatividad del servidor de AFIP se deberiacutea emitir facturas tradicionales y presentar unformulario multinota en la agencia indicando las facturas realizadas manualmente y dejandoconstancia del motivo Para maacutes informacioacuten ver RG2485 Art 33
bull
Notas Generales 16
Se debe confirmar los temas de normativaslegislacioacuten con un Contador Puacuteblico Nacional debidamentehabilitado y con experiencia en el tema
Disclaimer - Aviso Legal
Toda informacioacuten es proporcionada a Titulo Informativo El programa es software libre liberado bajo licenciaGPLv3 y se entrega como estaacute sin garantiacuteas expliacutecitas ni implicitas de ninguacuten tipo incluyendo sin limitacioacutenpeacuterdida de ganancias interrupcioacuten de negocios peacuterdida de programas u otros datos en sistemas decomputacioacuten o cualquier otro reclamo Al usarlo acepta hacerlo bajo su propia responsabilidad conociendo lanormativa y reglamentaciones existentes
Instalacioacuten
Descargas
Bajar y Ejecutar el instalador
Importante ver Actualizaciones para novedades importantes instaladores y cambios recientes
Recomendado Instalador unificado (conteniendo la interfaz para todos los servicios web para homologacioacuten-solo evaluacioacutenpruebas-)
Windows 32 bits
PyAfipWs-272171-32bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSFEv1 WSMTXCAWSFEXv1WSBFEv1 WSCT WSFECred WSCDC WSCOC PyFEPDF PYI25 y PYEMAILWS_SR_Padron COT IIBB Arba Granos -WSLPG y WSCTG- Pecuarios- WSLSP WSLUMWSLTV Trazabilidad Medicamentos Trazabilidad de Productos Meacutedicos Trazabilidad dePrecursores Quiacutenicos Trazabilidad de Productos Agroquiacutemicos Fitosanitarios Trazabilidad deProductos Veterinarios) Recomendado para desarrolloevaluacioacuten
bull
PyAfipWs-271949-32bit+wsaa_211c+wsfev1_119a-typelibexe Instalador de desarrolloactualizado -para referenciar viacutea libreriacutea de tipos- (TypeLib) Soacutelo incluye WSAA y WSFEv1
bull
Windows 64 bits
PyAfipWs-271872-64bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSBFE WSFEv1 WSFEXv1WSMTXCA PyFEPDF PYI25 y PYEMAIL Granos -WSLPG y WSCTGv3- COT IIBB ArbaTrazabilidad Medicamentos y Agroquimicos) Recomendado para desarrolloevaluacioacuten
bull
Consultar por otros webservices y sistemas operativos
IMPORTANTE Los instaladores publicados son solo para evaluacioacuten por lo que pueden no estaractualizados con los uacuteltimos ajustes en los servidores yo ejemplos Ver instructivo Instalacioacuten Codigo Fuente( video explicativo) o consultar por soporte comercial
Los ejemplos completos del uso de la interfase en Visual Basic Visual Foxpro y otros lenguajes se puededescargar desde
Disclaimer - Aviso Legal 17
GitHub (repositorio actualizado) o Google Code (histoacuterico)bull
Para guias iniciales ver base de datos con ejemplos completos de WSFEv1 y WSFEX (implementacioacuten dereferencia)
factura_electronicamdb MS Access 2000 o sup programado en VBAbull pyafipwsmdb MS Access 97 programado en VBA (nuevo con FCE)bull pyafipws2kmdb MS Access 2000 o sup programado en VBA (versioacuten anterior)bull
IMPORTANTE las uacuteltimas versiones incorporan nuevas funcionalidades y deben ser testeadas con susistema antes de ser instaladas en produccioacuten De encontrar problemas de instalacioacuten (por causas del sistemaoperativo o similar) que impidan crear el objeto o conectarse al webservice se recomienda utilizar lasversiones anteriores o registrar manualmente los componentes de forma autoacutenoma con --register VerInstalacioacuten Manual para maacutes detalles Recordamos que este tipo de incidentes pueden ser consultados con elsoporte comercial o soporte comunitario ver Maacutes Informacioacuten
Incidencias Conocidas Dado que existen varias versiones dependiendo de que sistema operativo se utiliceen general no deberiacutea haber problemas de instalacioacuten pero puede haber cuestiones de permisos de acceso poliacuteticas de seguridad en algunos entornos Windows (por ej Permission Denied) En esos casosrecomendamos instalarlo como Administrador o darle permisos de modificacioacuten (Propiedades Solapa deSeguridad) al usuario del sistema operativo en la carpeta del componente (generalmente CArchivos deprogramaPyAfipWs o Program Files) Ver Permisos en Windows para mayor informacioacuten
Se recomienda desinstalar cualquier versioacuten anterior y borrar la carpeta de instalacioacuten para evitar archivostemporales residentes o temas similares
Instalacioacuten Manual Avanzada
Para la interfaz COM cada webservice tiene su DLL o EXE que puede ser instalado manualmente (norecomendado en general ya que no verifica si el archivo esta en uso no desinstala automaacuteticamente la versioacutenanterior entre otros temas que pudieran surgir)
Instalacioacuten manual pyafipwsexe --register o utlizar regsvr32 pyafipwsdllbull Desinstalacioacuten manual pyafipwsexe --unregister o utlizar regsvr32 upyafipwsdll
bull
El proceso es similar para instalar la interfaz a otros webservices (cambiando pyafipws por wsfev1wsfexv1 etc seguacuten corresponda por ej wsfexv1exe --register) Tambieacuten se puede registrardirectamente con python python wsaapy --register
Ambos comandos de instalacioacuten son similares pero instalan la interfaz de manera distinta
Embebida (InProcServer) registrando la biblioteca DLL con regsvr32 cuando se invoque a lainterfaz se carga en el mismo proceso del programa principal
bull
Independiente (LocalServer) ejecutando el programa EXE con --register cuando se invoque a lainterfaz se crea un nuevo proceso externo al programa principal (se veraacute el ejecutable por ej en eladministrador de tareas)
bull
NOTA solo es necesario registrar el EXE o la DLL (no ambas) En general es conveniente registrar las DLLpara que se cargue como una libreriacutea compartida embebida (InProcServer) y evitar temas de
Descargas 18
permisosfirewall ya que el EXE registra un proceso independiente (LocalServer) con sus implicancias(pueden surgir temas de permisosfirewall en ciertos sistemas operativos pero se ejecuta independientementeeliminando inconvenientes de dependencias y errores de carga)
Instalacioacuten Silenciosa (Desatendida)
Si bien el instalador muestra un asistente para la instalacioacuten (seleccioacuten del idioma licencia y directorioprogreso) es posible instalarlo sin intervencioacuten del usuario en segundo plano sin mostrar pantalla algunacon
instalador-PyAfipWs-125c-homoexe S D=CPyAfipWS
Las opciones son
S indica instalacioacuten silenciosabull D indica el directorio de instalacioacutenbull
Guiacutea de Instalacioacuten
La interfase se instala automaacuteticamente en CArchivos de Programa en el directorio elegido en elsegundo paso de instalacioacuten como se describe a continuacioacuten
Firma Digital (Editor Comprobado)
Como paso previo de seguridad al ejecutar el instalador verificar que el mismo haya sido firmado pornosotros debiendo aparecer
Editor Comprobado Sistemas Agiles (Mariano Reingart)bull
Consultar en caso de no comprobarse (o mencionar Editor Desconocido) ya que no seriacutea un instaladorcompilado originalmente por nosotros sin alteraciones
Paso 1 Seleccionar idioma
Idiomas disponibles I
Spanish espantildeol (predeterminado)bull English ingleacutesbull
Paso 2 Licencia
Para utilizar el software debe leer y aceptar la licencia
Paso 3 Direcorio de instalacioacuten
De manera predeterminada la interfaz se instalaraacute en una carpeta bajo el directorio estaacutendard de windows (porej CArchivos de Programa o CProgram Files) Se recomienda instalarla directamente en
Instalacioacuten Manual Avanzada 19
el directorio raiz (por ejCPYAFIPWS) para simplificar el acceso a las herramientas por linea de comandos
Paso 3 Finalizar instalacioacuten
Por uacuteltimo el instalador realizaraacute la instalacioacuten
Desinstalar versiones anterioresbull Crear el directorio de destinobull Extraer y copiar los archivosbull Crear desinstaladorbull Copiar configuracioacuten (RECEINI si corresponde)bull Registrar DLLbull
Puede ver el avance y estado final presionando el botoacuten Ver Detalles
Referenciar TypeLib
Ciertos instaladores (-typelib) incluyen una libreriacutea de tipos que es posible referenciar por ej en VB
Importante En general no es necesario referenciar el componente Invocando CreateObject deberiacuteafuncionar y devolveriacutea el objeto dinaacutemico en la mayoriacutea de los lenguajes de programacioacuten (VB VFP etc)
Maacutes informacioacuten
Soporte Comercial (asesoramiento inicial sin cargo de cortesiacutea -limitado y sin compromisos-)Web httpwwwsistemasagilescomartracwikiPyAfipWsdiams Por email facturaelectronicasistemasagilescomardiams Telefoacutenicamente (011) 4450-0716 y (011) 15-3048-921diams
bull
Soporte comunitario (gratuito)Sitio del proyecto httpwwwpyafipwscomardiams Grupo de noticiasdiscusiones httpgroupsgooglecomgrouppyafipwsdiams Coacutedigo Fuente httpsgithubcomreingartpyafipws (actual) y httpcodegooglecomppyafipws (histoacuterico)
diams
Incidencias httpsgithubcomreingartpyafipwsissuesdiams
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA)
Este servicio es necesario para acceder al resto de los servicios de negocios (ej Factura Electroacutenica) ofrecidospor la AFIP
Se debe generar un Ticket de Requerimiento de Acceso (TRA) firmarlo criptograacuteficamente (generando unmensaje CMS) que es enviacutea al servicio web para obtener un Ticket de Acceso (TA)
Esta interfase crea el mensaje en XML lo firma criptograacuteficamente y lo codifica en base-64 como lo requierela AFIP por lo que en general no es necesario realizar ninguno de estos pasos
Paso 3 Direcorio de instalacioacuten 20
Para maacutes informacioacuten oficial ver especificaciones teacutecnicas del WSAA y Arquitectura WS en el sitio de laAFIP
Importante es requerido tramitar los certificados para poder operar este webservice Para maacutes informacioacutenver Instructivos sobre Certificados
Objeto
El objeto COM se crea invocando a CreateObject(WSAA)bull
Meacutetodos
CreateTRA(service ttl) recibe el nombre del servicio (wsfe wsbfe wsfex wsctg etc) y eltiempo de vida (en segundos por defecto 2400) y devuelve un ticket de requerimiento de acceso(string con formato xml) Se puede revisar o modificar el xml devuelto (en general no es necesario)
bull
SignTRA(tra certificado clave_ privada passphrase) recibe el ticket derequerimiento de acceso (string con formato xml creado previamente) y las ubicaciones delcertificado y clave privada (o el contenido de los mismos) Firma el ticket y devuelve el mensaje CMS(string con formato xml) Importante El paraacutemetro opcional passphrase permite protejer la claveprivada por contrasentildea (Disponible a partir de la versioacuten 208) Tambieacuten se puede pasar el contenidode los archivos (como string) en certificado y clave_ privada (pudiendo ser guardados enla base de datos u otro tipo de almacenamiento)
bull
CallWSAA(cms url_webservice) Recibe el mensaje CMS (string con formato xml) y laURL del webservice Se conecta con el servidor remoto ejecuta el meacutetodo remoto LoginCMS ydevuelve el Ticket de Acceso (TA string con formato xml) generado por la AFIP Si no se especifiacutecaurl se utiliza servidores de homologacioacuten
bull
Conectar(cache url_webservice_wsdl proxy wrapper cacert) Nuevo Establece la conexioacuten con el servidor remoto recibe el directorio de archivos temporales la URL delWSDL (descripcioacuten del webservice) y proxy en formato usuarioclaveservidorpuerto Si no seespecifiacuteca url se utiliza servidores de homologacioacuten Parametros adicionales optativos wrapper es lalibreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor (CA)
bull
LoginCMS(cms) Nuevo Recibe el mensaje CMS (string con formato xml) ejecuta el meacutetodoremoto LoginCMS y devuelve el Ticket de Acceso (TA string con formato xml) generado por laAFIP Debe conectarse previamente con Conectar Establece los atributos Token Sign
bull
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido por defecto el ticket deacceso)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Expirado(fecha) Nuevo recibe una fecha (por defecto la fecha de expiracioacuten del uacuteltimo ticketde acceso generado) y verifica contra el reloj del equipo si dicha fecha ha expirado (en cuyo casodevuelve verdadero)
bull
Autenticar(service crt key [wsdl proxy wrapper cacert cachedebug]) Nuevo Meacutetodo unificado para obtener el ticket de acceso Almacena temporalmente elticket de acceso en un archivo en el directorio cache (debe tener permisos de escritura en esedirectorio) y automaacuteticamente lo reutiliza o solicita uno nuevo en caso de que no haya vencidoDisponible a partir de la versioacuten 207
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA) 21
Se recomienda comenzar a utilizar Conectar y LoginCMS en reemplazo de CallWSAA ya que los nuevosmeacutetodos tienen mejor manejo de errores pueden reutilizar la conexioacuten etc
Meacutetodos para Certificados
Los meacutetodos adicionales para el manejo de certificado permiten automatizar el procesamiento y generarpedidos de certificado directamente con este componente sin necesidad de utilizar comandos externosNuevo Disponible a partir de la versioacuten 210
AnalizarCertificado(crt) Carga un certificado digital y extrae los campos maacutesimportantes (establece propiedades Identidad Caducidad Emisor)
bull
CrearClavePrivada(self filename=privadakey key_length=2048pub_exponent=0x10001 passphrase=) Crea una clave privada (private key) necesariapara generar un certificado Queda referenciada internamente para poder crear el CSR (ver siguientemeacutetodo) por lo que las dos operaciones deben hacerse en la misma instancia Puede utilizarse unacontrasentildea (passphrase) para mayor seguridad (especialmente si la clave privada va a alojarse enuna carpeta compartida)
bull
CrearPedidoCertificado(self cuit= empresa=nombre=pyafipwsfilename=empresacsr) Crear un certificate signing request(X509 CSR) - pedido de certificado a gestionar por Clave Fiscal de AFIP para obtener el crt Se debeindicar el CUIT del representante nombre de la empresa (tal cual aparece en la constancia deinscripcioacuten) nombre de fantasia alias del certificado (identificando punto de venta sistema defacturacioacuten etc) y nombre del archivo a generar (recomendable ruta absoluta a una carpeta conpermisos de escritura)
bull
wsaaAnalizarCertificado(reingartcrt)print wsaaIdentidadprint wsaaCaducidad (Fecha de vencimiento)print wsaaEmisorprint wsaaCertX509
Por linea de comando puede ejecutarse el moacutedulo wsaapy con el meacutetodo --analizar
WSAA_cliexe --analizar reingartcrt reingartkey
Atributos
Token el el coacutedigo de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Sign el la firma de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Version versioacuten de la interfase (ej 16)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Identidad Caducidad Emisor CertX509 Nuevo campos del certificado analizado(actualizacioacuten 210 o posterior)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Meacutetodos 22
Ejemplo
Dim WSAA As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA)service = wsfe servicio a accederttl = 2400 tiempo de vida en segundostra = WSAACreateTRA(service ttl) Especificar la ubicacion de los archivos certificado y clavesPath = CurDir() + Certificado = reingartcrt certificado es el firmado por la afipClavePrivada = reingartkey clave privada usada para crear el cert
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
WSAALanzarExcepciones = False revisar Excepcion para controlar errores
Llamar al web service para autenticar anteriormente ta = WSAACallWSAA(cms httpswsaaafipgovarwsservicesLoginCms) Hologacioacuten ahora cache = Directorio para archivos temporales (dejar en blanco para usar predeterminado)wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl homologacioacutenproxy = usar usuarioclaveservidorpuertook = WSAAConectar(cache wsdl proxy)ta = WSAALoginCMS(cms) otener ticket de acceso
If WSAAExcepcion ltgt Then MsgBox WSAAExcepcion vbCritical ExcepcioacutenEnd If
Obtener Token y Sign de autorizacioacutenToken = WSAATokenSign = WSAASign
El Ticket de Acceso contiene el Token (coacutedigo) y Sign (firma) son los elementos que se utilizan en los otrosservicios web para lograr acceso a los mismos
Estos datos se pueden usar por un periacuteodo de tiempo (40 minutos modificable ver Reutilizacioacuten de Ticket deAcceso) siendo necesario volver a invocar el WSAA solo al finalizar este periacuteodo para obtener nuevos Tokeny Sign
Errores
El WSAA informa errores alfanumeacutericos (ErrNumber vbObjectError = 0) debiendo verificar la descripcioacuten(ErrDescription) Entre ellos los maacutes comunes son
cmscertexpired cmscertinvalid cmscertuntrusted El certificado no fue firmado por la AFIPexpiroacute es invaacutelido no se confiacutea en su emisor o no coincide la fuente Se debe revisar o emitircorrectamente los certificados Ver traacutemite de Generacioacuten
bull
xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid El tiempo degeneracioacutenexpiracioacuten es invaacutelido Debe sincronizar relojes con el servidor de la AFIP En Windows
bull
Ejemplo 23
propiedades del reloj habilitar Hora de Internet ingresar timeafipgovarwsnunavailable wsaaunavailable servicio no disponible momentaacuteneamentebull coenotAuthorized Computador no autorizado a acceder los servicios de AFIP Ver traacutemite deAsociacioacuten
bull
cmscertuntrusted Certificado no emitido por AC de confianza Revisar URL para ambiente correcto(produccioacutenhomologacioacuten) y Comprobacioacuten de Autenticacioacuten
bull
wsnnotFound Servicio informado inexistente se debe crear el ticket para un servicio vaacutelido (wsfewsfex etc)
bull
coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (verreutilizacioacuten del ticket de acceso abajo)
bull
Para maacutes errores frecuentes ver Falla SOAP WSAA
Reutilizacioacuten de Ticket de Acceso
Ante problemas de timeout y java socket read failed al intentar solicitar ticket de acceso (WSAA) ons1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (en generalpor sobrecarga o limitacioacuten de AFIP) es posible mitigar el tema reusando un ticket de acceso (token y sign)por hasta 12 hs (40 minutos por defecto) estableciendo el tiempo de vida del ticket pasandolo en el segundoparaacutemetro de CreateTRA (ttl en segundos en este manual esta documentado en secciones previas)
Por ej para un tiempo de vida de 10 hs (103600 segundos valor recomendado para evitar problemas desincronizacioacuten de relojes)
tra = WSAACreateTRA(wsfe 36000)
Luego de solicitar el ticket de acceso el Token y Sign puede ser usado por el periacuteodo especificado (dichosvalores pueden almacenarse en memoria en un archivo o base de datos etc)
Importante se puede guardar WSAAToken y WSAASign en una variable global y luego reutilizarlocada vez que se genera una factura
luego de llamara WSAALoginCMS o WSAACallWSAA o WSAAAutenticar
token = WSAATokensign = WSAASign
guardar token y sign en la base de datos archivo o una variable global
antes de llamar a WSFEv1CAESolicitar WSFEXv1Authorize o similar
WSFEv1Token = tokenWSFEv1Sign = sign
En general no es necesario verificar la fecha del ticket de acceso ya que en general es vaacutelido por 12 horas
Igualmente desde las versiones actualizadas de WSAA (202 o superior) es posible llamar al meacutetodoWSAAExpirado() antes de utilizar el ticket de acceso y este devolveraacute Verdadero si el ticket de accesosigue siendo vaacutelido (dada la fecha del reloj del equipo) o Falso si ha vencido su plazo y debe solicitarse unnuevo ticket de acceso
Errores 24
Por ejemplo luego de obtener el Token y Sign (ya sea por CallWSAA o LoginCMS) obtener y guardar lafecha de expiracioacuten
expiracion = WSAAObtenerTagXml(expirationTime)
Luego antes de usar el Token y Sign (por ej antes de llamar a WSFEv1 WSFEX etc) preguntar si el TA esvaacutelido (no ha expirado)
expiro = WSAAExpirado(expiracion)
Si expiro es True se debe generar otro ticket de acceso porque ha vencido su validez (con este meacutetodo sepuede guardar y verificar independientemente la fecha de expiracioacuten por cada servicio a usar wsfe wsfexwsbfe wsmtxca etc)
Si se comparte el certificado entre distintas maacutequinas o programas debe compartirse el ticket de acceso (porej guardandolo en un archivo o base de datos) y realizar esta verificacioacuten en cada instancia
Ejemplo completo en
reusar_ticket_accesobas (VB) y reusar_ticket_acceso_avanzadoprg (VFP) maacutes avanzadoguardando el TA en un archivo (y poder compartirlo por red o entre varios programas)
bull
reusar_ticket_accesoprg (VFP) y reusar_ticket_acceso_simplebas (VB) simplificado usando el TAen memoria
bull
Nota No es necesario guardar el ticket de acceso completo en un archivo para reutilizarlo Este ejemplo esuacutetil si se debe compartir el ticket entre diferentes programas u equipos en una red Si se usa en un soloprograma y este permanece abierto se puede mantener el valor del Token y Sign directamente en memoria(por ej en una variable) y reusarlo por hasta 12 hs (generalmente solicitandolo al iniciar el programa ymanteniendolo por una jornada de trabajo completa) Tambieacuten se podriacutea almacenar el valor de Token ySign en una base de datos o similar
Ejemplo simple reutilizacioacuten de TA
Ejemplo completo de reuso (usando el ticket de acceso en memoria)
Function Autenticar(TA as String = ) as String Procedimiento para autenticar con AFIP y reutilizar el ticket de acceso Llamar antes de utilizar WSAAToken y WSAASign (WSAA debe estar definido a nivel de moacutedulo)Dim ok expiracion solicitar token sign
cargar ticket de acceso previo (si no se mantiene WSAA instanciado en memoria)If TA ltgt Then
ok = WSAAAnalizarXml(TA)End If
revisar si el ticket es vaacutelido y no ha expirado expiracion = WSAAObtenerTagXml(expirationTime) DebugPrint Fecha Expiracion ticket expiracion
If IsNull(expiracion) Then solicitar = True solicitud inicial
Else solicitar = WSAAExpirado(expiracion) chequear solicitud previa
End If
Reutilizacioacuten de Ticket de Acceso 25
If solicitar Then Generar un Ticket de Requerimiento de Acceso (TRA)
tra = WSAACreateTRA()
uso la ruta a la carpeta de instalaciograven con los certificados de prueba ruta = WSAAInstallDir + DebugPrint ruta ruta
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra ruta + reingartcrt ruta + reingartkey) Cert Demo
ok = WSAAConectar( httpswsaahomoafipgovarwsservicesLoginCms) Homologacion
Llamar al web service para autenticar TA = WSAALoginCMS(cms)
Else DebugPrint no expirado Reutilizando
End If DebugPrint WSAAObtenerTagXml(destination)
Obtener las credenciales del ticket de acceso (desde el XML por si no se conserva el objeto WSAA) token = WSAAObtenerTagXml(token) sign = WSAAObtenerTagXml(sign)
Al retornar se puede utilizar token y sign para WSFEv1 o similar Devuelvo el ticket de acceso (RETURN) para que el programa principal lo almacene si es necesario
Autenticar = TAEnd Function
Importante en este caso WSAA debe ser un objeto global y persistente (al menos por lo que dure elprograma en produccioacuten) no se debe instanciar por cada llamada a Autorizar de lo contrario se perderaacuten elToken y Sign no reutilizando el ticket de acceso Si esto no es posible se debe persistir el Ticket de Accesoen un archivo o base de datos compartida
Ejemplo avanzado reutilizacioacuten de TA
Ejemplo completo de reuso (almacenando el ticket de acceso en un archivo tambieacuten podriacutea usarse una tablaen base de datos sesioacuten u otro medio durable)
inicializo las variablesToken = Sign =
busco un ticket de acceso previamente almacenadoIf Dir(taxml) ltgt Then
leo el xml almacenado del archivo Open taxml For Input As 1 Line Input 1 ta_xml Close 1
analizo el ticket de acceso previo ok = WSAAAnalizarXml(ta_xml)
If Not WSAAExpirado() Then puedo reusar el ticket de acceso
Token = WSAAObtenerTagXml(token) Sign = WSAAObtenerTagXml(sign)
End IfEnd If
Si no reuso un ticket de acceso solicito uno nuevoIf Token = Or Sign = Then
Ejemplo simple reutilizacioacuten de TA 26
Generar un Ticket de Requerimiento de Acceso (TRA) tra = WSAACreateTRA(wsfe 43200) 360012hs
Especificar la ubicacion de los archivos certificado y clave privada cert = reingartcrt certificado de prueba clave = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra cert clave)
If cms ltgt Then Llamar al web service para autenticar (cambiar URL para produccion)
wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl ok = WSAAConectar( wsdl) ta_xml = WSAALoginCMS(cms)
If ta_xml ltgt Then guardo el ticket de acceso en el archivo
Open taxml For Output As 1 Print 1 ta_xml Close 1
End If Token = WSAAToken Sign = WSAASign
End If reviso que no haya errores
DebugPrint Excepcion WSAAExcepcionIf WSAAExcepcion ltgt Then
DebugPrint WSAATracebackEnd If
End If
Imprimir los datos del ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint Token + TokenDebugPrint Sign + Sign
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA
Importante A partir de la actualizacioacuten 207 es posible utilizar el meacutetodo unificado Autenticar (queautomaacuteticamente contempla el tema de reutilizacioacuten al guardar el Ticket de Acceso en un archivo temporal enel directorio cache) en conjuncioacuten con SetTicketAcceso
Crear la instancia (usar CreateObject en VB y similares)wsaa = WSAA()
servidor de AFIP para homologacioacuten (cambiar para produccioacuten)wsaa_url = httpswsaahomoafipgovarwsservicesLoginCmswsdl
parametros opcionalesproxy = solo usar si hay servidor intermediowrapper = httplib2 (default) pycurl (depende proxy)cacert = confafip_ca_infocrt autoridades certificantes (servidores)cache = directorio archivos temporales (verificar permisos)debug = False depuracioacuten interna (en VB es palabra reservada usar otro nombre)
obtener el TA para pruebasta = wsaaAutenticar(wsfe reingartcrt reingartkey wsaa_url proxy wrapper cacert cache debug)
utilizar las credencialesprint wsaaTokenprint wsaaSign
establecer Ticket de Acceso en un solo paso (Nuevo meacutetodo)wsfev1SetTicketAcceso(ta)
Ejemplo avanzado reutilizacioacuten de TA 27
Nota dependiendo del sistema operativo deberaacute conceder permisos de acceso de escritura en la carpeta cachepara poder almacenar el ticket de acceso Tambieacuten es posible pasar el 8vo paraacutemetro cache de Autenticar conotro directorio para los archivos temporales Ver Permisos en Windows para maacutes informacioacuten
Obtencioacuten de Atributos Avanzados WSAA
En versiones recientes (204a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosdel ticket de acceso (uacutetiles para depuracioacuten y solucioacuten de errores)
Origen (Source) WSAAObtenerTagXml(source)bull Destino (Destination) WSAAObtenerTagXml(destination)bull ID Uacutenico WSAAObtenerTagXml(uniqueId)bull Fecha de Generacioacuten WSAAObtenerTagXml(generationTime)bull Fecha de Expiracioacuten WSAAObtenerTagXml(expirationTime)bull
Si ha ocurrido error (llamar previamente a WSAAAnalizarXml(XmlResponse) para analizar larespuesta)
Codigo de Fallo WSAAObtenerTagXml(faultcode)bull Mensaje de Fallo WSAAObtenerTagXml(faultstring)bull Servidor WSAAObtenerTagXml(ns3hostname)bull
Estos datos son uacutetiles para determinar problemas con el certificado ver Comprobacioacuten de AutenticacioacutenWSAA
Servicio Web de Factura Electroacutenica (WSFE)
Este servicio es ofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFE en el sitio de la AFIP
httpwswhomoafipgovarfiscaldocsWSFEWSFE-ManualParaElDesarrollador-090317pdf
Objeto
El objeto COM se crea invocando a CreateObject(WSFE)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA 28
UltNro() recuperar el uacuteltimo nuacutemero de transaccioacuten (id) Devuelve el uacuteltimo valor de secuenciautilizado al pedir autorizacioacuten Uso opcional
bull
Aut(id presta_serv tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto impto_liqimpto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago[fecha_serv_desde] [fecha_serv_hasta]) autoriza la emisioacuten de factura electroacutenicarecibe el id de secuencia (recuperado por UltNro) presta_serv en 1 si se esta facturando servicios (eneste caso es obligatorio el uso de la fecha de servicio desde y hasta) los datos de la factura a emitir ydevuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) Ver ejemplo para el detalle de losparaacutemetros
bull
RecuperaLastCMP(punto_venta tipo_comprobante) recibe el punto de venta y tipode comprobante (stringsenteros) devuelve el uacuteltimo nuacutemero de comprobante autorizado Usoopcional
bull
RecuperaQty() recupera cantidad maacutexima de registros de detalle (por el momento no es demayor utilidad ya que por simplicidad se enviacutea 1 registro de detalle por autorizacioacuten) Uso opcional
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Motivo Reproceso valores complementarios que retorna Autbull CbtDesde CbtHasta FechaCbte` nuacutemeros y fecha de comprobante autorizado queretorna Aut
bull
ImpTotal ImpNeto ImptoLiq` importes total neto e IVA que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 16)bull
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a realizar (ej Factura A solopara tipo_doc = 80 CUIT Facturas B por lote hasta $1000- etc)
bull
Ver especificaciones teacutecnicas del WSFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Meacutetodos 29
Ejemplo
Autorizar una factura electroacutenica nacional a modo de ejemplo (ficticia)
Crear objeto interface Web Service de Factura Electroacutenica
Set WSFE = CreateObject(WSFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEToken = WSAATokenWSFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSFECuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (servidor de homologacioacuten)ok = WSFEConectar(httpswswhomoafipgovarwsfeserviceasmx)
Llamo a un servicio tonto para obtener el estado (opcional)WSFEDummyDebugPrint appserver status WSFEAppServerStatusDebugPrint dbserver status WSFEDbServerStatusDebugPrint authserver status WSFEAuthServerStatus
Recupera cantidad maacutexima de registros (opcional)qty = WSFERecuperarQty()
Recupera uacuteltimo nuacutemero de secuencia IDLastId = WSFEUltNro()
Recupero uacuteltimo nuacutemero de comprobante (opcional)tipo_cbte = 1 punto_vta = 1LastCBTE = WSFERecuperaLastCMP(punto_vta tipo_cbte)
Establezco los valores de la factura o lote a autorizar 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000fecha_cbte = Fecha fecha_venc_pago = Fecha Fechas del periacuteodo del servicio facturado (solo si presta_serv = 1)fecha_serv_desde = Fecha fecha_serv_hasta = Fecha
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEAut(id presta_serv _ tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ impto_liq impto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desde fecha_serv_hasta) solo pasar si presta_serv=0MsgBox CAE amp cae amp Vencimiento amp WSFEVencimientoExit Sub
ManejoError Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipMsgBox ErrDescription vbCritical + vbRetryCancel _
Error amp (ErrNumber - vbObjectError) amp en amp ErrSource
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz (ver aclaracioacuten)
Ejemplo 30
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE)
Se debe llamar al meacutetodo Aut con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a UltNro puede utilizarse un dato local secuencial
bull
presta_serv 0 o 1 para indicar si es una factura de serviciosbull tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (1 Factura A 6 Factura B etc)bull punto_vta Nordm de punto de venta (debe estar autorizado)bull cbt_desde cbt_hasta Nordm de comprobante (si es un solo comprobante repetir Nordm)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 5 diacuteas)bull fecha_venc_pago Fecha liacutemite de vencimiento para el pago de la facturabull fecha_serv_desde fecha_serv_hasta Fechas del periacuteodo de servicios prestadobull
Ver todos los tipos de comprobante httpwswhomoafipgovarfiscaldocsWSFECodCpbtetxt
Ver todos los tipos de documentos httpwswhomoafipgovarfiscaldocsWSFECodDocIDtxt
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEResultado =A (Aceptado) y WSFEVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o los servidores de la AFIP no funcionan o nodevuelven la respuesta esperada
bull
cae = NULL El servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEResultado = R (Rechazado) y WSFEMotivo con los diversos motivos de rechazoproporcionados por el webservice
WSFEMotivo = 00 o NULL no hay error (solo como referencia)diams WSFEMotivo = 01 CUIT informada no es RIdiams WSFEMotivo = 02 CUIT no autorizada a facturar electroacutenicamentediams WSFEMotivo = 03 CUIT registra inconvenientes con domicilio fiscaldiams WSFEMotivo = 04 Punto de venta no se encuentra declaradodiams WSFEMotivo = 05 Fecha del comprobante incorrectadiams WSFEMotivo = 06 CUIT no puede emitir comprobantes clase Adiams WSFEMotivo = 07 para comprobantes clase A debe indicar CUITdiams WSFEMotivo = 08 CUIT informada es invaacutelidadiams WSFEMotivo = 09 CUIT informada no existe en el padroacutendiams WSFEMotivo = 10 CUIT informada no corresponde a un RIdiams WSFEMotivo = 11 el nordm de comprobante no es correlativo o fecha no correspondediams WSFEMotivo = 12 el rango informado se encuentra autorizadodiams WSFEMotivo = 13 LA CUIT INDICADA SE ENCUENTRA COMPRENDIDA EN ELREGIMEN ESTABLECIDO POR LA RESOLUCION GENERAL Ndeg 2177 YO EN ELTITULO I DE LA RESOLUCION GENERAL Ndeg 1361 ART 24 DE LA RG Ndeg 2177-
diams
bull
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE) 31
Para ver la lista completa de coacutedigos de motivos F136 httpwswhomoafipgovarfiscaldocsWSFEF136_MOTIVOStxt
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia En el caso de que la conexioacuten se interrumpa luego de que la AFIP registre la factura y antes deque la informacioacuten del CAE llegue al equipo la uacutenica alternativa es repetir la llamada a Aut con los mismosdatos (incluido el ID original) para obtener el CAE generado anteriormente En ese caso se WSFEReprocesoes S para indicar que el CAE se ha recuperado Por esto es importante guardar el ID o utilizar un dato local
Ver httpwswhomoafipgovarfiscaldocsWSFEWSFE-GuiaAdicionalParaElProgramadorpdf
Servicio Web de Bono Fiscal Electroacutenico (WSBFE)
EL WSBFE (Bonos Fiscales Electroacutenicos) es un Servicio Web de la AFIP para Facturas Electroacutenicas deBienes de Capital correspondiente al Artiacuteculo 3 de la Resolucioacuten General 25572009Este servicio esofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de cada item
A su vez el WSBFE devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva producto seguacuten NCM zonas unidades de medida Estas tablaspueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha devigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia delWSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSBFE en el sitio de la AFIP
httpwwwafipgovarwsWSBFEWSBFE-ManualParaElDesarrolladorpdf
httpwwwafipgovarwsWSBFEWSBFE-GuiaAdicionalParaElProgramadorpdf
La programacioacuten de la interfase WSBFE es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSBFE)bull
Servicio Web de Bono Fiscal Electroacutenico (WSBFE) 32
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(tipo_doc nro_doc zona tipo_cbte punto_vtacbte_nro fecha_cbte imp_total imp_neto impto_liq imp_tot_concimpto_liq_rni imp_op_ex imp_perc imp_iibb imp_perc_munimp_internos imp_moneda_id Imp_moneda_ctz) crea internamente una factura paraluego poder autorizarla recibe los datos de la factura a emitir Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarItem(ncm sec ds qty umed precio bonif iva_idimp_total) agrega internamente un item (linea de factura) a una factura para luego poderautorizarla recibe los datos del item a factura a emitir Ver ejemplo para el detalle de los paraacutemetros
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoIVA() GetParamUMed()GetParamNCM() recupera valores referenciales de coacutedigos de las tablas de paraacutemetros devuelveuna lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde- (verejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpNeto importe neto del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImptoLiq impuesto liquidado (IVA) del comprobante (del comprobante recuperado devuelto porGetCmp)
bull
Meacutetodos 33
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSBFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura de bienes de capital (bono fiscal electroacutenico) a modo de ejemplo (ficticia)
Dim WSAA As Object WSBFE As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSBFEtra = WSAACreateTRA(wsbfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada) Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten Una vez obtenido se puede usar el mismo token y sign por 24 horas
Crear objeto interface Web Service de Factura ElectroacutenicaSet WSBFE = CreateObject(WSBFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSBFEToken = WSAATokenWSBFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSBFECuit = 20267565393
Conectar al Servicio Web de Facturacioacutenok = WSBFEConectar(httpwswhomoafipgovarwsbfeserviceasmx) homologacioacuten
Establezco los valores de la factura a autorizarfecha = 20090530tipo_doc = 80 nro_doc = 23111111113zona = 0 Ver tabla de zonas
Errores 34
tipo_cbte = 1 Ver tabla de tipos de comprobantepunto_vta = 2 cbte_nro = 16fecha_cbte = fechaimp_total = 12100 imp_tot_conc = 000 imp_neto = 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000imp_perc = 000 imp_iibb = 000 imp_perc_mun = 000imp_internos = 000imp_moneda_id = 10 Ver tabla de tipos de monedaImp_moneda_ctz = 10000 cotizacioacuten de la moneda
Creo una factura (internamente no se llama al WebService)ok = WSBFECrearFactura(tipo_doc nro_doc _ zona tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total imp_neto impto_liq _ imp_tot_conc impto_liq_rni imp_op_ex _ imp_perc imp_iibb imp_perc_mun imp_internos _ imp_moneda_id Imp_moneda_ctz)
Agrego un itemncm = 73081000 Ver tabla de coacutedigos habilitados del NCMsec = Coacutedigo de la Secretariacutea (no usado por el momento)ds = Prueba Descripcioacuten completa del artiacuteculo (hasta 4000 car)umed = 1 kg Ver tabla de unidades de medidaqty = 10 cantidadprecio = 1050 precio neto (FacA) precio final (Facuras B)bonif = 500 descuentos (en positivo)iva_id = 5 21 ver tabla aliacutecuota de ivaimp_total = 12100 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSBFEAgregarItem(ncm sec ds qty umed precio bonif iva_id imp_total)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSBFEAuthorize(id)
If cae = Or WSBFEResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyElseIf WSBFEObs ltgt And WSBFEObs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyEnd If
MsgBox Resultado amp WSBFEResultado amp CAE amp cae amp _ Reproceso amp WSBFEReproceso amp _ Obs amp WSBFEObs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)
For Each evento In WSBFEEventosIf evento ltgt 0 Then
MsgBox Evento amp evento vbInformationEnd If
Next
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales del Nomenclador Comuacuten Mercosur habilitados
recupero tabla del nomenclador comuacuten del mercosur
Ejemplo 35
(codigo descripcioacuten (vigencia desde - hasta)) Ej 99999999 (item no incluiacutedo en el Beneficio Fiscal) (20070524 - 20091231)For Each x In WSBFEGetParamNCM() DebugPrint x Next
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSBFE)bull cbt_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull zona_id Zona (seguacuten tabla de paraacutemetros) - Por el momento 0bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull imp_moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull imp_moneda_ctz Cotizacioacuten de la moneda de la facturabull imp_perc Importe de las precepcionesbull imp_iibb Importe de las percepciones de ingresos brutosbull imp_perc_mun Importe de las percepciones municipalesbull imp_internos Importe de los impuestos internosbull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
ncm coacutedigo habilitado seguacuten el Nomenclador Comuacuten del Mercosur (NCM)bull sec coacutedigo de la secretariacutea (no utilizado por el momento pasar )bull ds Descripcioacuten completabull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull bonif Bonificacioacutenbull iva_id Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_total Importe total (incluyendo descuentos e IVA)bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEUltNro puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSBFEResultado =A (Aceptado) y WSBFEVencimiento Sino devuelve
Descripcioacuten de la obtencioacuten de CAE 36
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSBFEObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX)
EL WSFEX es un Servicio Web de la AFIP para Facturas Electroacutenicas de Exportacioacutencorrespondiente a la Resolucioacuten General 27582010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSBFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar los datos de exportacioacutenpermisos comprobantes asociados y el detalle de cada item
A su vez el WSFEX devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
Al igual que el WSBFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda idiomas terminos de comercio exterior paises y cuits unidades de medida etc Estastablas pueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen unafecha de vigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (adiferencia del WSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEX en el sitio de la AFIP
Manual para el desarrolladorpdf (version 0) Informacioacuten importante sobre la operatoriabull Manual para el desarrolladorpdf (version 1) Informacioacuten importante sobre la operatoria ( NuevaVersioacuten)
bull
FacturaElectronicaExportacion Informacioacuten general cambios ejemplos descargas y paraacutemetrosvigentes (puede estar ligeramente desactualizado)
bull
La programacioacuten de la interfase WSFEX es similar a WSBFE se recomienda revisarlo
WSFEX Versioacuten 1 (WSFEXv1)
Seguacuten RG306611 AFIP publicoacute una nueva versioacuten 1 (WSFEXv1) a entrar en vigencia obligatoria el31-12-2011 para maacutes informacioacuten ver Cambios WSFEXv1 respecto a WSFEXv0
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX) 37
Ambos webservices son muy similares por lo que se documenta en esta seccioacuten solo las diferenciasintroducidas
Importante Si bien se mantiene retrocompatibilidad para conectarse al nuevo webservice es necesarioutilizar el objeto WSFEXv1 y usar las nuevas URL
httpswswhomoafipgovarwsfexv1serviceasmxWSDL (homologacioacuten)bull httpsservicios1afipgovarwsfexv1serviceasmxWSDL (producciograven)bull
Aclaracioacuten WSFEXv1 es un nuevo webservice y AFIP ha agregado campos (bonificacioacuten) ha cambiadovarios tipos de datos (en importes cantidad de decimales) ha agregado coacutedigos de tablas de paraacutemetros(unidades de medida) y comprobantes asociados (remitos de tabaco) y ademaacutes realiza nuevas validacionespor lo que recomendamos probar exhaustivamente la interfaz con el desarrollo para exportacioacuten
Ajustes desarrollos de WSFEX a WSFEXv1
Si no utiliza las caracteriacutesticas nuevas es posible utilizar el coacutedigo desarrollado para WSFEX con nuestrainterfaz WSFEXv1
Coacutedigo Anterior (WSFEX)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEX)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar(httpswswhomoafipgovarwsfexserviceasmx) homologacioacuten
Coacutedigo Nuevo (WSFEXv1)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL) homologacioacuten
RECEX vs RECEX1
Por linea de comando tenemos disponible la herramienta RECEX1EXE que reemplaza a RECEXEXE yutiliza praacutecticamente el mismo formato de archivo y campos El nuevo formato esta documentado la seccioacutenRECEX1 - WSFEXv1
Objeto
El objeto COM se crea invocando a CreateObject(WSFEX) para Versioacuten 0 (hasta 30-12-2011)bull El objeto COM se crea invocando a CreateObject(WSFEXv1) para Versioacuten 1 (desde 31-12-2011)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica url se utiliza servidores de homologacioacuten Importante para WSFEXv1 los paraacutemetros soncache url proxy httpwrapper y cacert ver WSFEv1 Nuevo
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
WSFEX Versioacuten 1 (WSFEXv1) 38
CrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte imp_totaltipo_expo permiso_existente dst_cmp cliente cuit_pais_clientedomicilio_cliente id_impositivo moneda_id moneda_ctzobs_comerciales obs forma_pago incoterms idioma_cbteincoterms_ds fecha_pago) crea internamente una factura para luego poder autorizarlarecibe los datos de la factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importantefecha_pago se agrega en WSFEXv1 Modificado
bull
AgregarItem(ncodigo ds qty umed precio imp_total bonif) agregainternamente un item (linea de factura) a una factura para luego poder autorizarla recibe los datos delitem a factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importante bonif se agrega enWSFEXv1 Modificado
bull
AgregarPermiso(id dst) agrega internamente un permiso de exportacioacuten a una factura paraluego poder autorizarla recibe identificacioacuten y paiacutes destino de la mercaderia Ver ejemplo para eldetalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccuit_cbte_asoc) agrega internamente un comprobante asociado a una factura para luego poderautorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de losparaacutemetros Importante cuit_cbte_asoc se agrega en WSFEXv1 Nuevo
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoExpo()GetParamIdiomas() GetParamUMed() GetParamIncoterms()GetParamDstPais() GetParamDstCUIT() recupera valores referenciales de coacutedigos de lastablas de paraacutemetros devuelve una lista de strings con el idcoacutedigo o CUIT y descripcioacuten delparaacutemetro (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
GetParamCtz(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada como paraacutemetrobull GetParamMonConCotizacion(fecha) devuelve la cotizacioacuten consultada de la base de datosaduanera de todas las monedas que posean cotizacioacuten a la fecha indicada Nuevo
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Vencimiento fecha devuelta junto con el CAEbull CbteNro nuacutemero de comprobante (del comprobante autorizado)bull
Meacutetodos 39
FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull Version versioacuten de la interfase (ej 111)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Errores
La interfase procesa los errores WSFEX y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
500 Error interno DB - FEXGetLadt_CMP - get_last problemas internos de los servidores de AFIP(se debe esperar a que lo solucionen)
bull
Operation FEXGetLast_CMP not found in WSDL la URL que se estaacute utilizando no es correcta(verificar URL para el ambiente que se estaacute utilizando)
bull
505 Error general (lockeo) problemas internos de los servidores de AFIP (se debe esperar a que losolucionen)
bull
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSFEX para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura electroacutenica de exportacioacuten a modo de ejemplo (ficticia)
Dim WSAA As Object WSFEX As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEXtra = WSAACreateTRA(wsfex)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service para autenticar (Homologacioacuten)ta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms)
Atributos 40
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1) Setear tocken y sing de autorizacioacuten (pasos previos)WSFEXToken = WSAATokenWSFEXSign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEXCuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (homologacioacuten)ok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEXDummyDebugPrint appserver status WSFEXAppServerStatusDebugPrint dbserver status WSFEXDbServerStatusDebugPrint authserver status WSFEXAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 19 FC Expo (ver tabla de paraacutemetros)punto_vta = 7 Obtengo el uacuteltimo nuacutemero de comprobante y le agrego 1cbte_nro = WSFEXGetLastCMP(tipo_cbte punto_vta) + 1 16fecha_cbte = Format(Date yyyymmdd)tipo_expo = 1 tipo de exportacioacuten (ver tabla de paraacutemetros)permiso_existente = Ndst_cmp = 203 paiacutes destinocliente = Joao Da Silvacuit_pais_cliente = 50000000016domicilio_cliente = Rua 76 km 345 Alagoasid_impositivo = PJ54482221-lmoneda_id = 012 para reales DOL o PES (ver tabla de paraacutemetros)moneda_ctz = 05obs_comerciales = Observaciones comercialesobs = Sin observacionesforma_pago = 30 diasincoterms = FOB (ver tabla de paraacutemetros)idioma_cbte = 1 (ver tabla de paraacutemetros)imp_total = 25000
Creo una factura (internamente no se llama al WebService)ok = WSFEXCrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total tipo_expo permiso_existente dst_cmp _ cliente cuit_pais_cliente domicilio_cliente _ id_impositivo moneda_id moneda_ctz _ obs_comerciales obs forma_pago incoterms _ idioma_cbte incoterms_ds fecha_pago )
Agrego un itemcodigo = PRO1ds = Producto Tipo 1 Exportacion MERCOSUR ISO 9001qty = 2precio = 12500umed = 1 Ver tabla de paraacutemetros (unidades de medida)imp_total = 25000 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSFEXAgregarItem(codigo ds qty umed precio imp_total)
Ejemplo 41
Agrego un permiso (ver manual para el desarrollador)id = 99999AAXX999999Adst = 225 paiacutes destino de la mercaderiaok = WSFEXAgregarPermiso(id dst)
Agrego un comprobante asociado (ver manual para el desarrollador)tipo_cbte_asoc = 19punto_vta_asoc = 2cbte_nro_asoc = 1ok = WSFEXAgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc)
id = 99000000000100 nuacutemero propio de transaccioacuten obtengo el uacuteltimo ID y le adiciono 1 (advertencia evitar overflow y almacenar)id = CStr(CCur(WSFEXGetLastID()) + 1)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEXAuthorize(id)
Verifico que no haya rechazo o advertencia al generar el CAEIf cae = Or WSFEXResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyElseIf WSFEXobs ltgt And WSFEXobs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyEnd If
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato) si es posible almacenar para referencias futurasDebugPrint WSFEXXmlRequest DebugPrint WSFEXXmlResponse
MsgBox Resultado amp WSFEXResultado amp CAE amp cae amp _ Reproceso amp WSFEXReproceso amp _ Obs amp WSFEXobs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEXEventos
If evento ltgt 0 Then MsgBox Evento amp evento vbInformation
End IfNext
Recuperar la facturacae2 = WSFEXGetCMP(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEXFechaCbteDebugPrint Importe Total WSFEXImpTotal
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIPElse MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales de paiacuteses destino habilitados
Ejemplo 42
recupero tabla de coacutedigo de pais destino (codigo descripcioacuten) Ej 203 BRASILFor Each x In WSFEXGetParamDstPais() DebugPrint xNext
Ejemplo para obtener la fecha y cotizacioacuten de una moneda
busco la cotizacioacuten del dolar (ver Parametro Mon) Ej 20100708 3937moneda_id = DOLctz = WSFEXGetParamCtz(moneda_id)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_cbte coacutedigo de comprobante (19 Facturas de Exportacioacuten 20 Nota de Deacutebito por Operacionescon el Exterior 21 Nota de Creacutedito por Operaciones con el Exterior
bull
punto_vta Nordm de punto de venta (debe estar autorizado para WSFEX)bull cbte_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull imp_total Importe total de la facturabull tipo_expo Tipo de exportacion (1 Exportacioacuten definitiva de Bienes 2 Servicios 4 Otros)bull permiso_existente Indica si se posee documento aduanero de exportacioacuten (permiso de embarque)Posibles Valores S N NULL (vaciacuteo)
bull
dst_cmp Paiacutes de destino del comprobante (200 ARGENTINA 203 BRASIL 212 ESTADOSUNIDOS etc)
bull
cliente Apellido y Nombre oacute Razoacuten Social del compradorbull cuit_pais_cliente CUIT del paiacutes destinoContribuyente (Ej 50000000059 BRASIL - PersonaFxedsica 51600000059 BRASIL - Otro tipo de Entidad etc)
bull
domicilio_cliente Domicilio comercial clientebull id_impositivo Clave de identificacioacuten tributaria del compradorbull moneda_id Moneda de la factura (DOL Doacutelar Estadounidense PES Pesos Argentinos 012Real etc)
bull
moneda_ctz Cotizacioacuten de la moneda de la facturabull obs_comerciales observaciones comerciales (texto arbitrario)bull obs observaciones (texto arbitrario)bull forma_pago texto arbitrario (ej 30 diacuteas)bull incoterms clausula de venta terminos de comercio exterior (DAF DDP CIF FCA FAS DESCPT EXW CIP DDU FOB DEQ CFR)
bull
incoterms_ds informacioacuten adicional de terminos comercialesbull idioma_cbte idioma del comprobante 1 Espantildeol 2 Ingleacutes 3 Portugueacutesbull fecha_pago Fecha de pago (yyyymmdd)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
codigo coacutedigo del productobull ds Descripcioacuten completabull precio Precio Unitariobull
Descripcioacuten de la obtencioacuten de CAE 43
qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull imp_total Importe totalbull bonif bonificacion sobre el producto (importe)bull
Consideraciones especiales (soacutelo WSFEXv1 Nuevo )
Para descuentos utilizar umed 99 y los importes en negativo sin cantidad ni preciobull Para sentildeas o adelantos utilizar umed 97 y los importes en negativo o positivo (seguacuten corresponda)sin cantidad ni precio
bull
Para gratificaciones utilizar umed 0 sin importes cantidad ni preciobull Para bonificaciones por item el caacutelculo es precio qty - bonifbull
Adicionalmente se puede llamar al meacutetodo AgregarPermiso para detallar los permisos de embarque ydestinaciones de la mercaderiacutea con los siguientes paraacutemetros
id Coacutedigo de despacho Permiso de Embarque formato 99999AAXX999999A (donde XX podraacutenser nuacutemeros o letras)
bull
dst Paiacutes de destino de la mercaderiacuteabull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los permisos de embarque y destinacionesde la mercaderiacutea con los siguientes paraacutemetros
cbte_tipo Coacutedigo de tipo de comprobante (remitos solo WSFEXv1 Nuevo )bull cbte_punto_venta Punto de ventabull cbte_numero Numero de comprobantebull cbte_cuit CUIT emisor del comprobante (solo WSFEXv1 Nuevo )bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEXGetLastID puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEXResultado =A (Aceptado) y WSFEXVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSFXEResultado = R (Rechazado) y WSFEXObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
IMPORTANTE Revisar las especificaciones teacutecnicas de la AFIP en el Manual para el desarrolladorpdf porlo relativo a tablas de paraacutemetros meacutetodos adicionales y operatoria en general (incluyendo obligatoriedadformatos de los campos y validaciones)
Descripcioacuten de la obtencioacuten de CAE 44
Servicio Web de Factura Electroacutenica Mercado InternoVersioacuten 1 (WSFEv1)
EL WSFEv1 es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten B (sin detalle de factura) de la Resolucioacuten General 29042010 -RG248508 obligatorio a partir de 1-7-2011
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los impuestos(IVA) y tributos
A su vez el WSFEv1 devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva Estas tablas pueden sufrir modificaciones realizadas por la AFIP conaltas y bajas loacutegicas por lo que tienen una fecha de vigencia (desde hasta) y se proveen meacutetodos paraconsultarlas por el mismo servicio web (a diferencia del WSFE que las tablas eran documentadasestaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiProyectoWSFEv1
La programacioacuten de la interfase WSFEv1 es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSFEv1)bull
Meacutetodos
Meacutetodos baacutesicos de WSFEv1
Conectar(cache wsdl proxy wrapper cacert) realiza la conexioacuten a losservidores de la AFIP (primer paso esencial) Si no se especifica url del wsdl se utiliza servidores dehomologacioacuten El paraacutemetro cache es un directorio donde se almacenan internamente la descripcioacutendel servicio (archivo WSDL) para mayor optimizacioacuten Parametros adicionales optativos wrapper esla libreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor(CA)
bull
Servicio Web de Factura Electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 45
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto imp_ivaimp_trib imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz caea fecha_hs_gen) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetros
bull
AgregarIva(iva_id base_imp importe) agrega internamente un subtotal de IVA auna factura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible eimporte Ver ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(tributo_id Desc base_imp alic importe) agregainternamente un subtotal de tributo a una factura para luego poder autorizarla recibe los datos delimpuesto nacional provincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo parael detalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc cuitfecha) agrega internamente un comprobante asociado a una factura para luego poder autorizarlarecibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de los paraacutemetrosEl campo cuit fueacute agregado seguacuten FEv29 13-03-2017 disponible desde actualizacioacuten 119a yrefiere al CUIT emisor del comprobante asociado El campo fecha fueacute agregado seguacuten FEv21320-02-2019 disponible desde actualizacioacuten 122a y refiere a la fecha del comprobante asociado
bull
AgregarOpcional(opcional_id valor) agrega internamente un dato opcional a unafactura para luego poder autorizarla recibe el id del tipo de dato opcional y valor (dependiendo de sise trata de proyectos promovidos bienes usados RG 3411 DDJJ F8001 presuncioacuten de novinculacioacuten con la actividad gravada RG366814) Ver tabla de paraacutemetros Disponible desdeactualizacioacuten 115a
bull
AgregarComprador(doc_tipo=80 doc_nro=0 porcentaje=10000) agregainternamente un dato de comprador a una factura para luego poder autorizarla recibe el tipo dedocumento (80 CUIT) nuacutemero de documento y porcentaje (Bienes Usados Registrables RG 4109 E)Ver COMPG 210 Disponible desde actualizacioacuten 120a
bull
EstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura (ver paraacutemetros del meacutetodo CrearFactura) devuelve True siel campo pertenece al encabezado y se ha actualizado correctamente (ver ejemplo) Disponible desdeactualizacioacuten 116a
bull
ObtenerCampoFactura(campo [[campo2 [campo3]]) devuelve individualmente elvalor de un campo del encabezado u otras sub-estructuras de la factura (ver ejemplo) Uacutetil luego dellamara a CompConsultar Disponible desde actualizacioacuten 117a
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125b 200620
bull
Meacutetodos principales de WSFEv1
CAESolicitar() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo de AutorizacioacutenElectroacutenico (CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
CompConsultar(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle de los paraacutemetros yvalores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos baacutesicos de WSFEv1 46
CAEASolicitar(periodo orden) solicita un CAE Anticipado para la quincenacorrespondiente Devuelve cadena vacia si no se ha solicitado A partir de COMPGv26 estableceel campo Observaciones
bull
CAEAConsultar(periodo orden) recupera un CAE Anticipado emitido con anterioridadDevuelve cadena vacia si no se ha solicitado
bull
CAEARegInformativo informa un comprobante emitido con CAE Anticipado Se debe crear elcomprobante previamente con CrearFactura consignando el CAEA Actualiza los atributos(Resultado Obs etc) de manera similar a CAESolicitar Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
Meacutetodos alternativos para solicitud de muacuteltiples CAE
IniciarFacturasX() inicializa lista interna de facturas (comprobantes) para Solicitar muacuteltiplesCAE (llamar una uacutenica vez antes de CrearFacturaAgregarFacturaX)
bull
AgregarFacturaX() agrega el uacuteltimo comprobante cargado internamente con CrearFacturaa la lista para Solicitar muacuteltiples CAE
bull
CAESolicitarX() autoriza la emisioacuten de muacuteltiples facturas electroacutenicas (varios CAE porsolicitud) devuelve la cantidad de registros enviadosrecibidos a AFIP
bull
LeerFacturaX(indice) activa internamente una factura (dada su posicioacuten en la lista) pararevisar los datoss devuelto por AFIP usando ObtenerCampoFactura luego de haber llamado aCAESolicitarX
bull
Meacutetodos Auxiliares del webservice
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull ParamGetTiposMonedas() ParamGetTiposCbte() ParamGetTiposDoc()ParamGetTiposIva() ParamGetTiposOpcional() ParamGetTiposTributos()ParamGetTiposPaises() recupera valores referenciales de coacutedigos de las tablas de paraacutemetrosdevuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde-(ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros ParamGetTiposPaises agregadopara COMPGv26
bull
ParamGetCotizacion(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada comoparaacutemetro
bull
ParamGetPtosVenta() devuelve los puntos de venta autorizados para factura electroacutenicabull
Meacutetodos Utilitarios provistos por este componente
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Atributos
El componente tiene las siguientes propiedades que pueden ser consultadas o modificadas
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull
Meacutetodos principales de WSFEv1 47
AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull CAEA coacutedigo de autorizacioacuten anticipado (si corresponde)bull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTribimportes del comprobante
bull
ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull Reprocesar habilita reproceso automaacutetico (habilitado por defecto ver abajo)bull EmisitonTipo tipo de coacutedigo de autorizacioacuten (CAE o CAEA)bull
Errores
La interfase procesa los errores WSFEv1 y los almacena en las propiedades Errores y ErrCodeErrMsg (porej motivo de rechazo al intentar solicitar CAE) AFIP tambieacuten puede enviar errrores o advertencias por lacomo Observaciones propiedad Obs Se recomienda revisarlos luego de llamar a los Webservices
Ver ejemplos y especificaciones teacutecnicas del WSFEv1 para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ver Manejo de Excepciones para conocer las tecnicas para controlar las distintas excepciones que puedenocurrir (ver atributos Excepcion y Traceback en general por problemas de conectividad) y como proceder yalmacenar los mensajes XML para depuracioacuten y futuras consultas (atributos XmlRequest y XmlResponse)
Validaciones WSFEv1
AFIP realiza varias validaciones a los datos enviados muchas agregadas recientemente por lo que para evitarinconvenientes se recomienda revisar las siguientes validaciones y consideraciones generales
10063 Factura individual DocTipo 80 DocNro XXXXXXXXX no se encuentra inscripto encondicion ACTIVA en el impuesto Las facturas A solo pueden ser emitidas a ResponsablesInscriptos consignando el CUIT vaacutelido y registrado (tipo_doc=80)
bull
10014 Para facturas B (CbteDesde distinto a CbteHasta) el resultado de la operacioacuten ImpTotal (CbteHasta - CbteDesde + 1 ) debe ser menor a $1000 y 10015 Para facturas B (CbteDesde distintoa CbteHasta) menor a $1000 el campo DocNro deberaacute ser cero (0) y el campo DocTipo 99 Los lotesde facturas B menores a $1000- pueden ser emitidos a soacutelo a Consumidor Final (tipo_doc=99 ynro_doc=0) indicando el importe total del reango de facturas
bull
10043 El campo ImpTotConc (Importe Total del Concepto) para comprobantes tipo C debe ser iguala cero (0) y 10047 El campo ImpIVA (Importe de IVA) para comprobantes tipo C debe ser igual a
bull
Atributos 48
cero (0) 10071 Para comprobantes tipo C el objeto IVA no debe informarse Para emitir FacturasC no se informa iva ni imp_tot_conc ver caso especial Monotributo10048 El campo Importe Total ImpTotal debe ser igual a la suma de ImpTotConc + ImpNeto +ImpOpEx + ImpTrib + ImpIVA La sumatoria de los campos imp_neto impto_iva imp_op_eximp_tot_conc imp_trib contra imp_total no debe diferir en maacutes de 1 centavo (o 001)
bull
10051 Los importes informados en AlicIVA no se corresponden con los porcentajes La baseimponible por la aliacutecuota de IVA no debe diferir en maacutes de 1 centavo con el impuesto liquidado deIVA (para cada tasa ver AgregarIVA)
bull
10020 El campo BaseImp en AlicIVA es obligatorio y debe ser mayor a 0 cero Si el imp_neto es 0no se debe enviar subtotal de IVA ni para la tasa 0 (no usar AgregarIVA)
bull
10018Si ImpIva es igual a 0 el objeto Iva y AlicIva son obligatorios Id iva = 3 (iva 0) Si elimp_neto es ltgt0 y el iva liquidado es 0 se debe enviar coacutedigo de alicuota 3 (0) -por ej casoespecial de hacer factura de 1 centavo- Si no corresponde IVA (exento o no gravado) se debe enviarimp_iva NULO (vbNull null o similar) y no enviar aliacutecuotas
bull
Consideraciones especiales
Para emitir Facturas B a Responsables No Inscriptos debe informarse en Tributos el importecorrespondiente (ver AgregarTributo)
bull
Para factura E no corresponde este webservice por maacutes que sea a Tierra del Fuego Ver WSFEXbull imp_tot_conc debe utilizarse para los importes no gravados (por ej cheques rechazados)bull IVA 0 es distinto a No Gravado (seriacutea imp_tot_conc) o Exento (imp_op_ex) En esos casos no vaalicuota de iva e imp_iva = NULL y imp_neto = 0 (ver validaciones arriba)
bull
Si se usa IVA 0 en el subtotal de la aliacutecuota iva_id=3 se debe pasar base_imp = 100 e importe = 0Ademaacutes imp_neto = 100 (gravado aunque no liquide IVA)
bull
Recordamos que si la AFIP detecta una validacioacuten no obligatoria (por ej no corresponde emitir factura A)devolvera un mensaje (en el atributo WSFEv1Obs) y el IVA liquidado no puede computarse como creacuteditofiscal (la factura debe incorporar dichos mensajes)
Dependiendo del caso los mensajes de validacioacuten pueden ser enviados por AFIP tanto en WSFEv1Obs o enWSFEv1ErrMsg se deben revisar ambos campos
Nota estas consideraciones pueden variar en cada caso dependiendo de cada situacioacuten particular frente aAFIP Recomendamos consultar con el contador los aspectos legales y la normativa vigente
Ejemplo
Ejemplo Solicitud CAE WSFEv1
Autorizar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSFEv1 As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1tra = WSAACreateTRA(wsfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() +
Validaciones WSFEv1 49
Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service WSAA para autenticarcache = directorio temporal (usar predeterminado)url_wsdl = httpswsaahomoafipgovarwsservicesLoginCms usar wsaaafipgovar en produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSAAConectar(cache url_wsdl proxy wrapper)ta = WSAALoginCMS(cms)
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSFEv1 = CreateObject(WSFEv1)DebugPrint WSFEv1version
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEv1Token = WSAATokenWSFEv1Sign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEv1Cuit = 20267565393
Conectar al Servicio Web de Facturacioacutencache = directorio temporal (usar predeterminado)url_wsdl = httpswswhomoafipgovarwsfev1serviceasmxWSDL usar servicios1 para produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSFEv1Conectar(cache url_wsdl proxy) homologacioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEv1DummyDebugPrint appserver status WSFEv1AppServerStatusDebugPrint dbserver status WSFEv1DbServerStatusDebugPrint authserver status WSFEv1AuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4001cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta) + 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 20267565393cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Ejemplo Solicitud CAE WSFEv1 50
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
datos de compradores RG 4109-E bienes muebles registrables ()If False Then solo productos y si hay maacutes de un comprador ok = WSFEv1AgregarComprador(80 30500010912 9999) ok = WSFEv1AgregarComprador(80 30999032083 001)End If
Solicito CAEcae = WSFEv1CAESolicitar()
DebugPrint Resultado WSFEv1ResultadoDebugPrint CAE WSFEv1cae
DebugPrint Numero de comprobante WSFEv1CbteNro
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSFEv1XmlRequestDebugPrint WSFEv1XmlResponse
MsgBox Resultado amp WSFEv1Resultado amp CAE amp cae amp Venc amp WSFEv1Vencimiento amp Obs amp WSFEv1obs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEv1eventos MsgBox evento vbInformation EventoNext
Ejemplo Consultar CAE WSFEv1
Recuperar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia continua elejemplo anterior) CAE normal
Buscar la facturacae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEv1FechaCbteDebugPrint Fecha Vencimiento CAE WSFEv1VencimientoDebugPrint Importe Total WSFEv1ImpTotal
comparar con los datos del ejemplo anterior
Ejemplo Consultar CAE WSFEv1 51
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIP amp cae amp vs amp cae2Else MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
obtener datos del encabezado (a partir de actualizacioacuten 117a)cae = wsfev1ObtenerCampoFactura(cae)tipo_doc = wsfev1ObtenerCampoFactura(tipo_doc)nro_doc = wsfev1ObtenerCampoFactura(nro_doc)imp_total = wsfev1ObtenerCampoFactura(imp_total) obtener primer alicuota de IVAimp_iva1 = wsfev1ObtenerCampoFactura(iva 0 importe) obtener primer tributoimp_trib1 = wsfev1ObtenerCampoFactura(tributos 0 importe) obtener primer opcionalvalor_opcional1 = wsfev1ObtenerCampoFactura(opcionales 0 valor) obtener primer coacutedigo de observacion de AFIPobs_code1 = wsfev1ObtenerCampoFactura(obs 0 code) pruebo obtener el segundo mensaje de observacion inexistenteobs_code2 = wsfev1ObtenerCampoFactura(obs 1 msg)debugPrint wsfev1Excepcion El campo 1 solicitado no existe
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1
Ejemplo para obtener las tablas de parametros en este caso puntos de venta habilitados (uacutetil en produccioacutenpara verificar el acceso al webservice)
recupero tabla de paraacutemetros de punto de venta habilitado (3|EmisionTipoCAE|BloqueadoN|FchBajaNULL)For Each x In WSFEv1ParamGetPtosVenta() DebugPrint xNext
Ejemplo Solicitud CAEA y registro informativo WSFEv1
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE Anticipado
PASO 1 Solicito CAE Anticipado para el periacuteodo NOTA solicitar por uacutenica vez para un determinado periacuteodo consultar si se ha solicitado previamente
periodo = 201102 Antildeo y mesorden = 2 Segunda Quincena
consulto CAEA ya solicitadoCAEA = WSFEv1CAEAConsultar(periodo orden)If CAEA = Then
solicito nuevo CAEA CAEA = WSFEv1CAEASolicitar(periodo orden)End If
MsgBox Periodo amp periodo amp Orden amp orden amp vbCrLf amp CAEA amp CAEA amp vbCrLf amp _Obs amp WSFEv1Obs amp vbCrLf amp _Errores amp WSFEv1ErrMsg
Si no tengo CAEA terminoIf CAEA = Then End
PASO 2 Establezco los valores de la factura a informar
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1 52
tipo_cbte = 6punto_vta = 4005cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta)If cbte_nro = Then cbte_nro = 0 no hay comprobantes emitidosElse cbte_nro = CLng(cbte_nro) convertir a entero largoEnd Iffecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
creo una factura (con CAEA)ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz CAEA fecha_hs_gen)
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
Informo comprobante emitido con CAE anticipadocae = WSFEv1CAEARegInformativo()
DebugPrint Resultado WSFEv1Resultado
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura o completar el registro de encabezado (ver archivo deintercambio) con los siguiente paraacutemetros
Ejemplo Solicitud CAEA y registro informativo WSFEv1 53
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc seguacuten tabla de paraacutemetros de AFIP) y nuacutemero deDocumento del cliente (receptor de la factura) Usar tipo_doc=99 y nro_doc=0 para consumidoresfinales (Factura B lt $1000)
bull
tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSFE)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta generalmente el mismo nuacutemero si es unafactura individual o un rango si son Factura B lt $ 1000 a Consumidor Final -en este uacuteltimo caso seobtiene un uacutenico CAE para el lote-)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la factura (debe ser igual a la suma de imp_tot_conc + imp_op_ex +imp_neto + imp_iva + imp_trib)
bull
imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la factura (igual a la suma de base_imp para todas lasalicuotas)
bull
imp_iva Importe del IVA liquidado (igual a la suma de importe_iva para todas las aliacutecutoas) Enviarnull o similar si no corresponde y no se enviacutean subtotales por aliacutecuota
bull
imp_trib Importe de otros tributos (incluyendo percepciones de IVA retenciones IVA no inscriptoetc)
bull
imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros actualmente solo PES)bull moneda_ctz Cotizacioacuten de la moneda de la factura (actualmente solo 100)bull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull caea codigo de autorizacioacuten anticipado (si corresponde)bull
Luego por cada alicuota de IVA (excepto para no gravado y exento) se debe llamar al meacutetodo AgregarIva ocompletar el registro respectivo con los siguientes paraacutemetros
iva_id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros AFIP)bull base_imp base imponible (importe)bull importe_iva importe liquidado (base_imp por alicuota)bull
De existir otros tributos (percepcionesretenciones o similares) se debe llamar al meacutetodo AgregarTributo ocompletar el registro respectivo con los siguientes paraacutemetros
tributo_id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros AFIP)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc o completar el registro respectivo para detallar loscomprobantes asociados a una nota de creacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo CAESolicitar o CAEARegInformativo dependiendo de lamodalidad (o ejecutar el programa RECE1 si se esta utilizando la herramienta por linea de comando)
Descripcioacuten de la obtencioacuten de CAE CAEA 54
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEv1Resultado= A (Aceptado) y WSFEv1Vencimiento del CAE (fch_venc_cae) Sino devuelve cae = La interfase nopudo procesar la respuesta del WebService o bien la conexioacuten a internet esta caiacuteda las direcciones de losservidores son incorrectas o el servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEv1Resultado = R (Rechazado) y WSFEv1Obs (o WSFEv1ErrMsg) con los diversos motivos derechazo proporcionados por el webservice (ver WSFEMotivo)
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Como requisito previo para la modalidad CAE Anticipado se debe llamar a CAEASolicitar oCAEAConsultar con los datos del periodo y orden (antes de comenzar la quincena) para obtener el uacutenicoCAEA para los comprobantes del periacuteodo
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (CompConsultar) o usar la rutina deReproceso Automaacutetico incluida en este componente
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEV1 en el sitio de la AFIP
Minisitio Factura Electroacutenica AFIP informacioacuten generalbull Manual para el desarrolladorpdf Informacioacuten importante sobre la operatoriabull
Reproceso Automaacutetico
Importante En el caso de que la conexioacuten se interrumpa al llamar a CAESolicitar luego de que la AFIPregistre la factura y antes de que la informacioacuten del CAE llegue al equipo se debe llamada aCompConsultar con los paraacutemetros de la factura (tipo_cbte punto_vta cbte_nro) para recuperar el CAEgenerado anteriormente (ver ejemplo pseudocoacutedigo y por RECE1 get)
Este procedimiento puede ser realizado automaacuteticamente por la interfaz (de manera similar a como realizabaAFIP originalmente en WSFEv0) habilitando el atributo Reprocesar = True (valor predeterminado) conlo que la interfaz automaticamente
Solicita un nuevo CAE en caso de que no exista en los registros de la AFIPbull Consulta y obtiene el CAE anterior en caso de que ya exista en los registros de AFIPbull
En ese caso si se da un reprocesamiento automaacutetico como se mencionoacute en el primer parrafoWSFEReproceso se establece a S para indicar que el CAE se ha recuperado
Si bien no se utiliza un ID por lo que se minimizan los errores al reprocesar los comprobantes igualmente serecomienda revisar el atributo de Reproceso ya que un incorrecto uso puede generar inconvenientes alregistrar los comprobantes en AFIP Para ello la interfaz cuenta con los atributos CbteNro FechaCbteImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTrib o XmlRequest yXmlResponse que deben ser contrastados contra la informacioacuten enviada en el caso de interrupciones oinconvenientes en la comunicacioacuten (a partir de la versioacuten 107d si Reproceso = S la interfaz verificoacuteautomaacuteticamente todos los datos enviados con los registrados en la AFIP y estos concuerdan)
Se recomienda almacenar los datos en un medio durable para poder enviar la misma factura que fuera
Reproceso Automaacutetico 55
interrumpida salvo que se tenga certeza de que la misma no ha sido procesada por AFIP Especialmente sedeberiacutea guardar el nuacutemero de factura antes de solicitar CAE y no utilizar ult o el meacutetodoCompUltimoAutorizado para consultar el uacuteltimo nuacutemero de comprobante emitido ya que ante cualquierinterrupcioacuten se no se podriacutea recuperar los datos registrados en AFIP (o se podriacutean generar duplicados)
En siacutentesis al re-enviar los datos de un comprobante que por alguacuten motivo no ha devuelto CAE (cuando lacomunicacioacuten se ha interrumpido y no ha sido aceptado o rechazado formalmente con Resultado=A o R)se recomienda revisar el reproceso y los datos registrados (devueltos por la interfaz) o en su defectodeshabilitar Reprocesar con False e implementar un procedimiento propio de recuperacioacuten ante fallas
Si el reproceso estaacute habilitado no es necesario modificar la aplicacioacuten en caso de fallas simplementereintentar la solicitud de CAE o informacioacuten de CAEA y la interfaz realizaraacute los meacutetodos pertinentes seguacutense describioacute anteriormente
En caso de que no haya sido necesario reprocesar el requerimiento el atributo Reproceso quedaraacute vacioEn caso de que haya sido necesario reprocesar pero no ha sido exitoso (ocurrioacute un error o validacioacuten que nopermitioacute recuperar el CAE o los datos enviados no concuerdan con los registrados en AFIP) Reprocesoseraacute N y se informaraacute el error original
Lo expuesto anteriormente aplica tambieacuten a CAEA -anticipado- al informar los comprobantes emitidos(CAEARegInformativo)
En ambas ocasiones se puede consultar el atributo EmisionTipo que contiene CAE o CAEA dependiendodel caso
Nota El Reproceso automaacutetico estaacute incluido internamente en CAESolicitar y CAEARegInformativopor lo que estaacute disponible tanto en la biblioteca Python Interfaz COM la herramienta por liacutenea de comandoRECE1EXE y al aplicativo PyRece
Advertencia El Reproceso automaacutetico es una caracteriacutestica adicional propia de la interface por lo tantopuede sufrir variaciones o mejoras se recuerda que la informacioacuten expuesta en esta documentacioacuten aplica a lauacuteltima versioacuten de los instaladores
Factura C Monotributo Exento
Seguacuten RG 30672011 se adiciona la posibilidad de autorizar comprobantes clase C (monotributistas) aWSFEv1 (RG2485)
Seguacuten RG 37492015 se incluye a los sujetos exentos en el impuesto al valor agregado Para poder emitircomprobantes clase C ademaacutes de seguir las pautas sentildealadas en esta seccioacuten el punto de venta debe estardado de alta como Factura Electroacutenica - Exento en IVA - Web Services
Los siguientes coacutedigos de comprobantes (tipo_cbte) pueden ser utilizados en este caso
11 Factura Cbull 12 Nota de Deacutebito Cbull 13 Nota de Creacutedito Cbull 15 Recibo Cbull
Los requisitos fundamentales para poder validar un comprobante informado son las los siguientes
Factura C Monotributo Exento 56
Ingresar siempre imp_tot_conc = 01 Ingresar siempre imp_op_ex = 02 Ingresar siempre imp_iva = 03 Informar en imp_neto el importe subtotal de la factura4 No informar subtotales de IVA (AgregarIVA)5
Coacutedigo de Ejemplo
Establezco los valores de la factura a autorizartipo_cbte = 11punto_vta = 4002cbte_nro = 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 10000 imp_tot_conc = 000 imp_neto = 10000imp_iva = 000 imp_trib = 000 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 2 o 3)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Solicito CAECAE = WSFEv1CAESolicitar()
Documentacioacuten Oficial Facturacioacuten Electroacutenica RG 2485 Proyecto FE v25 - Manual para el desarrollador(Revisioacuten correspondiente al 01 de Abril de 2015)
Datos Opcionales AFIP WSFEv1
El componente permite enviar los datos opcionales requeridos por las diversas resoluciones de AFIP seguacuten latabla de paraacutemetros Disponible desde actualizacioacuten 115b
Datos opcionales para proyectos promovidos
WSFEv1AgregarOpcional(2 1234) identificador del proyecto
Datos opcionales para RG Bienes Usados 3411 (del vendedor)
WSFEv1AgregarOpcional(91 Juan Perez) Nombre y Apellido WSFEv1AgregarOpcional(92 200) Nacionalidad (coacutedigo de paiacutes)WSFEv1AgregarOpcional(93 Balcarce 50) Domicilio
Datos opcionales para RG 3668 Impuesto al Valor Agregado - Art12 (presuncioacuten de no vinculacioacuten con laactividad gravada FORM 8001)
WSFEv1AgregarOpcional(5 02) IVA Excepciones (01 LocadorPrestador 02 Conferencias 03 RG 74 04 Bienes de cambio 05 Ropa de trabajo 06 Intermediario)
Datos Opcionales AFIP WSFEv1 57
WSFEv1AgregarOpcional(61 80) Firmante Doc Tipo (80 CUIT 96 DNI etc)WSFEv1AgregarOpcional(62 20267565393) Firmante Doc NroWSFEv1AgregarOpcional(7 01) Caraacutecter del Firmante (01 Titular 02 DirectorPresidente 03 Apoderado 04 Empleado)
Datos opcionales para RG 3749 (RG 3368 Establecimientos de educacioacuten puacuteblica de gestioacuten privada)
WSFEv1AgregarOpcional(10 1) Actividad ComprendidaWSFEv1AgregarOpcional(1011 80) Tipo de Documento (titular del pago)WSFEv1AgregarOpcional(1012 20267565393) Nuacutemero de Documento (titular del pago)
Datos opcionales para RG4520
WSFEv1AgregarOpcional(5 01) Actividad
Datos opcionales para FEv213 (RG 4367 Factura de Creacutedito Electroacutenica MiPyMEs (FCE))
WSFEv1AgregarOpcional(2101 2850590940090418135201) CBUWSFEv1AgregarOpcional(2102 pyafipws) aliasWSFEv1AgregarOpcional(27 SCA) tipo de transmisioacuten (desde el 01042021) if tipo_cbte in (203 208 213) WSFEv1AgregarOpcional(22 S) Anulacioacuten
Obtencioacuten de Atributos Avanzados WSFEv1
En versiones recientes (112a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosde la respuesta (uacutetiles para depuracioacuten y solucioacuten de errores) con los meacutetodos AnalizarXml yObtenerTagXml
Ejemplo para recuperar datos puntuales de un comprobante emitido (moneda cotizacioacuten CUIT etc)
cae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)ok = WSFEv1AnalizarXml(XmlResponse)If ok Then
datos del encabezado DebugPrint CAE WSFEv1ObtenerTagXml(CodAutorizacion) WSFEv1CAE DebugPrint CbteFch WSFEv1ObtenerTagXml(CbteFch) WSFEv1FechaCbte DebugPrint Moneda WSFEv1ObtenerTagXml(MonId) DebugPrint Cotizacion WSFEv1ObtenerTagXml(MonCotiz) DebugPrint DocTipo WSFEv1ObtenerTagXml(DocTipo) DebugPrint DocNro WSFEv1ObtenerTagXml(DocNro)
ejemplos con arreglos (primer elemento = 0 segundo = 1 etc) DebugPrint Primer IVA (alci id) WSFEv1ObtenerTagXml(Iva AlicIva 0 Id) DebugPrint Primer IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 0 Importe) DebugPrint Segundo IVA (alic id) WSFEv1ObtenerTagXml(Iva AlicIva 1 Id) DebugPrint Segundo IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 1 Importe) DebugPrint Primer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 0 Desc) DebugPrint Primer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 0 Importe) DebugPrint Segundo Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 1 Desc) DebugPrint Segundo Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 1 Importe) DebugPrint Tercer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 2 Desc) DebugPrint Tercer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 2 Importe)End If
Obtencioacuten de Atributos Avanzados WSFEv1 58
Servicio Web de Factura Electroacutenica Mercado InternoPrograma Matrix (WSMTXCA)
EL WSMTXCA es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten A (con detalle de factura) de la Resolucioacuten General 29042010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYY-MM-DD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los artiacuteculos losimpuestos (IVA) y tributos (similar a WSFEX y WSBFE)
A su vez el WSMTXCA devuelve mensajes de eventos (mantenimiento programado advertencias etc) losque deben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva tributos unidades de medida Estas tablas pueden sufrirmodificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha de vigencia(desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia del WSFE quelas tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiFacturaElectronicaMTXCAService
La programacioacuten de la interfase WSMTXCA es similar a WSFE WSFEX WSBFE y WSFEv1 serecomienda revisarlos
Objeto
El objeto COM se crea invocando a CreateObject(WSMTXCA)bull
Meacutetodos
Meacutetodos principales
Conectar(cache wsdl proxy) realiza la conexioacuten a los servidores de la AFIP (primerpaso esencial) Si no se especifica url del wsdl se utiliza servidores de homologacioacuten El paraacutemetrocache es un directorio donde se almacenan internamente la descripcioacuten del servicio (archivo WSDL)para mayor optimizacioacuten Proxy es un string con la informacioacuten del servidor intermediousuarioclaveservidorpuerto
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto
bull
Servicio Web de Factura Electroacutenica Mercado Interno Programa Matrix (WSMTXCA) 59
imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pagofecha_serv_desde fecha_serv_hasta moneda_id moneda_ctz obs) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetrosEstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura devuelve True si el campo pertenece al encabezado y se haactualizado correctamente (ver ejemplo)
bull
AgregarIva(id base_imp importe) agrega internamente un subtotal de IVA a unafactura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible e importeVer ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(id Desc base_imp alic importe) agrega internamente unsubtotal de tributo a una factura para luego poder autorizarla recibe los datos del impuesto nacionalprovincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccbte_cuit fecha) agrega internamente un comprobante asociado a una factura para luegopoder autorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detallede los paraacutemetros El campo cuit fueacute agregado seguacuten Release v05 15-03-2017 disponible desdeactualizacioacuten 113a El campo fecha fue agregado en Realse v010 01072019
bull
AgregarItem(u_mtx cod_mtx codigo ds qty umed precio bonifcod_iva imp_iva imp_subtotal) agrega internamente un item (linea de factura) a unafactura para luego poder autorizarla recibe los datos del item a factura a emitir Ver ejemplo para eldetalle de los paraacutemetros
bull
EstablecerCampoItem(campo valor) establece individualmente el valor de un campo deldetalle de la factura (uacuteltimo item agregado) devuelve True si el campo pertenece al encabezado y seha actualizado correctamente (ver ejemplo)
bull
AutorizarComprobante() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo deAutorizacioacuten Electroacutenico (CAE) Ver ejemplo
bull
AutorizarAjusteIVA() autoriza un ajuste de IVA (notas de creacutedito deacutebito) Se debe informarel coacutedigo 7790001001139 e informar solo el importe de IVA ajustado
bull
SolicitarCAEA(periodo orden) permite obtener un CAEA y su respectivo periacuteodo devigencia (fecha de validez desde y fecha de validez hasta)
bull
ConsultarCAEA(periodo orden caea) permite consultar la informacioacutencorrespondiente a un CAEA previamente otorgado (recibe periacuteodoorden o CAEA)
bull
InformarComprobanteCAEA() enviacutea la informacioacuten del comprobante emitido y asociado a unCAEA (ver AutorizarComprobante)
bull
InformarAjusteIVACAEA() enviacutea la informacioacuten del comprobante de ajuste de IVA emitidospara un CAEA (ver AutorizarAjusteIVA)
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125a 200620
bull
Meacutetodos secundarios
ConsultarComprobante(tipo_cbte punto_vta cbte_nro) recupera los datos deuna factura autorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobanteoriginal y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vezestablece los datos de la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle delos paraacutemetros y valores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos 60
ConsultarMonedas() ConsultarTiposComprobante()ConsultarTiposDocumento() ConsultarAlicuotasIVA()ConsultarCondicionesIVA() ConsultarUnidadesMedida()ConsultarTiposTributo() recupera valores referenciales de coacutedigos de las tablas deparaacutemetros devuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -sicorresponde- (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
ConsultarCotizacionMoneda(moneda_id) devuelve cotizacioacuten y fecha de la monedaindicada como paraacutemetro
bull
ConsultarPuntosVentaCAE() permite consultar los puntos de venta habilitados para CAE eneste WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPuntosVentaCAEA() permite consultar los puntos de venta habilitados para CAEAen este WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPtosVtaCAEANoInformados(caea) permite consultar que puntos de venta auacutenno fueron informados para un CAEA determinado devuelve una lista (array de strings) con los datosdel numero_punto_venta
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importes del comprobantebull ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull
Errores
La interfase procesa los errores WSMTXCA y los almacena en las proipedades Errores y ErrCodeErrMsgVer especificaciones teacutecnicas del WSMTXCA para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ejemplo
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSMTXCA As Object
Atributos 61
On Error GoTo ManejoError
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSMTXCAtra = WSAACreateTRA(wsmtxca)DebugPrint tra
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)DebugPrint cms
Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten (cambiar para produccioacuten)
Imprimir el ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint taDebugPrint Token WSAATokenDebugPrint Sign WSAASign
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSMTXCA = CreateObject(WSMTXCA)DebugPrint WSMTXCAversion
Setear tocken y sing de autorizacioacuten (pasos previos)WSMTXCAToken = WSAATokenWSMTXCASign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSMTXCACuit = 20267565393
Conectar al Servicio Web de FacturacioacutenWSDL = httpsserviciosjavaafipgovarwsmtxcaservicesMTXCAServicewsdlok = WSMTXCAConectar( WSDL) produccioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSMTXCADummyDebugPrint appserver status WSMTXCAAppServerStatusDebugPrint dbserver status WSMTXCADbServerStatusDebugPrint authserver status WSMTXCAAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4000cbte_nro = WSMTXCACompUltimoAutorizado(tipo_cbte punto_vta)fecha = Format(Date yyyy-mm-dd)concepto = 3tipo_doc = 80 nro_doc = 30000000007cbte_nro = CLng(cbte_nro) + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000
Ejemplo 62
imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs = Observaciones Comerciales libre
ok = WSMTXCACrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz obs)
Agrego los comprobantes asociadosIf False Then solo si es nc o nd tipo = 19 pto_vta = 2 nro = 1234 ok = WSMTXCAAgregarCmpAsoc(tipo pto_vta nro)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSMTXCAAgregarTributo(id Desc base_imp alic importe)
Agrego subtotales de IVAid = 5 21base_im = 10000importe = 2100ok = WSMTXCAAgregarIva(id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890codigo = P0001ds = Descripcion del producto P0001qty = 10000umed = 7precio = 10000bonif = 000cod_iva = 5imp_iva = 2100imp_subtotal = 12100ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx DESC Descuento 0 _
99 0 0 cod_iva -2100 -12100)
Solicito CAEcae = WSMTXCAAutorizarComprobante()
verifico que no haya erroresFor Each er In WSMTXCAErrores MsgBox er vbInformation ErrorNext
Ejemplo 63
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSMTXCAXmlRequestDebugPrint WSMTXCAXmlResponse
MsgBox Resultado amp WSMTXCAResultado amp CAE amp cae amp _ Venc amp WSMTXCAVencimiento amp Obs amp WSMTXCAobs _
vbInformation + vbOKOnly
Ejemplo para obtener coacutedigos referenciales (tabla moneda)
recupero tabla de paraacutemetros de moneda (id descripcioacuten)For Each x In WSMTXCAConsultarMonedas() DebugPrint xNext
busco la cotizacioacuten del dolar (ver Param Mon)ctz = WSMTXCAConsultarCotizacionMoneda(DOL)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSMTX factura electroacutenica con detalle)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta ambos el mismo nuacutemero si es una facturaindividual)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull imp_subtotal subtotal sin ivabull imp_trib Importe de otros tributosbull imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull moneda_ctz Cotizacioacuten de la moneda de la facturabull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull obs observaciones comerciales (campo libre)bull caea debe completarse si se informa una factura en esta modalidad (obtenido con SolicitarCAEA)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
u_mtx cantidad de unidades(ej 123456)bull cod_mtx codigo mtx del producto (ej 1234567890)bull codigo codigo opcional del producto (ej P0001)bull ds Descripcioacuten completabull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull
Descripcioacuten de la obtencioacuten de CAE CAEA 64
bonif Bonificacioacutenbull cod_iva Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_iva importe liquidado de IVAbull imp_subtotal = Importe total (incluyendo descuentos e IVA)bull
Para items descriptivos utilizar umed = 0 Para anticipos o descuentos utilizar umed = 99
Por cada alicuota de IVA se debe llamar al meacutetodo AgregarIva con los siguientes paraacutemetros
id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull base_imp base imponible (importe)bull importe importe liquidadobull
De existir otros tributos se debe llamar al meacutetodo AgregarTributo con los siguientes paraacutemetros
id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los comprobantes asociados a una nota decreacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobantebull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo AutorizarComprobante o InformarComprobanteCAEA
Si no hubiere inconvenientes la llamada debe devolver el CAE CAEA y se establece el atributoWSMTXCAResultado = A (Aceptado) y WSMTXCAVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSMTXCAObscon los diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (ConsultarComprobante)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSMTX en el sitio de la AFIP
Manual Desarrollador Informacioacuten importante sobre la operatoriabull
Descripcioacuten de la obtencioacuten de CAE CAEA 65
Establecer campos individualmente (ejemplo WSMTXCA)
Para lenguajes que no soporten el pasaje de varios parametros a un meacutetodo (por ej SERVOY por sulimitacioacuten de 6 argumentos) desde la versioacuten 106a es posible crear la factura en blanco (todos los camposvacios) y luego establecer los campos individualmente
ok = WSMTXCACrearFactura()ok = WSMTXCAEstablecerCampoFactura(concepto concepto)ok = WSMTXCAEstablecerCampoFactura(tipo_doc tipo_doc)ok = WSMTXCAEstablecerCampoFactura(nro_doc nro_doc)ok = WSMTXCAEstablecerCampoFactura(tipo_cbte tipo_cbte)ok = WSMTXCAEstablecerCampoFactura(punto_vta punto_vta)ok = WSMTXCAEstablecerCampoFactura(cbt_desde cbt_desde)ok = WSMTXCAEstablecerCampoFactura(cbt_hasta cbt_hasta)ok = WSMTXCAEstablecerCampoFactura(imp_total imp_total)ok = WSMTXCAEstablecerCampoFactura(imp_tot_conc imp_tot_conc)ok = WSMTXCAEstablecerCampoFactura(imp_neto imp_neto)ok = WSMTXCAEstablecerCampoFactura(imp_subtotal imp_subtotal)ok = WSMTXCAEstablecerCampoFactura(imp_trib imp_trib)ok = WSMTXCAEstablecerCampoFactura(imp_op_ex imp_op_ex)ok = WSMTXCAEstablecerCampoFactura(fecha_cbte fecha_cbte)ok = WSMTXCAEstablecerCampoFactura(fecha_venc_pago fecha_venc_pago)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_desde fecha_serv_desde)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_hasta fecha_serv_hasta)ok = WSMTXCAEstablecerCampoFactura(moneda_id moneda_id)ok = WSMTXCAEstablecerCampoFactura(moneda_ctz moneda_ctz)ok = WSMTXCAEstablecerCampoFactura(observaciones Obs)ok = WSMTXCAEstablecerCampoFactura(caea CAEA)ok = WSMTXCAEstablecerCampoFactura(vencimiento vencimiento)
Para los items de detalle seriacutea similar
ok = WSMTXCAAgregarItem()ok = WSMTXCAEstablecerCampoItem(u_mtx u_mtx)ok = WSMTXCAEstablecerCampoItem(cod_mtx cod_mtx)ok = WSMTXCAEstablecerCampoItem(codigo codigo)ok = WSMTXCAEstablecerCampoItem(ds ds)ok = WSMTXCAEstablecerCampoItem(qty qty)ok = WSMTXCAEstablecerCampoItem(umed umed)ok = WSMTXCAEstablecerCampoItem(precio precio)ok = WSMTXCAEstablecerCampoItem(bonif bonif)ok = WSMTXCAEstablecerCampoItem(iva_id cod_iva)ok = WSMTXCAEstablecerCampoItem(imp_iva imp_iva)ok = WSMTXCAEstablecerCampoItem(imp_subtotal imp_subtotal)
Interfase por archivos de texto siacutemil SIAP - RECE
Para lenguajes donde no es posible utilizar objetos COM se desarrolloacute una interfaz de texto (command lineinterfase) para poder utilizar los Web Services de la AFIP que funciona como un programa independientemanteniendo las ventajas y caracteriacutesticas presentadas anteriormente
Formatos de archivos de intercambio soportados
Archivos TXT de Texto plano estilo COBOL y aplicativos SIAP AFIPbull Tablas DBF para dBase III Fox Clipper Harbour (xBase) etcbull Formato JSON para lenguajes de programacioacuten maacutes modernos (PHP JAVA JavaScript etc)bull
Establecer campos individualmente (ejemplo WSMTXCA) 66
La herramienta es multiplataforma (LinuxWindows)
Ver secciones anteriores sobre la descripcioacuten de las opciones de configuracioacuten campos y procedimientos
Consideraciones Generalesbull Autenticacioacuten (WSAA) ticket de acceso certificados y claves privadasbull Gestioacuten de CAE (WSFEv1) mercado interno sin detalle (version 1)bull Gestioacuten de CAE (WSMTXCA) mercado interno con detalle (matrix)bull Gestioacuten de CAE (WSFEX) exportacioacutenbull
Configuracioacuten
Editar el archivo RECEINI en la carpeta de la intefase (CPYAFIPWS)
CERT ubicacioacuten del archivo certificado (ver WSAA)bull PRIVATEKEY ubicacioacuten del archivo de la clave privada (ver WSAA)bull CUIT CUIT del emisorbull ENTRADA ubicacioacuten del archivo de texto de entrada (para cada webservice)bull SALIDA ubicacioacuten del archivo de texto de salida (para cada webservice)bull URL direccioacuten de los servicios web de produccioacuten (para cada webservice)bull Seccion [DBF] configura los nombres de archivos con las tablas requeridasbull
Ejemplo
[WSAA]CERT=CSISTEMAempresacrtPRIVATEKEY= CSISTEMAempresakeyURL=httpswsaaafipgovarwsservicesLoginCmswsdl[WSFEv1]CUIT=30000000000CBU=2222222222222222222222ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
[WSMTXCA]CUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtReprocesar= SURL=httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAService
[WSBFE] aplica tambieacuten a WSBFEv1CUIT=30000000000ENTRADA= CSISTEMAentradatxtSALIDA= CSISTEMAsalidatxtURL=httpsservicios1afipgovarwsbfev1serviceasmxWSDL
[WSFEXv1] aplica tambieacuten a WSFEXCUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfexv1serviceasmxWSDL
Interfase por archivos de texto siacutemil SIAP - RECE 67
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalles = detallesdbfDatos Opcionales = opcionalesdbf
Seccioacuten [WSAA]
Configuracioacuten referente al web service de autenticacioacuten
CERT ubicacioacuten del archivo que contiene el certificadobull PRIVATEKEY ubicacioacuten de la clave privada correspondiente al certificadobull URL direccioacuten del servidor de AFIP Por ej para produccioacuten httpswsaaafipgovarwsservicesLoginCmswsdl
bull
Seccioacuten [WSFEv1]
Configuracioacuten referente al web service de factura nacional
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfev1serviceasmxWSDL
bull
Seccioacuten [WSFEX]
Configuracioacuten referente al web service de factura exportacioacuten
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfexserviceasmx
bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull
Seccioacuten [PROXY]
Configuracioacuten referente al servidor intermedio de salida a internet (firewall antivirus proxy etc) ej
Configuracioacuten 68
HOST = localhostbull PORT = 8000bull USER = marianobull PASS = reingartbull
NOTA solo debe configurarse esta seccioacuten si corresponde contactar al administrador de red de la empresapara determinar los paraacutemetros correctos de cada caso Para maacutes informacioacuten ver Errores de Conectividad
Formato de archivos de entrada y salida
Factura electroacutenica normal (WSFE)
El formato utilizado es similar a RECE pero extendido con algunos campos necesarios para utilizar losServicios Web A continuacioacuten se detalla nombre del campo posicioacuten inicial longitud y tipo
fecha_cbte (28A)bull tipo_cbte (102N)bull punto_vta (134N)bull cbt_desde (178N)bull cbt_hasta (258N)bull tipo_doc (362N)bull nro_doc (3811N)bull imp_total (7915I)bull imp_tot_conc (9415I)bull imp_neto (10915I)bull impto_liq (12415I)bull impto_liq_rni (13915I)bull imp_op_ex (15415I)bull cae (26114N)bull fecha_vto (2758A)bull resultado (2911A)bull motivo (2922A)bull reproceso (2941A)bull fecha_venc_pago (2958A)bull presta_serv (3031N)bull fecha_serv_desde (3048A)bull fecha_serv_hasta (3128A)bull id (32015N)bull
Tipos de campo
A Alfanumericobull N Numericobull I Importes con 2 decimales (sin incluir punto)bull
Los espacios no definidos se ignoran (completar con un espacio en blanco)
Para maacutes informacioacuten sobre los campos ver paraacutemetros y valores que retorna el meacutetodo Aut en el presentemanual
Seccioacuten [PROXY] 69
Como formato de entrada es posible utilizar el mismo archivo generado para el aplicativo SIAPRECE perono se podraacuten facturar servicios ya que los campo presta_serv y fecha_serv_desde y fecha_serv_hasta no estaacutencontemplados en dicho formato
Factura electroacutenica bienes de capital (WSBFE)
El formato es similar al de factura electroacutenica normal pero variacutea el tipo de registro (0 Encabezado 1 Detallede cada Item)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 0bull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numericobull Campo tipo_doc Posicioacuten 24 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 26 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 37 Longitud 15 Tipo Importebull Campo imp_tot_conc Posicioacuten 52 Longitud 15 Tipo Importebull Campo imp_neto Posicioacuten 67 Longitud 15 Tipo Importebull Campo impto_liq Posicioacuten 82 Longitud 15 Tipo Importebull Campo impto_liq_rni Posicioacuten 97 Longitud 15 Tipo Importebull Campo imp_op_ex Posicioacuten 112 Longitud 15 Tipo Importebull Campo impto_perc Posicioacuten 127 Longitud 15 Tipo Importebull Campo imp_iibb Posicioacuten 142 Longitud 15 Tipo Importebull Campo impto_perc_mun Posicioacuten 157 Longitud 15 Tipo Importebull Campo imp_internos Posicioacuten 172 Longitud 15 Tipo Importebull Campo imp_moneda_id Posicioacuten 187 Longitud 3 Tipo Alfanumericobull Campo imp_moneda_ctz Posicioacuten 190 Longitud 10 Tipo Importebull Campo zona Posicioacuten 200 Longitud 5 Tipo Alfanumericobull Campo cae Posicioacuten 205 Longitud 14 Tipo Numericobull Campo fecha_vto Posicioacuten 219 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 227 Longitud 1 Tipo Alfanumericobull Campo obs Posicioacuten 228 Longitud 2 Tipo Alfanumericobull Campo reproceso Posicioacuten 230 Longitud 1 Tipo Alfanumericobull Campo id Posicioacuten 231 Longitud 15 Tipo Numericobull
Detalle (por cada item)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 1bull Campo ncm Posicioacuten 2 Longitud 15 Tipo Alfanumericobull Campo sec Posicioacuten 17 Longitud 15 Tipo Alfanumericobull Campo qty Posicioacuten 32 Longitud 15 Tipo Importebull Campo umed Posicioacuten 47 Longitud 5 Tipo Numericobull Campo precio Posicioacuten 52 Longitud 15 Tipo Importebull Campo bonif Posicioacuten 67 Longitud 15 Tipo Importebull Campo imp_total Posicioacuten 82 Longitud 15 Tipo Importebull Campo iva_id Posicioacuten 97 Longitud 5 Tipo Numericobull Campo ds Posicioacuten 102 Longitud 200 Tipo Alfanumericobull
Factura electroacutenica normal (WSFE) 70
Si se informa el campo ID la factura se genera con dicho nuacutemero de secuencia De lo contrario para evitarproblemas y poder reprocesar el CAE se genera con un nuacutemero de secuencia del formatoTPPPPNNNNNNNN (tipo de comprobante punto de venta y nuacutemero de comprobante)
Factura electroacutenica exportacioacuten (WSFEX)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Formato
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 3bull Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo obs Posicioacuten 1618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 2618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 2668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 2671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 2691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 2692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 2706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 2714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 2715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 2716 Longitud 40 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 2756 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 2771 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 32 Longitud 12 Tipo Importe Decimalesbull Campo umed Posicioacuten 44 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 46 Longitud 12 Tipo Importe Decimales 3bull Campo imp_total Posicioacuten 58 Longitud 14 Tipo Importe Decimales 3bull Campo ds Posicioacuten 72 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica bienes de capital (WSBFE) 71
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Nota se utilizan 3 decimales para los importes y 6 para la cotizacioacuten de la moneda
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Tributo 2 IVA 3 Comprobante asociado 6 Opcionales 8 Periodo Comprobante asociado) y no tienedetalle de artiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbt_desde Posicioacuten 16 Longitud 8 Tipo Numericobull Campo cbt_hasta Posicioacuten 24 Longitud 8 Tipo Numericobull Campo concepto Posicioacuten 32 Longitud 1 Tipo Numericobull Campo tipo_doc Posicioacuten 33 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 35 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 46 Longitud 15 Tipo Importe Decimales 2bull Campo no_usar Posicioacuten 61 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 76 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 91 Longitud 15 Tipo Importe Decimales 2bull Campo imp_iva Posicioacuten 106 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 121 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 136 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 151 Longitud 3 Tipo Alfanumericobull Campo moneda_ctz Posicioacuten 154 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 164 Longitud 8 Tipo Alfanumericobull Campo cae Posicioacuten 172 Longitud 14 Tipo Alfanumericobull Campo fch_venc_cae Posicioacuten 186 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 194 Longitud 1 Tipo Alfanumericobull Campo motivos_obs Posicioacuten 195 Longitud 1000 Tipo Alfanumericobull Campo err_code Posicioacuten 1195 Longitud 6 Tipo Alfanumericobull Campo err_msg Posicioacuten 1201 Longitud 1000 Tipo Alfanumericobull Campo reproceso Posicioacuten 2201 Longitud 1 Tipo Alfanumericobull Campo emision_tipo Posicioacuten 2202 Longitud 4 Tipo Alfanumericobull Campo fecha_serv_desde Posicioacuten 2206 Longitud 8 Tipo Alfanumericobull
Factura electroacutenica exportacioacuten (WSFEX) 72
Campo fecha_serv_hasta Posicioacuten 2214 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 2222 Longitud 3 Tipo Numericobull Campo punto_vta Posicioacuten 2225 Longitud 5 Tipo Numericobull Campo fecha_hs_gen Posicioacuten 2230 Longitud 14 Tipo Alfanumerico formato yyyymmddhhmiss(pCAEA contingencia)
bull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tributo_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo desc Posicioacuten 18 Longitud 100 Tipo Alfanumericobull Campo base_imp Posicioacuten 118 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 133 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 148 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo iva_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo base_imp Posicioacuten 18 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 33 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numericobull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numericobull Campo nro Posicioacuten 9 Longitud 8 Tipo Numericobull Campo fecha Posicioacuten 17 Longitud 8 Tipo Numericobull Campo cuit Posicioacuten 25 Longitud 11 Tipo Numericobull
Opcionales Disponible desde actualizacioacuten 133b
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Compradores Disponible desde actualizacioacuten 137a (RG-4109-E Bienes Muebles Registrables)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo doc_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo doc_nro Posicioacuten 5 Longitud 80 Tipo Numerico Decimalesbull Campo porcentaje Posicioacuten 85 Longitud 6 Tipo Importe Decimales 2bull
Periodo Cbte Asoc Disponible desde actualizacioacuten 138a
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_desde Posicioacuten 2 Longitud 8 Tipo Numericobull Campo fecha_hasta Posicioacuten 10 Longitud 8 Tipo Numericobull
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 73
Factura electroacutenica Mercado Interno Matrix (WSMTXCA)
El formato es similar al de factura electroacutenica mercado interno version 1 pero variacutea el tipo de registro (0Encabezado 1 Tributo 2 IVA 3 Comprobante asociado 4 Detalle de cada item) y tiene detalle deartiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 10 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 12 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 14 Longitud 4 Tipo Numerico Decimalesbull Campo cbt_desde Posicioacuten 18 Longitud 8 Tipo Numerico Decimalesbull Campo cbt_hasta Posicioacuten 26 Longitud 8 Tipo Numerico Decimalesbull Campo concepto Posicioacuten 34 Longitud 1 Tipo Numerico Decimalesbull Campo tipo_doc Posicioacuten 35 Longitud 2 Tipo Numerico Decimalesbull Campo nro_doc Posicioacuten 37 Longitud 11 Tipo Numerico Decimalesbull Campo imp_total Posicioacuten 48 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 63 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 78 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 93 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 108 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 138 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 141 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 151 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_desde Posicioacuten 161 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_hasta Posicioacuten 171 Longitud 10 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 181 Longitud 14 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 195 Longitud 10 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 205 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 206 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 1206 Longitud 6 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 1212 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo reproceso Posicin 2212 Longitud 1 Tipo Alfanumerico Decimalesbull Campo emision_tipo Posicin 2213 Longitud 4 Tipo Alfanumerico Decimalesbull Campo observaciones Posicioacuten 2217 Longitud 1000 Tipo Alfanumerico Decimalesbull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tributo_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull Campo desc Posicioacuten 5 Longitud 100 Tipo Alfanumerico Decimalesbull Campo base_imp Posicioacuten 105 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 120 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 135 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo iva_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Mercado Interno Matrix (WSMTXCA) 74
Campo base_imp Posicioacuten 5 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 20 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Opcionales
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Detalle de item
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo u_mtx Posicioacuten 2 Longitud 10 Tipo Numerico Decimalesbull Campo cod_mtx Posicioacuten 12 Longitud 30 Tipo Alfanumerico Decimalesbull Campo codigo Posicioacuten 42 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 72 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo umed Posicioacuten 87 Longitud 3 Tipo Numerico Decimalesbull Campo precio Posicioacuten 90 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo bonif Posicioacuten 105 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo iva_id Posicioacuten 120 Longitud 3 Tipo Numerico Decimalesbull Campo imp_iva Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 138 Longitud 15 Tipo Importe Decimales 2bull Campo ds Posicioacuten 153 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo pais_dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo nombre_cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 2bull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1) 75
Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 4000 Tipo Alfanumerico Decimalesbull Campo obs_generales Posicioacuten 4618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 5618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 5668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 5671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 5691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 5692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 5706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 5714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 5715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 5716 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 6716 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 6731 Longitud 8 Tipo Alfanumerico Decimalesbull Campo excepcion Posicioacuten 6739 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 6839 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 6939 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo fecha_pago Posicioacuten 7939 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 50 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 52 Longitud 12 Tipo Importe Decimales 6bull Campo umed Posicioacuten 64 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 66 Longitud 12 Tipo Importe Decimales 6bull Campo importe Posicioacuten 78 Longitud 13 Tipo Importe Decimales 2bull Campo bonif Posicioacuten 91 Longitud 12 Tipo Importe Decimales 6bull Campo ds Posicioacuten 103 Longitud 4000 Tipo Alfanumerico Decimalesbull
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull Campo cbte_cuit Posicioacuten 17 Longitud 11 Tipo Numerico Decimalesbull
Formato Tablas xBase DBF (dBase III Fox Clipper)
Las ultimas versiones de la interfaz ademas de manejo por archivo de texto soporta manejo por tablas DBFEstas tablas pueden ser generadas con cualquier libreriacutea o aplicacioacuten compatible (incluso pueden ser abiertascon planillas de caacutelculo)
Formato Tablas xBase DBF (dBase III Fox Clipper) 76
Los tipos de campos son
C(l) caracter (longitud)bull N(ld) numerico (longitud y decimales)bull M camos memo (usado para errores y mensajes extensos gt250 caracteres)bull D campos fechabull
Los nombres de los campos son los mismos que se manejan para el archivo de texto pero sin el guioacuten bajo yrecortados a 10 caracteres
Se utiliza la libreriacutea Python dBase (dbf-08819) que soporta los siguientes tipos de archivos
dBase III Plusbull dBase III Plus wmemosbull dBase IVbull dBase IV SQLbull dBase IV wmemosbull dBase IV wmemosbull dBase IV wSQL tablebull dBase Vbull FoxBASEbull FoxPro wmemosbull Visual FoxProbull Visual FoxPro (auto increment field)bull
Reconoce archivos con extensioacuten DBF DBT FPT entre otros
Factura electroacutenica mercado interno (WSFEv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
IMPORTANTE algunos campos han cambiado su denominacioacuten en las uacuteltimas versiones para hacerloscompatibles con las tablas PDF (solo se muestra el nombre de campo perteneciente a la uacuteltima actualizacioacuten)
Encabezado (encabezadbf)
Encabezado (datos generales de la factura)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtdesde N(80)bull Campo cbthasta N(80)bull Campo concepto N(10)bull Campo tipodoc N(20)bull Campo nrodoc N(110)bull Campo imptotal N(152)bull Campo nousar N(152)bull Campo imptotconc N(152)bull
Factura electroacutenica mercado interno (WSFEv1) 77
Campo impneto N(152)bull Campo impiva N(152)bull Campo imptrib N(152)bull Campo impopex N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo fechavencp C(8)bull Campo cae C(14)bull Campo fchvenccae C(8)bull Campo resultado C(1)bull Campo motivosobs Mbull Campo errcode C(6)bull Campo errmsg Mbull Campo reproceso C(1)bull Campo emisiontip C(4)bull Campo fechaservd C(8)bull Campo fechaservh C(8)bull
Tributo (tributodbf)
Detalle de otros tributos
Campo tiporeg N(10)bull Campo tributoid N(160)bull Campo desc C(100)bull Campo baseimp N(152)bull Campo alic N(152)bull Campo importe N(152)bull
Iva (ivadbf)
Detalle de subtotales por aliacutecuota de IVA
Campo tiporeg N(10)bull Campo ivaid N(160)bull Campo baseimp N(152)bull Campo importe N(152)bull
Comprobante Asociado (comprobadbf)
Comprobante Asociado
Campo tiporeg N(10)bull Campo tipo N(30)bull Campo ptovta N(40)bull Campo nro N(80)bull
Opcionales (opcionaldbf)
Datos opcionales (adicionales seguacuten cada nueva RG 3411 3668 4004-E etc)
Encabezado (encabezadbf) 78
Campo tiporeg N(10)bull Campo opcionalid C(4)bull Campo valor C(250)bull
Compradores (compradodbf)
Datos para Venta de bienes muebles registrables (RG 4109-E)
Campo tiporeg N(10)bull Campo doctipo N(30)bull Campo docnro N(800)bull Campo porcentaje N(62)bull
Factura electroacutenica mercado interno matrix (WSMTXCA)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Tabla Encabezadbf Encabezado (datos generales de la factura)
tiporeg N(10)bull fechacbte C(10)bull tipocbte N(20)bull puntovta N(40)bull cbtdesde N(80)bull cbthasta N(80)bull concepto N(10)bull tipodoc N(20)bull nrodoc N(110)bull imptotal N(152)bull imptotconc N(152)bull impneto N(152)bull impsubtota N(152)bull imptrib N(152)bull impopex N(152)bull monedaid C(3)bull monedactz N(106)bull fechavencp C(10)bull fechaservd C(10)bull fechaservh C(10)bull cae N(140)bull fchvenccae C(10)bull resultado C(1)bull motivosobs Mbull errcode C(6)bull errmsg Mbull reproceso C(1)bull emisiontip C(4)bull observacio Mbull
Tabla Tributodbf Detalle de otros tributos
Opcionales (opcionaldbf) 79
tiporeg N(10)bull tributoid C(3)bull desc C(100)bull baseimp N(152)bull alic N(152)bull importe N(152)bull
Tabla Ivadbf Detalle de subtotales por aliacutecuota de IVA
tiporeg N(10)bull ivaid C(3)bull baseimp N(152)bull importe N(152)bull
Tabla Comprobadbf Comprobante Asociado
tiporeg N(10)bull tipo N(30)bull ptovta N(40)bull nro N(80)bull
Tabla Detallesdbf Detalles del item
tiporeg N(10)bull umtx N(100)bull codmtx C(30)bull codigo C(30)bull qty N(153)bull umed N(30)bull precio N(153)bull bonif N(153)bull ivaid N(30)bull impiva N(152)bull impsubtota N(152)bull ds Mbull
Factura electroacutenica exportacioacuten (WSFEXv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Encabezado (encabezadbf)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtenro N(80)bull Campo tipoexpo N(10)bull Campo permisoexi C(1)bull Campo paisdstcmp N(30)bull
Factura electroacutenica mercado interno matrix (WSMTXCA) 80
Campo nombreclie C(200)bull Campo cuitpaiscl N(110)bull Campo domicilioc Mbull Campo idimpositi C(50)bull Campo imptotal N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo obscomerci Mbull Campo obsgeneral Mbull Campo formapago C(50)bull Campo incoterms C(3)bull Campo incotermsd C(20)bull Campo idiomacbte C(1)bull Campo cae N(140)bull Campo fechavto C(8)bull Campo resultado C(1)bull Campo reproceso C(1)bull Campo motivosobs Mbull Campo id N(150)bull Campo fchvenccae C(8)bull Campo excepcion C(100)bull Campo errcode C(100)bull Campo errmsg Mbull
Detalle (detalledbf)
Campo tiporeg N(10)bull Campo codigo C(50)bull Campo qty N(122)bull Campo umed N(20)bull Campo precio N(122)bull Campo importe N(132)bull Campo bonif N(122)bull Campo ds Mbull
Permiso (permisodbf)
Campo tiporeg N(10)bull Campo idpermiso C(16)bull Campo dstmerc N(30)bull
Comprobante Asociado (comprobadbf)
Campo tiporeg N(10)bull Campo cbtetipo N(30)bull Campo cbtepuntov N(40)bull Campo cbtenro N(80)bull Campo cbtecuit N(110)bull
Encabezado (encabezadbf) 81
Formato JSON
Factura electroacutenica mercado interno (WSFEv1)
Para lenguajes modernos (PHP JAVA JavaScript etc) se pueden utilizar archivos de intercambio en formatoJSON
Ejecutar rece1exe json
Ejemplo archivo de entrada faactura_electronicajson
[ tipo_cbte 3 punto_vta 4002 cbt_desde 447 cbt_hasta 447 fecha_cbte 20190511 tipo_doc 80 nro_doc 30500010912
concepto 1 fecha_venc_pago null fecha_vto 20190521
imp_neto 10000 imp_iva 2100 imp_op_ex 000 imp_tot_conc 000 imp_trib 100 imp_total 12200
moneda_id PES moneda_ctz 1000
ivas [ iva_id 5 base_imp 100 importe 21 ] tributos [ tributo_id 99 alic 1 base_imp 100 importe 1 desc Impuesto Municipal Matanza ] cbtes_asoc [ nro 1234 pto_vta 2 tipo 1 ] opcionales [] compradores [] ]
La resupuesta del webservice de AFIP es agregada al mismo formato (ejemplo editado)
[ resultado A cae 69193742426586 fch_venc_cae 20190521 emision_tipo CAE motivos_obs err_code err_msg
Formato JSON 82
reproceso ]
Forma de uso
Llamar al ejecutable RECEEXE (factura electroacutenica normal WSFE) RECEBEXE (factura electroacutenicaBienes de Capital WSBFE) RECEXEXE (factura electroacutenica Exportacioacuten) RECE1EXE (facturaelectroacutenica mercado interno WSFE versioacuten 1) en la carpeta de la intefase (CPYAFIPWS)
En caso de ejecucioacuten correcta informara por pantalla los ID y CAE obtenidos y el coacutedigo de retorno es 0
ID 1000200000063 CAE 59033567692234 Motivo 00 Reproceso NID 1000200000064 CAE 59033693441244 Motivo 00 Reproceso NID 1000200000065 CAE 59033880026543 Motivo 00 Reproceso N
El CAE obtenido fecha de vencimiento y demaacutes valores devueltos por WSFE (resultado reproceso motivode rechazo u observacioacuten) son escritos en el archivo de salida con la misma informacioacuten de la factura que enel archivo de entrada
En el caso de error informa por pantalla el motivo y el coacutedigo de retorno es distinto de 0
ns1coenotAuthorized Computador no autorizado a acceder los servicio de AFIP
1000 FERecuperaLastCMPRequestSRV_RA Usuario no autorizado a realizar esta operacionValidacionDeToken No aparecioacute CUIT en lista de relaciones 30000000000
Paraacutemetros
RECEEXE RECEBEXE RECEXEXE RECE1EXE y RECEMEXE reciben los siguientes argumentospor liacutenea de comando
ayuda lista los paraacutemetros habilitadosbull prueba Teniendo los certificados instalados se puede realizar una prueba donde la interface generaraacuteun archivo de entrada para las tres proacuteximas facturas obteniendo los uacuteltimos nuacutemeros de transaccioacuteny comprobante
bull
ult Solicita Tipo de comprobante y Punto de Venta y devuelve el uacuteltimo numero de comprobanteregistrado
bull
dummy consulta estado de servidores (deberiacutean ser OK los 3 servidores)bull ptosventa devuelve los puntos de venta habilitados para emitir facturas electroacutenicas (soloWSFEv1RECE1)
bull
debug modo depuracioacuten (detalla y confirma las operaciones)bull formato muestra el formato de los archivos de entradasalidabull get recupera datos de un comprobante autorizado previamente (verificacioacuten solo para RECEXRECE1 y RECEM)
bull
xml almacena los requerimientos y respuestas XML (uacutetil para depuracioacuten y registro)bull dbf modo de trabajo con tablas Dbase IIIFoxPro o similares (solo RECE1 y RECEM)bull json modo de trabajo con formato JSON (JavaScript PHP Java) (solo RECE1)bull
Se puede especificar como primer paraacutemetro un nombre de archivo RECEINI alternativo para cargardistintas configuraciones por ej
Factura electroacutenica mercado interno (WSFEv1) 83
RECE1EXE rece-empresaxini
Si no se especifica accion por defecto se enviacutea la informacioacuten del archivo de intercambio para autorizar laemisioacuten de factura electroacutenica devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) y demaacutes datos queresponde AFIP
Para CAEA (CAE Anticipado) aplican las siguientes opciones (RECEMRECE1)
solicitarcaea obtiene un CAEA y su respectivo periacuteodo de vigencia (fecha de validez desde y fechade validez hasta)
bull
consultarcaea consulta la informacioacuten correspondiente a un CAEA previamente otorgado (recibeperiacuteodoorden o CAEA)
bull
informarcaeanoutilizado informarcaeanoutilizadoptovta registra en AFIP un CAEA no utilizadobull informarcaea enviacutea la informacioacuten del comprobante emitido y asociado a un CAEAbull
Ejemplo RECE1 para autorizar una factura electroacutenica
Al ejecutar la herramienta sin paraacutemetros se autoriza la factura en el archivo de entrada guardando elresultado de AFIP en el archivo de salida
CPYAFIPWSgt RECE1EXE
Procesando FAC A 4002 00002067 00002067 CUIT 30628789661 $ 12200 IVA $ 2100NRO 2067 Resultado A CAE 65253261906700 Obs Err Reproceso S
Ante cualquier dificultad agregar los paraacutemetros --trace debug para ver los mensajes de depuracioacuten y xmldetallados
Ejemplo RECE1 consulta ultimo comprobante
Ejemplo para obtener el uacuteltimo nuacutemero de factura emitida
CPYAFIPWSgt RECE1EXE ultConsultar ultimo numeroTipo de comprobante 19Punto de venta 2Ultimo numero 62
Si se pasa el tipo de comprobante y punto de venta por linea de comando (luego de ult) en el archivo desalida guardaraacute el dato devuelto por AFIP
CPYAFIPWSgt RECE1EXE ult 1 4001Consultar ultimo numeroUltimo numero 222
Ejemplo RECE1 consulta de comprobante
Es posible recuperar los datos de un comprobante indicando get y tipo de comprobante punto de venta ynuacutemero de comprobante
CPYAFIPWSgt RECE1EXE get 1 5 478Recuperar comprobanteFechaCbte = 20150703
Paraacutemetros 84
CbteNro = 478PuntoVenta = 5TipoDoc = 80NroDoc = 27269434894ImpTotal = 226875CAE = 65273821773505Vencimiento = 20150713EmisionTipo = CAE
Es posible agregar xml yo --trace para ver el mensaje enviado y recibido desde AFIP con datos completosLos datos del comprobante recuperado tambieacuten se guardaraacuten en el archivo de intercambio (salida)
Ejemplo RECE1 consulta puntos de venta
Ejemplo para consultar los puntos de venta habilitados por AFIP
CPYAFIPWSgt RECE1EXE ptosventa
=== Puntos de Venta ===3|EmisionTipoCAE|BloqueadoN|FchBajaNULL4|EmisionTipoCAE|BloqueadoN|FchBajaNULL
Ejemplo RECEX1 consulta monedas con cotizacioacuten
Retorna la cotizacioacuten a la fecha consultada de la base de datos aduanera de todas las monedas que poseancotizacioacuten a la fecha indicada
CPYAFIPWSgt RECEX1EXE monctz Fecha (AAAAMMDD) |024|1757370|2202019||030|10991355|2202019||034|2833349|2202019||009|39777268|2202019||012|10663978|2202019||028|21977839|2202019||014|6073274|2202019||023|0012042|2202019||018|30185896|2202019||019|0358860|2202019||032|0012749|2202019||DOL|3967|2202019||016|4295104|2202019||026|28471159|2202019||033|0060760|2202019||035|11955998|2202019||063|27265191|2202019||015|4659463|2202019||060|451564|2202019||062|0605559|2202019||010|2068376|2202019||029|0006557|2202019||011|1214078|2202019||021|520470|2202019||025|0381832|2202019||031|5761801|2202019||061|5902659|2202019|0 OK
Ejemplo RECE1 consulta de comprobante 85
Entorno
Algunas versiones de COBOL cambian el directorio u otras variables del entorno (codificacioacuten zona horariaetc) En este caso se recomienda armar un archivo RECEBAT
ECHO OFFREM limpiar la zona horaria y cambiar al directorio de la interfaseSET TZ=CD CPYAFIPWSRECEEXE
PyFEPDF generador de PDF de facturas electroacutenicas
La herramienta PyFEPDF permite generar archivos PDF con el contenido de las Facturas Electroacutenicas paraponerlos a disposicioacuten de los clientes o ser enviados electroacutenicamente viacutea email con cualquier servicio decorreos o por web
Utiliza un enfoque similar a las interfaces para webservices por lo que su uso es muy simple totalmenteautomatizado (sin intervencioacuten del usuario) y no necesita herramientas externas (ni impresoras PDF nitipografiacuteas para el coacutedigo de barras)
Cubre toda la operatoria de Factura Electroacutenica seguacuten AFIP dada la Resolicioacuten General 24852006 ynormativa relacionada (RG141503 y RG1361) aplicable a
merado interno (WSFEv1 y WSMTXCA incluyendo importacioacuten con y sin detalle)bull exportacioacuten (WSFEX)bull bono fiscal electroacutenico (WSBFE)bull
Ver muestra baacutesica en facturapdf
La interfaz maneja automaacuteticamente
Logotipos e informacioacuten particular de cada empresabull Disentildeo en PDF libre modificable (incluye disentildeador visual faacutecil e intuitivo)bull Paginado y transporte con muacuteltiples copias (Original Duplicado etc)bull Textos ilimitados (detalles observaciones etc)bull IVA discriminado (subtotales facturas A)bull Coacutedigo de barras Interleaved 2 of 7 con diacutegito verificador (reemplazado por coacutedigo QR)bull Coacutedigo QR (Obligatorio a partir de Marzo 2021 - ver cronograma de implementacioacuten)bull Metadatos en las propiedades del PDF para buacutesquedas y archivamientobull Impresioacuten directa sin intervencioacuten del usuariobull
Nota algunas caracteriacutesticas pueden no estar disponible dado limitaciones del lenguaje de programacioacuten yosistema operativo
De manera similar a las otras interfaces y herramientas el instalador de PyFEPDF para homologacioacuten(evaluacioacuten y pruebas) estaacute disponible en la seccioacuten Descargas
Importante PyFEPDF es una herramienta adicional independiente del resto de los webservices yherramientas y los costos del soporte comercial variacutean dependiendo de las necesidades para implementarlaVer Costos y Condiciones
Entorno 86
Aclaraciones PDF
Coacutedigo de Barras es recomendable generarlo especialmente si se imprime (dependiendo del casoseriacutea obligatorio) Este componente contempla internamente la generacioacuten directa de la imaacutegen demanera vectorial (escalable en cualquier resolucioacuten) seguacuten el formato que requiere AFIP (Interleaved2 of 5) y no es necesario utilizar ninguna tipografia ni cuestioacuten adicional Simplemente debecompletarse el CUIT emisor punto de venta tipo de comprobante CAE y fecha de vencimiento delCAE (esta uacuteltima en formato AFIP AAAAMMDD) El componente contempla tambieacuten el caacutelculo deldiacutegito verificador De no estar todos los datos correctos no se generaraacute el coacutedigo de barras Parainformacioacuten general ver nuestro componente auxiliar PyI25
bull
Observaciones AFIP Si esta presente motivos_obs (respuesta de AFIP en WSFEv1Obs osimilar) deberiacutea agregarse la leyenda El IVA discriminado no puede computarse como CreacuteditoFiscal (RG248508 Art 27) -esto estaacute contemplado internamente en el componente- Por ej unmensaje de observacioacuten de AFIP seriacutea Factura individual DocTipo 80 DocNro 30000000007 nose encuentra registrado en los padrones de AFIP Anteriormente AFIP solo informaba el coacutedigo (09en este caso) para maacutes informacioacuten ver WSFE F136
bull
Discriminacioacuten de IVA el programador es responsable de enviar los datos correctos seguacuten lasdiferentes normativas de AFIP Generalmente el importe de IVA solo se debe discriminar parafacturas clase A o M En las facturas clase B por lo general solo se muestra la tasa pero no el neto niIVA liquidado En las facturas clase C y E generalmente no se muestra la columna de IVA ni NETOEsta loacutegica esta contemplada internamente pero es responsabilidad de la aplicacioacuten que utilice elcomponente el revisar por la consistencia de los datos Salvo en la Factura A para el resto se debeindicar el precio unitario IVA Incluido (de corresponder) y el importe total de cada artiacuteculo tambieacutendeberiacutea ser IVA Incluido en todos los casos (de manera similar a como se emiten los comprobantespor el sitio de clave fiscal de AFIP) Recomendamos utilizar el campo imp_subtotal para evitardiferencias de calculo y redondeo (deberiacutea ser la suma del neto + importes no gravado y exento paracomprobantes clase A e incluir el importe de IVA para los comprobantes clase B)
bull
Descuentos si bien se provee un campo descuento para los importes generales es recomendableque se utilice un artiacuteculo de bonificacioacuten general en el detalle con coacutedigo de unidad de medidaumed=99 y el importe en negativo para un correcto caacutelculo de los subtotales (especialmente si lafactura se extiende por varias paacuteginas) y contemplar la normativa de almacenamientoinformacioacuten yformatos de otros webservices como WSMTXCA WSBFEv1 y WSFEXv1
bull
Logotipo AFIP en las uacuteltimas actualizaciones (107q) se incluye el logotipo de AFIP (similar al quese incluye en las facturas emitidas por clave fiscal) Para que muestre la leyenda ComprobanteAutorizado debe establecerse el campo resultado = A y no debe ser un instalador dehomologacioacuten Proacuteximamente se agregaraacuten maacutes validaciones en este sentido (la constatacioacuten delcomprobante es responsabilidad de la aplicacioacuten que utilice el componente ver WSCDC) Verejemplos y formatos a continuacioacuten para mayor informacioacuten
bull
Requisitos formato de Facturaver httpwwwafipgovarafip259IIcap1bhtmbull
Interfaz COM PyFEPDFDLL
PyFEPDFDLL es una interfaz COM (AutomatizacionActiveX) similar a un Control OCX pero que nonecesita un formulario visual por lo que se puede usar desde desde cualquier lenguaje compatible enWindows (VB VFP Delphi etc) Tambieacuten puede utilizarce desde aplicaciones como MS Excel MS Accessetc
Aclaraciones PDF 87
Objeto COM PyFEPDF propiedades y meacutetodos
El objeto COM se crea invocando a CreateObject(PyFEPDF)
Las propiedades del objeto son
CUIT cuit del emisorbull Version versioacuten de la herramienta (ej 101b)bull InstallDir directorio de instalacioacutenbull
Los meacutetodos generales del objeto para crear una factura son los siguientes (ver ejemplo en VB a continuacioacutenpara maacutes detalles)
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbte_nro imp_total imp_tot_conc imp_neto imp_iva imp_tribimp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz cae fecha_vto_caeid_impositivo nombre_cliente domicilio_cliente pais_dst_cmpobs_comerciales obs_generales forma_pago incoterms idioma_cbtemotivos_obs) recibe toda la informacioacuten del encabezado de una factura seguacuten la legislacioacutenvigente
bull
AgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed preciobonif iva_id imp_iva importe despacho) agrega un item de detalle de artiacuteculoAdicionalmente puede pasarse los paraacutemetros dato_a dato_b dato_c dato_d dato_edespacho tambieacuten es opcional
bull
AgregarIva(iva_id base_imp importe) agrega un subtotal de iva (por cada aliacutecuota)bull AgregarTributo(tributo_id Desc base_imp alic importe) agrega otrosimpuestos (uno por cada ingresos brutos retenciones y percepciones etc)
bull
AgregarCmpAsoc(tipo pto_vta nro) agrega un comprobante asociado a la facturabull
Una vez creada la factura con todos los items se debe especificar el formato mediante los siguientes meacutetodos(ver ejemplo en VB a continuacioacuten para maacutes detalles)
CargarFormato(archivo_csv) crea todos los campos del disentildeo de la factura (layout)leyendolos desde el archivo especificado
bull
AgregarCampo(nombre tipo x1 y1 x2 y2 font size bold italicunderline foreground background align text priority) agrega uncampo manualmente al disentildeo de la factura (layout)
bull
AgregarDato(campo valor pagina) con campo = nombre usado en plantilla el valorpara cada hoja y en pagina el nro de paacutegina o T todas P primera U ultima
bull
Luego se debe crear la plantilla que seraacute rellenada con los datos de la factura y por uacuteltimo se generaraacute ymostraraacute el PDF (ver ejemplo en VB a continuacioacuten para maacutes detalles)
CrearPlantilla(papel orientacion) crea una plantilla con el papel (A4 legal o letter)y orientacioacuten (portrait landscape)
bull
ProcesarPlantilla(num_copias lineas_max qty_pos) procesa los datos de lafactura dentro de la plantilla indicando la cantidad de copioas (1 original 2 duplicado 3triplicado)la cantidad de liacuteneas maacuteximas por paacutegina
bull
GenerarPDF(salida) genera el archivo PDF terminado con el nombre dado en salidabull
Objeto COM PyFEPDF propiedades y meacutetodos 88
MostrarPDF(salida imprimir) muestra el contenido del PDF generado (usando AdobeAcrobat Reader o similar) y opcionalmente lo enviacutea directo a la impresora
bull
AtributosPropiedades especiacuteficos de configuracioacuten
CUIT cuit del emisor (para generar el coacutedigo de barras)bull FmtCantidad formato numeacuterico para cantidades por ej 04 (4 decimales)bull FmtPrecio formato numeacuterico para precios unitarios por ej 02 (2 decimales)bull Locale configuracioacuten regional a utilizar para formatear importes y fechas por ejSpanish_Argentina1252 (Windows) es_ARutf8 (Linux)
bull
Atributos geneacutericos (similares a otros componentes)
Version versioacuten de la interfase (ej 107q)bull InstallDir directorio de instalacioacuten (ej CArchivos de ProgramaPyAfipWs)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Ver Formato de Intercambio PDF y los otros componentes a los webservices para informacioacuten adicional sobrecada campo
Ejemplo PyFEPDF en VB
A modo de demostracioacuten a continuacioacuten se detalla un ejemplo simple (lenguaje Visual Basic) comentando elfuncionamiento baacutesico de la interfaz para generacioacuten de Facturas Electroacutenicas en formato PDF
Crear objeto interface para generacioacuten de FE en PDFSet PyFEPDF = CreateObject(PyFEPDF)DebugPrint PyFEPDFVersionDebugPrint PyFEPDFInstallDir
CUIT del emisorPyFEPDFCUIT = 33693450239
establezco formatos (cantidad de decimales)PyFEPDFFmtCantidad = 04PyFEPDFFmtPrecio = 02
Datos del encabezado de la facturatipo_cbte = 1 Factura Apunto_vta = 40000 prefijocbte_nro = 12345678 nuacutemero de facturafecha = 20110327concepto = 3 datos del clientetipo_doc = 80 nro_doc = 30000000007nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16 coacutedigo para exportacioacutenid_impositivo = PJ54482221-l totales del comprobanteimp_total = 12200 imp_tot_conc = 000imp_neto = 10000 imp_iva = 2100imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000
Ejemplo PyFEPDF en VB 89
fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturadofecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libremoneda_id = 012moneda_ctz = 05forma_pago = 30 diasincoterms = FOB termino de comercio exterior para exportacioacutenidioma_cbte = 1 idioma para exportacioacuten (no usado por el momento)motivos_obs = 11 motivo de observacioacuten (F136 y otros)
Coacutedigo de Autorizacioacuten Electroacutenica y fecha de vencimiento (para facturas tradicionales no imprimir el CAE ni coacutedigo de barras)cae = 61123022925855fecha_vto_cae = 20110320
Creo la factura (internamente en la interfaz)ok = PyFEPDFCrearFactura( _ concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fecha_vto_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivos_obs)
Parametros adicionales del encabezado
ok = PyFEPDFEstablecerParametro(localidad_cliente Hurlingham)ok = PyFEPDFEstablecerParametro(provincia_cliente Buenos Aires)
Leyenda Comprobante Autorizado (verificar previamente con WSCDC o similar)
ok = PyFEPDFEstablecerParametro(resultado A)
Agregar comprobantes asociados (si es una NCND)tipo = 19pto_vta = 2nro = 1234pyfepdfAgregarCmpAsoc(tipo pto_vta nro)
Agrego subtotales de IVA (uno por alicuota)iva_id = 5 coacutedigo para aliacutecuota del 21base_imp = 100 importe neto sujeto a esta aliacutecuotaimporte = 21 importe liquidado de ivaok = PyFEPDFAgregarIva(iva_id base_imp importe)
Agregar cada impuesto (por ej IIBB retenciones percepciones etc)tributo_id = 99 codigo para 99-otros tributosDesc = Impuesto Municipal Matanzabase_imp = 10000 importe sujeto a este tributoalic = 100 alicuota (porcentaje) de este tributoimporte = 100 importe liquidado de este tributook = PyFEPDFAgregarTributo(tributo_id Desc base_imp alic importe)
Agrego detalles de cada item de la facturau_mtx = 123456 unidadescod_mtx = 1234567890123 coacutedigo de barrascodigo = P0001 codigo interno a imprimir (ej articulo)
Ejemplo PyFEPDF en VB 90
ds = Descripcion del producto P0001qty = 2 cantidadumed = 7 coacutedigo de unidad de medida (ej 7 para unidades)precio = 100 precio neto (A) o iva incluido (B)bonif = 0 importe de descuentosiva_id = 5 coacutedigo para aliacutecuota del 21imp_iva = 42 importe liquidado de ivaimporte = 242 importe total del itemdespacho = Nordm 123456 numero de despacho de importacioacutenok = PyFEPDFAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
ds = Descuento generalumed = 99precio = -100imp_iva = -21importe = -121ok = PyFEPDFAgregarDetalleItem( ds 0 umed _ precio 0 iva_id imp_iva importe)
Agrego datos adicionales fijosok = PyFEPDFAgregarDato(logo PyFEPDFInstallDir + fpdfpng)ok = PyFEPDFAgregarDato(EMPRESA Empresa de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE1 Direccion de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE2 Capital Federal)ok = PyFEPDFAgregarDato(ObservacionesGenerales1 Nota al pie1)
Cargo el formato desde el archivo CSV (opcional) (carga todos los campos a utilizar desde la planilla)ok = PyFEPDFCargarFormato(PyFEPDFInstallDir + facturacsv)
Agrego campos manualmente (opcional)nombre = prueba tipo = T T texto L lineas I imagen etcX1 = 50 Y1 = 150 X2 = 150 Y2 = 255 coordenadas (en milimetros)Font = Arial Size = 20 Bold = 1 Italic = 1 Underline = 1 tipo de letraforeground = 000000 background = FFFFFF colores de frente y fondoAlign = C Alineacioacuten Centrado Izquierda Derechaprioridad = 2 Orden Z menor prioridad se dibuja primero (para superposiciones)Text = iexclpruebaok = PyFEPDFAgregarCampo(nombre tipo X1 Y1 X2 Y2 _ Font Size Bold Italic Underline _ foreground background _ Align Text priority)
completo campos personalizados de la plantillaok = PyFEPDFAgregarDato(custom-nro-cli Cod123)ok = PyFEPDFAgregarDato(custom-pedido 1234)ok = PyFEPDFAgregarDato(custom-remito 12345)ok = PyFEPDFAgregarDato(custom-transporte Camiones Ej SRL)
Creo plantilla para esta factura (papel A4 vertical)papel = A4 o letter para carta legal para oficioorientacion = portrait o landscape (apaisado)ok = PyFEPDFCrearPlantilla(papel orientacion)num_copias = 3 original duplicado y triplicadolineas_max = 24 cantidad de linas de items por paacuteginaqty_pos = izq (cantidad a la izquierda de la descripcioacuten del artiacuteculo) Proceso la plantillaok = PyFEPDFProcesarPlantilla(num_copias lineas_max qty_pos) Genero el PDF de salida seguacuten la plantilla procesadasalida = facturapdfok = PyFEPDFGenerarPDF(salida)
Ejemplo PyFEPDF en VB 91
Abro el visor de PDF y muestro lo generado (es necesario tener instalado Acrobat Reader o similar)imprimir = False cambiar a True para que lo envie directo a la impresoraok = PyFEPDFMostrarPDF(salida imprimir)
Ver pyfepdfbas (ejemplo completo)
Herramienta PyFEPDFEXE por liacutenea de comando (consola)
La herramienta dispone de un programa PyFEPDFEXE que puede ser utilizado desde la consola y generarfacturas en formato PDF dado archivos de entada en texto o DBF
Los paraacutemetros son
--ayuda este mensajebull --licencia muestra la licencia del programabull --debug modo depuracioacuten (detalla y confirma las operaciones)bull --formato muestra el formato de los archivos de entradasalidabull --prueba genera y autoriza una factura de prueba (no usar en produccioacuten)bull --cargar carga un archivo de entrada (txt o dbf) con los datos del comprobantebull --grabar graba un archivo de salida (txt o dbf) con los datos de los comprobantesbull --pdf genera la imaacutegen de factura en PDFbull --dbf utiliza tablas DBF en lugar del archivo de entrada TXTbull
Ver receini para paraacutemetros de configuracioacuten
Ejemplos
Ver el formato de archivos de entrada
PYFEPDFEXE --formato
1
Realizar una prueba (genera facturatxt y facturapdf)
PYFEPDFEXE --prueba --mostrar --grabar
2
Realizar una prueba de DBF (genera encabezadbf detallesdbf ivadbfpermisodbf tributodbf cbteasocdbf datodbf y facturapdf)
PYFEPDFEXE --prueba --dbf --mostrar --grabar
3
Cargar archivo de entrada (leer facturatxt y generar facturapdf) mostrando la factura
PYFEPDFEXE --cargar --mostrar
4
Cargar tablas DBF (leer encabezadbf detallesdbf ivadbf permisodbftributodbf cbteasocdbf datodbf y generar facturapdf) imprimiendo la factura
PYFEPDFEXE --cargar --dbf --mostrar --imprimir
5
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYFEPDF_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico
Herramienta PyFEPDFEXE por liacutenea de comando (consola) 92
PYFEPDFEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Formato de Intercambio PDF
Para lenguajes donde no es posible utilizar objetos COM como en algunas versiones de COBOL sedesarrolloacute una interfase de texto para poder generar PDF con esta herramienta Adicionalmente laherramienta para generacioacuten de PDF soporta manejo por tablas DBF Estas tablas pueden ser generadas concualquier libreriacutea o aplicacioacuten compatible (dBase FoxPro Clipper incluso pueden ser abiertas con planillasde caacutelculo)
Los nombres de los campos y funcionamiento son los mismos entre los meacutetodos y archivos de texto perorecortados por compatibilidad con DBF
En este caso se puede utilizar un uacutenico archivo de texto (facturatxt) o varias tablas DBF (ver meacutetodorelacionado a la interfaz COM para maacutes informacioacuten) Los tipos de registros son
0 para encabezado (encabezadbf) - meacutetodo CrearFactura y EstablecerParametrobull 1 para detalles (detalle dbf) - meacutetodo AgregarDetalleItembull 2 para permisos (permisosdbf) - meacutetodo AgregarPermisobull 3 para comprobantes asociados (comprobadbf) - meacutetodo AgregarCmpAsocbull 4 para iva (ivadbf) - meacutetodo AgregarIvabull 5 para tributos (tributodbf) - meacutetodo AgregarTributobull 6 para datos opcionales (AFIP) -no utilizado-bull 9 para datos adicionales (datosdbf) -soacutelo PDF- - meacutetodo AgregarDatobull
A continuacioacuten se detalla el formato de cada registro y una breve descripcioacuten
Encabezado PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 1 tiporeg N(10) valor 0 (encabezado)
webservice Alfanumerico 6 2 webserviceC(6) wsfe wsbfe wsfex etc
fecha_cbte Alfanumerico 8 8 fechacbteC(8) ej 20100308
tipo_cbte Numerico 2 16 tipocbteN(20)
ej 1 para Facturas A (seguacuten tabla deparaacutemetros de AFIP Mercado Interno Exportacioacuten)
punto_vta Numerico 5 18 puntovtaN(40) ej 0001
cbte_nro Numerico 8 23 cbtenroN(80) ej 00000001
tipo_expo Numerico 1 31 tipoexpoN(10)
tipo de exportacioacuten (1 bienes 2 servicios 3otros)
permiso_existente Alfanumerico 1 32 permisoexiC(1) permiso de exportaioacuten S o N o nulo
pais_dst_cmp Numerico 3 33
Formato de Intercambio PDF 93
paisdstcmpN(30)
coacutedigo de paiacutes seguacuten tabla de paraacutemetros deAFIP (200 ARGENTINA 203 BRASIL212 ESTADOS UNIDOS etc)
nombre_cliente Alfanumerico 200 36 nombreclieC(200)
tipo_doc Numerico 2 236 tipodocN(20)
coacutedigo de tipo de documento seguacuten tablaAFIP WSFEv1 (80 CUIT)
nro_doc Numerico 11 238 nrodocN(110)
nuacutemero de documento (DNI CUIT etc) -ocorresponde a cuit_pais_cliente enexportacioacuten-
domicilio_cliente Alfanumerico 300 249 domicilioc M
id_impositivo Alfanumerico 50 549 idimpositiC(50)
categoriacutea frente al IVA (Resp InscriptoMonotributo etc) o identificacioacutenimpositiva en paiacutes destino (por ej CNJPRUC VAT ID etc)
imp_total Importe 153 599 imptotalN(153) importe total (con hasta 3 decimales)
imp_tot_conc Importe 153 614 imptotconcN(153)
importe conceptos no gravados (con hasta 3decimales)
imp_neto Importe 153 629 impnetoN(153)
importe neto sujeto a caacutelculo de IVA (conhasta 3 decimales)
impto_liq Importe 153 644 imptoliqN(153)
importe de IVA liquidado (con hasta 3decimales)
impto_liq_nri Importe 153 659 imptoliqnrN(153)
importe de IVA liquidado a RNI (con hasta 3decimales) -obsoleto-
imp_op_ex Importe 153 674 impopexN(153)
importe de operaciones exentas de IVA (conhasta 3 decimales)
impto_perc Importe 15 689 imptopercN(152)
importe de percepciones (con hasta 3decimales) -obsoleto ver tributos-
imp_iibb Importe 153 704 impiibbN(153)
mporte de ingresos brutos (con hasta 3decimales) -obsoleto ver tributos-
impto_perc_mun Importe 153 719 imptopercmN(153)
importe de percepciones municipales (conhasta 3 decimales) -obsoleto ver tributos-
imp_internos Importe 153 734 impinternoN(153)
importe de impuestos internos (con hasta 3decimales) -obsoleto ver tributos-
imp_trib Importe 153 749 imptribN(153)
importe total de impuestos y tributos (noincluye IVA)
moneda_id Alfanumerico 3 764 monedaidC(3)
coacutedigo de moneda seguacuten tabla de paraacutemetrosde AFIP (PES peso DOL doacutelares etc)
moneda_ctz Importe 106 767 monedactzN(106)
cotizacioacuten de la moneda (con hasta 6decimales)
obs_comerciales Alfanumerico 1000 777 obscomerci M observaciones comercialesobs_generales Alfanumerico 1000 1777 obsgeneral M observaciones generales
forma_pago Alfanumerico 50 2777 formapagoC(50)
descripcioacuten de la forma de pago (ejEfectivo)
incoterms Alfanumerico 3 2827 teacutermino de comercio exterior (ej FOB)
Encabezado PDF 94
incotermsC(3)
incoterms_ds Alfanumerico 20 2830 incotermsdC(20)
descripcioacuten de termino de comercio exterior(Free on board)
idioma_cbte Alfanumerico 1 2850 idiomacbteC(1)
idioma del comprobante seguacuten tabla deparaacutemetros de AFIP (1 espantildeol etc)
zona Alfanumerico 5 2851 zona C(5) -no utilizado-
fecha_venc_pago Alfanumerico 8 2856 fechavencpC(8)
fecha de vencimiento del pago (soloservicios)
presta_serv Numerico 1 2864 prestaservN(10) prestacioacuten de servicio (S o N)
fecha_serv_desde Alfanumerico 8 2865 fechaservdC(8) fecha de inicio del servicio facturado
fecha_serv_hasta Alfanumerico 8 2873 fechaservhC(8) fecha de finalizacioacuten del servicio facturado
cae Alfanumerico 14 2881 cae C(14) Coacutedigo de Autorizacioacuten Electroacutenicootorgado por AFIP
fecha_vto Alfanumerico 8 2895 fechavto C(8) fecha de vencimiento del CAE otorgado porAFIP
resultado Alfanumerico 1 2903 resultado C(1) resultado A aceptado R rechazado(respuesta AFIP)
reproceso Alfanumerico 1 2904 reprocesoC(1)
S si hubo reprocesamiento N si esprocesamiento original (respuesta AFIP)
motivos_obs Alfanumerico 1000 2905 motivosobs M
coacutedigo o descripcioacuten del motivo de rechazo uobservacioacuten del comprobante ej 11 -numeracioacuten 02 cuit no autorizada (respuestaAFIP)
id Numerico 15 3905 id N(150) identificador secuencial de la factura (usar 0)
telefono_cliente Alfanumerico 50 3920 telefonoclC(50)
localidad_cliente Alfanumerico 50 3970 localidadcC(50)
provincia_cliente Alfanumerico 50 4020 provinciacC(50)
formato_id Numerico 10 4070 formatoidN(100) -no utilizado-
email Alfanumerico 100 4080 email C(100) destinatario del PDFpdf Alfanumerico 100 4180 pdf C(100) ruta y nombre de archivo PDF a generar
err_code Alfanumerico 6 4280 errcode C(6) coacutedigo de error informado por AFIP (EjfexerrorErrCode=505)
err_msg Alfanumerico 1000 4286 errmsg M mensaje de error informado por AFIP (EjfexerrorErrMsg=Error de Lockeo)
Dato_adicional1 Alfanumerico 30 5286 datoadic01C(30) datos extra optativos
Dato_adicional2 Alfanumerico 30 5316 datoadic02C(30) datos extra optativos
Encabezado PDF 95
Dato_adicional3 Alfanumerico 30 5346 datoadic03C(30) datos extra optativos
Dato_adicional4 Alfanumerico 30 5376 datoadic04C(30) datos extra optativos
Campos extra (por compatibilidad con otras herramientas y formatos)
Nombre Tipo Long Pos DBF Descripcioacuten
descuento Importe 153 5405 descuentoN(153)
importe general de descuento (no recomendadousar descuento por itemdetalle)
cbt_desde Numerico 8 5420 cbtdesdeN(80)
nuacutemero de comprobante inicial del lote (usarcbte_nro)
cbt_hasta Numerico 8 5428 cbthastaN(80)
nuacutemero de comprobante final del lote (usarcbte_nro)
concepto Numerico 1 5436 conceptoN(10)
1 productos 2 servicios 3 productos + servicios(ver presta_serv)
no_usar Importe 153 5437 nousarN(153) -reservado-
imp_iva Importe 153 5452 impivaN(153) iacutedem impto_liq
emision_tipo Alfanumerico 4 5467 emisiontipC(4) CAE o CAEA
imp_subtotal Importe 153 5471 impsubtotaN(153)
se calcula internamente si no es pasado imp_neto+ imp_tot_conc + imp_op_ex - descuento(subtotal sin IVA ni otros tributos)
cat_iva Numerico 2 5486 cativa N(20) -reservado-NOTA estos campos pueden no utilizarse o tener el mismo valor que los campos originales estaacuten paracontemplar casos especiales y en general no deben utilizarse
Detalle Item PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 1
codigo Alfanumerico 30 2 codigoC(30) coacutedigo del artiacuteculo
qty Importe 122 32 qty N(122) cantidad (con 2 decimales)
umed Numerico 2 44 umed N(20) coacutedigo de unidad de medida seguacuten tabla de paraacutemetrosAFIP WSMTXCA (ej 1 - kg)
precio Importe 123 46 precioN(123) importe unitario (con hasta 3 decimales)
importe Importe 143 58 importeN(143) importe subtotal (con hasta 3 decimales)
iva_id Numerico 5 72 ivaid N(50) coacutedigo de aliacutecuota de IVA seguacuten tabla de paraacutemetrosAFIP WSFEv1 WSMTXCA (ej 5 - IVA RI Tasa
Detalle Item PDF 96
General 21 )
ds Alfanumerico 4000 77 ds M descripcioacuten del artiacuteculo (usar ltbrgt para salto delinea)
ncm Alfanumerico 15 4077 ncm C(15) coacutedigo habilitado del Nomenclador Comuacuten deMercosur -soacutelo WSBFEv1-
sec Alfanumerico 15 4092 sec C(15) coacutedigo habilitado de la Secretariacutea de Comercio-reservado-
bonif Importe 15 4107 bonifN(152)
importe de descuento (con 2 decimales) para estearticulo
imp_iva Importe 15 4122 impivaN(152) importe liquidado de IVA para este articulo
despacho Alfanumerico 20 4137 despachoC(20) -soacutelo importacioacuten-
u_mtx Numerico 10 4157 umtxN(100) unidades MTX
cod_mtx Alfanumerico 30 4167 codmtxC(30) coacutedigo de barras MTX
dato_a Alfanumerico 15 4197 datoa C(15) dato extra optativodato_b Alfanumerico 15 4212 datob C(15) dato extra optativodato_c Alfanumerico 15 4227 datoc C(15) dato extra optativodato_d Alfanumerico 15 4242 datod C(15) dato extra optativodato_e Alfanumerico 15 4257 datoe C(15) dato extra optativoNota en los campos numeacutericos (archivo de texto) para usar maacutes de los decimales especificados de manerapredeterminada indicar el punto explicitamente por ej cantidad = 0123456 para 6 decimales encantidad En la estructura del DBF cada programa puede cambiar la cantidadad de decimales
Importante para Facturas B de manera similar a las facturas tradicionales el IVA no debe estardiscriminado (enviar el precio unitario y subtotal final IVA incluido) y se debe enviar NULL en imp_iva
IVA PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 4
iva_id Numerico 5 2 ivaid N(50) tipo de aliacutecuota (ver tablas de paraacutemetros deWSFEv1 por ej 5 para 21)
base_imp Importe 153 7 baseimpN(153)
base imponible (neto gravado) para estaaliacutecuota
importe Importe 153 22 importe N(153) importe IVA liquidado para esta aliacutecuotaTributo PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 valor 5
IVA PDF 97
tiporegN(10)
tributo_id Numerico 5 2 tributoidN(50)
tipo de tributo (ver tablas de paraacutemetros de WSFEv1por ej 2 para impuestos provinciales)
desc Alfanumerico 100 7 desc C(100) descripcioacuten (por ej IIBB prov de BsAs)
base_imp Importe 153 107 baseimpN(153) base imponible para este impuesto (pude ser 0 nulo)
alic Importe 15 122 alic N(152) aliacutecuota (porcentaje por ej 3)
importe Importe 153 137 importeN(153) importe liquidado para este impuesto
Comprobante Asociado PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 3cbte_tipo Numerico 3 2 cbtetipo N(30) tipo de comprobante asociado (iacutedem encabezado)
cbte_punto_vta Numerico 4 5 cbtepuntovN(40) punto de venta
cbte_nro Numerico 8 9 cbtenro N(80) nuacutemero de comprobantePermisos PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea)- usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 2
id_permiso Alfanumerico 16 2 idpermisoC(16)
identificador del permiso de exportacioacuten ej99999AAXX999999A
dst_merc Numerico 3 18 dstmercN(30) coacutedigo de paiacutes de destino seguacuten tabla de AFIP
Datos PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 16 tiporeg N(10) valor 9campo Alfanumerico 30 17 campo C(30) nombre del campo en la plantilla PDFvalor Alfanumerico 1000 47 valor M contenido para el campo en la plantilla PDFpagina Alfanumerico 3 1047 pagina C(3) P primera U ultima T todasEste tipo de registro es opcional resultados similares se pueden lograr con el archivo de configuracioacuten(receini seccioacuten [PDF]) meacutetodo del Componente AgregarDato o directamente con el disentildeador visual(modificando la plantilla facturacsv)
Configuracioacuten PyFEPDF RECEINI
De manera similar a las otras herramientas PyFEPDF puede configurarse por el archivo de configuracioacutenRECEINI con las siguientes opciones predeterminadas
Tributo PDF 98
[FACTURA]ARCHIVO=tipoletranumeroFORMATO=facturacsvDIRECTORIO=PAPEL=letterORIENTACION=portraitDIRECTORIO=SUBDIRECTORIO=LOCALE=Spanish_Argentina1252FMT_CANTIDAD=06FMT_PRECIO=03CANT_POS=izqENTRADA=facturatxtSALIDA=facturapdf
[PDF]LOGO=fpdfpngEMPRESA=Empresa de PruebaMEMBRETE1=Direccion de PruebaMEMBRETE2=Capital FederalCUIT=CUIT 30-00000000-0IIBB=IIBB 30-00000000-0IVA=IVA Responsable InscriptoINICIO=Inicio de Actividad 01042006
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalle = detallesdbfPermiso = permisodbfDato = datodbf
Seccioacuten [FACTURA]
Controla la generacioacuten del PDF (si no se especifica campo PDF en tabla encabezado)
ARCHIVO nombre de archivo PDF a generar por ej incluyendo tipoletranumerobull FORMATO formato del PDF a generar por ej en planilla facturacsvbull DIRECTORIO directorio donde almacenar los archivos PDFbull SUBDIRECTORIO nombre de la carpeta a generar (una por diacutea de manera predeterminada)bull LINEAS_MAX cantidad de lineas para el detalle (artiacuteculos) por defecto 24bull PAPEL legal A4 letterbull ORIENTACION portrait landscape (apaisada)bull LOCALE configuracioacuten regional (Spanish_Argentina1252 en Windows es_ARutf8 en Linux)bull FMT_CANTIDAD formato de cantidad (04 para 4 decimales)bull FMT_PRECIO formato de precio unitario (03 para 3 decimales)bull CANT_POS posicioacuten de la columna cantidad (izq o der)bull ENTRADA nombre del archivo de intercambio (facturatxt)bull SALIDA nombre del archivo a generar (dejar en blanco para generar uno distinto seguacuten laconfiguracioacuten ARCHIVO)
bull
COPIAS cantidad de copias en el PDF (Original Duplicado Triplicado etc)bull
Configuracioacuten PyFEPDF RECEINI 99
Seccioacuten [PDF]
Controla campos del PDF a personalizar (si no se especifican los campo texto en tabla formato del PDF)
LOGO archivo con imagen logotipo por ej serpientepngbull EMPRESA ej Empresa de Pruebabull MEMBRETE1 ej Direccion de Pruebabull MEMBRETE2 ej Capital Federalbull CUIT CUIT 20-26756539-3bull IIBB IIBB 20-26756539-3bull IVA IVA Responsable Inscriptobull INICIO Inicio de Actividad 01042006bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull Dato = datodbfbull
Campo Subtotal
Dado que en general la columna importe deberiacutea mostrar Subtotal cIVA por similitud con el PDF quegenera AFIP por comprobantes en linea por disentildeo (actualizacioacuten 108b)
Si es A o M se imprime el subtotal SIN IVAbull Si es B o C se imprime el subtotal CON IVAbull
En el caso de factura A debe sumar los items sin el IVA ya que en la ultima hoja se le suma el IVA alsubtotal
Igualmente el campo subtotal podriacutea sobre-escribirse utilizando el meacutetodo AgregarDato(campovalor pagina) o el tipo de registro para datos adicionales En campo = subtotal el valor a imprimiren cada hoja y pagina el nro de paacutegina (T todas P primera U ultima) Se podriacutea agregar el dato paratodas las paginas vacio y para la uacuteltima con el valor que sea necesario (en ese orden)
Disentildeador Visual PyFEPDF
La herramienta incluye el progama designerexe para modificar visualmente los disentildeos de factura
Los archivos de entrada estaacuten son planillas CSV describiendo el disentildeo Al abrilos el disentildeador muestra laplantilla con los elementos donde se ubicaraacuten los futuros valores de cada factura
La barra de herramientas cuenta con botones para
Abrir guardar e imprimir (vista previa) las plantillasbull
Seccioacuten [PDF] 100
Agregar eliminar y duplicar elementosbull Buscar elementos por nombre o por textobull
Sobre un elemento con doble click izquierdo se abre un dialogo para editar el texto y con click derecho seabre un dialogo con la ventana de propiedades Es posible seleccionar muacuteltiples elementos manteniendopresionado shift y click izquierdo Para mover los elementos se puede usar las teclas de flechas o arrastrar loselementos
Ver a continuacioacuten los tipos de elementos y su definicioacuten
A modo de ejemplo se muestra un pantallazo del Disentildeador Visual con el elemento logo seleccionadoeditando sus propiedades
Para ejecutarlo simplemente ir al directorio de la interfaz y correr designerexe
Tipos de elementos para PyFEPDF
Para el disentildeo del PDF es posible establecer los siguientes tipos de campo (elementos graacuteficos)
Texto (T) con tipo de letra (fuente) tamantildeo formato (italico negrita subrayado) tamantildeo yalineacioacuten
bull
Liacuteneas (L) y Cuadros (B)bull Imaacutegenes (I) en formato PNG o JPGbull Coacutedigo de Barras (CB) en formato Entrelazado 2 de 5bull Codigo QR (I) (Requerido por AFIP a partir del 01032021 ver cronograma)bull
Definicioacuten de elementos para PyFEPDF
Las columnas de la planilla (facturacsv) o estructura de la tabla formato para definir los elementos graacuteficoses
name (alfanumeacuterico) nombre del campobull type (alfanumeacuterico) tipo del campo T L I B CBbull x1 (numeacuterico) coordenada horizontal izquierda (en mm)bull y1 (numeacuterico) coordenada vertical superior (en mm)bull x2 (numeacuterico) coordenada horizontal derecha (en mm)bull y2 (numeacuterico) coordenada vertical inferior (en mm)bull font (alfanumeacuterico) nombre de la tipografiacutea (fuente)bull size (numeacuterico) tamantildeo en puntos del textobull bold (verdaderofalso) estilo negrita para el texto (1 o 0)bull italic (verdaderofalso) estilo cursiva (itaacutelica) para el texto (1 o 0)bull underline (verdaderofalso) estilo subrayado para el texto (1 o 0)bull foreground (numeacuterico) color RGB de dibujobull backgroud (numeacuterico) color RGB de relleno del fondo (si aplica al elemento)bull align (alfanumeacuterico) alineacioacuten I izquierda D derecha C centradobull text (alfanumeacuterico) texto estaacutetico o foacutermulabull priority (numeacuterico) orden z en el que se dibujan los elementos (a menor prioridad se dibuja primero)bull
Estilos HTML Adicionalmente los estilos negrita itaacutelica y subrayado pueden establecerse en tiempo deejecucioacuten encerrando todo el texto con el tag html correspondiente (en el orden indicado) Ej
Disentildeador Visual PyFEPDF 101
ltBgttexto en negritaltBgtbull ltIgttexto en cursivaltIgtbull ltUgttexto subrayadoltUgtbull ltBgtltIgtltUgttexto en negrita cursiva y subrayadoltUgtltIgtltBgtbull
PyI25 Generador de Coacutedigos de Barras
Utilitario PYI25EXE (py25py) para generar los coacutedigos de barras Interleaved 2 of 5 (Entrelazado 2 de 5)seguacuten Resolucioacuten General 170204
Ver Descargas para descargar el instalador
Los datos a consignar son (ver RG170204 Art 1 Anexo 1)
Clave Unica de Identificacioacuten Tributaria (CUIT) del emisor de la factura (11 caracteres)bull Coacutedigo de tipo de comprobante (3 caracteres)bull Punto de venta (5 caracteres)bull Coacutedigo de Autorizacioacuten de Electroacutenica (CAE) o Coacutedigo de Autorizacioacuten de Impresioacuten (CAI) (14caracteres)
bull
Fecha de vencimiento del CAE CAI (8 caracteres)bull Diacutegito verificador (1 caraacutecter) ver rutinabull
El utilitario genera una imaacutegen en formato PNG o JPG funciona tanto de liacutenea de comando consola (DOS)como por interfaz COM (automatizacioacuten DLL similar a OCX) y es uacutetil para facturas electroacutenicas otradicionales (autoimpresores o imprentas)
Imaacutegen de Ejemplo de Coacutedigo de Barras para CAE
Importante De generar imaacutegenes para imprimir es recomendado respetar la resolucioacuten de la impresora (Laacutesero Chorro de tinta no pueden usarse matriz de punto) por ej con una resolucioacuten por lo menos tres vecesmayor que la utilizada en pantalla
Nota Nuestro generador de PDF ya contempla generar los coacutedigos de barra para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PYI25EXE (utilitario por linea de comando)
Opciones
--barras a continuacioacuten se indica el coacutedigo de barras en formato numeacutericobull --noverificador deshabilitar caacutelculo de digito verificadorbull --archivo a continuacioacuten se indica el nombre del archivo de salidabull
Ejemplo de uso (generar el archivo pruebapng)
PYI25EXE --barras 202675653930240016120303473904220110528 --mostrar --archivo pruebapng
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYI25_cliEXE queesta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primer como
Definicioacuten de elementos para PyFEPDF 102
segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and is startedautomatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico PYI25EXEpuede estar compilado para ser registrado en Windows (componente para VBVFP y similares)
Objeto PYI25 (interfaz COM)
Objeto PyI25 (registrar PYI25DLL)
Meacutetodos
DigitoVerificadorModulo10(codigo) recibe el codigo de barras en formato numeacutericodevuelve el diacutegito verificador en base 10
bull
GenerarImagen(codigo archivo anchobase ancho alto extension )recibe el codigo de barras en formato numeacuterico nombre de archivo de salida tamantildeos y formato deimagen (PNG o JPEG) y genera el codigo de barras especificado
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyI25 As Object
Set PyI25 = CreateObject(PyI25)
cuit tipo_cbte punto_vta cae fch_venc_caebarras = 202675653930240016120303473904220110529 calculo digito verificadorbarras = barras + PyI25DigitoVerificadorModulo10(barras)
genero imagen en png aspecto 1x para ver en pantalla o por mailok = PyI25GenerarImagen(barras Cbarraspng)
formato en jpg aspecto 3x maacutes ancho para imprimir o incrustarok = PyI25GenerarImagen(barras cbarrasjpg 9 0 90 JPEG)
PyQR Generador de Coacutedigos QR
Utilitario PYQREXE (pyqrpy) para generar los coacutedigos QR seguacuten RG48922020
Cronograma de Implementacioacuten
Para responsables inscriptos en el impuesto al valor agregado que hayan efectuado operaciones (gravadasexentas y no gravadas) declaradas en el impuesto durante el antildeo calendario 2020 por un importe total neto deimpuestos y tasas
11 Superior a PESOS DIEZ MILLONES ($10000000-) desde el 1 de marzo de 2021
12 Superior a PESOS DOS MILLONES ($2000000-) e inferior o igual a PESOS DIEZ MILLONES ($10000000-) desde el 1 de abril de 2021
13 Superior a PESOS QUINIENTOS MIL ($500000-) e inferior o igual a PESOS DOS MILLONES ($2000000-) desde el 1 de mayo de 2021
PYI25EXE (utilitario por linea de comando) 103
2 Para el resto de los responsables inscriptos en el impuesto al valor agregado sujetos exentos ante dichogravamen y pequentildeos contribuyentes inscriptos en el Reacutegimen Simplificado (Monotributo) a partir del 1junio de 2021
Los datos a consignar son (ver QR especificaciones)
Fecha de emisioacutenbull CUIT del emisorbull Punto de ventabull Tipo de Comprobantesbull Nuacutemero de Comprobantebull Importe totalbull Monedabull Cotizacioacutenbull Tipo Documento Receptor (de corresponder)bull Nuacutemero de Documento de Receptor (de corresponder)bull Coacutedigo del Tipo de Autorizacioacutenbull Coacutedigo de Autorizacioacutenbull
Ejemplo Visual Basic script pyafipwsblobdevelopejemplospyqrpyqrvbs
Ejemplo Visual Basic claacutesico
Dim pyqr As Object
Set pyqr = CreateObject(PyQR)
Establecer tipo de imagen (PNG o JPEG)PyQRExtension = JPEG
Generar un nombre de archivo temporal para la imagenarchivo = pyqrCrearArchivo
Alternativo Especificar ubicacioacuten y extensioacutenpyqrarchivo = CQRgeneradopyqrjpg
DebugPrint archivo
ver = 1fecha = 2020-10-13cuit = 30000000007pto_vta = 10tipo_cmp = 1nro_cmp = 94importe = 12100moneda = DOLctz = 65tipo_doc_rec = 80nro_doc_rec = 20000000001tipo_cod_aut = Ecod_aut = 70417054367476
genero imagen en png con el codigo qr
url = pyqrGenerarImagen(ver fecha cuit pto_vta tipo_cmp nro_cmp _ importe moneda ctz tipo_doc_rec nro_doc_rec _ tipo_cod_aut cod_aut)
PyQR Generador de Coacutedigos QR 104
DebugPrint url
Paraacutemetros por liacutenea de comandos
--datos recibe los datos a procesar version fecha cuit pto_vta tipo_cmp nro_cmp importemoneda ctz tipo_doc_rec nro_doc_rec tipo_cod_aut cod_aut
bull
--prueba genera un QR de muestrabull --archivo permite especificar una ruta (de lo contrario usa un archivo temporal)bull --mostrar abre el archivo para visualizar la imagenbull
Ejemplo por liacutenea de comando
Linux
python pyqrpy --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
Windows
pyqrexe --archivo qrjpg --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
En windows usar pyqrexe en vez de python pyqrpy
Imaacutegen de Ejemplo de Coacutedigo QR
PyQR Generador de Coacutedigos QR 105
Nota Nuestro generador de PDF ya contempla generar los coacutedigos QR para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PyEmail Envio de correo electroacutenico
Herramienta para enviar correos electroacutenicos incluyendo por ej adjunto PDF de con factura electroacutenica
Soporta servidores SMTP con y sin autenticacioacuten
Proacuteximamente soporte para correos con contenido HTML e imagenes de factura embebida
PyEmail Envio de correo electroacutenico 106
PYEMAILEXE utilitario de correo
Para utilizar esta herramienta debe tener configurado la seccioacuten [EMAIL] en el receini
Ejemplo desde linea de comando
PYEMAILEXE motivo reingartgmailcom mensaje FacturaA0002-00117826pdf
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYEMAIL_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacutericoPYEMAILEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Objeto PyEmail (interfaz COM)
Objeto PyEmail (registrar PyEmailDLL)
Meacutetodos
Conectar(servidor usuario clave) recibe el nombre del servidor a conectarse usuario y contrasentildea(opcional)
bull
Enviar(remitente motivo destinatario mensaje archivo) envia el correo electroacutenico con los datosproporcionados
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyEmail As Object
Set PyEmail = CreateObject(PyEmail)
Primer paso conexioacuten al servidor (por unica vez)servidor = mailsistemasagilescomarusuario = norespondernsiscomarclave = 1238478puerto = 465ok = PyEmailConectar(servidor usuario clave)
Envio el o los correos (repetir por cada FE)remitente = norespondersistemasagilescomardestinatario = marianosistemasagilescomarmensaje = Se envia factura electronica adjuntaarchivo = CFACTURAPDF
ok = PyEmailEnviar(remitente motivo destinatario mensaje archivo)
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361)
Con la interfaz se provee un utilitario para generar los archivos requeridos por el aplicativo SIRED (SIAP) dela Resolucioacuten General 136102 referente al almacenamiento digital de los comprobantes emitidos (Libro
PYEMAILEXE utilitario de correo 107
Ventas Detalle y Cabeceras de Factura)
El formato de entrada es una planilla csv similar al PyRece respetando los tipos de datos y coacutedigos requeridospor los webservices con las siguientes columnas tipo_cbte punto_vta cbt_numero fecha_cbte tipo_docnro_doc imp_neto impto_liq imp_total cae fecha_vto nombre
Ejemplo de uso
CD CPYAFIPWSRG1361EXE planillacsv
Generaraacute los archivos
VENTAS_200902txtbull CABECERA_200902txtbull DETALLE_200902txtbull
Para maacutes informacioacuten ver RG136102 de AFIP
Disentildeo de registro (archivos de texto)bull Guia Temaacuteticabull
Ejemplo
Ejemplo en Visual Basic claacutesico
sired = CreateObject(SIRED)
creo una factura de ejemplotipo_cbte = 2punto_vta = 4000fecha = 20150721concepto = 3tipo_doc = 80nro_doc = 30000000007cbte_nro = 12345678imp_total = 12200imp_tot_conc = 300imp_neto = 10000imp_iva = 2100imp_trib = 100imp_op_ex = 200imp_subtotal = 10000fecha_cbte = fechafecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fechafecha_serv_hasta = fechamoneda_id = PESmoneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libre
nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361) 108
id_impositivo = Responsable Inscriptoforma_pago = 30 diasincoterms = FOBidioma_cbte = 1motivo = 11
cae = nullfch_venc_cae = null
siredCrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fch_venc_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivo)
agrego comprobantes asociado
tipo = 91pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)tipo = 5pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)
tributo_id = 99desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100siredAgregarTributo(tributo_id desc base_imp alic importe)
iva_id = 5 21base_imp = 100importe = 21siredAgregarIva(iva_id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890123codigo = P0001ds = Descripcion del producto P0001qty = 100umed = 7precio = 10000bonif = 000iva_id = 5imp_iva = 2100importe = 12100despacho = uNordm 123456siredAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
siredAgregarDato(prueba 1234)
id_factura = siredGuardarFactura()
siredEstablecerParametro(cae 61123022925855)siredEstablecerParametro(fch_venc_cae 20110320)
Ejemplo 109
siredEstablecerParametro(motivo_obs )ok = siredActualizarFactura(id_factura)
Otros Servicios WEB y herramientas similares de AFIP
Constatacioacuten de Comprobantes
WSCDC es la Interfaz para los Servicios Web para verificar en forma dinaacutemica si los comprobantes recibidosse encuentran autorizados por la AFIP Ver manual especiacutefico en ConstatacionComprobantes
Padroacuten de Contribuyentes
Herramienta para consultar el archivo completo de la condicioacuten tributaria de los contribuyentes y responsables(RG1817) Ver manual especiacutefico en PadronContribuyentesAFIP
Coacutedigo de Trazabilidad de Granos
WSCTGv2 es la Interfaz para generar Coacutedigo de Trazabilidad de Granos AFIP (RG2806 RG3113 RG3493)Ver manual especiacutefico en CodigoTrazabilidadGranos
Liquidacioacuten Primaria de Granos
WSLPG es la Interfaz para autorizar y ajustar Liquidaciones Primarias de Granos (RG34192012) Vermanual especiacutefico en LiquidacionPrimariaGranos
Consulta de Operaciones Cambiarias
WSCOC es la Interfaz para Consultas de Operaciones (moneda extranjera) Ver manual enConsultaOperacionesCambiarias
wDigDepFiel Depositario Fiel
Servicio Web de AFIP para Aviso de Recepcioacuten y Aceptacioacuten de la Digitalizacioacuten de Documentos por partede los Prestadores de Servicios de Archivos y Digitalizacioacuten (PSAD) y Aviso de Digitalizacion deDocumentos por parte de los Despachantes o de los Prestadores de Servicios de Archivos y Digitalizacioacuten(PSAD) -
Sujetos Alcanzados ver Resolucioacuten General 25702009
Actualmente la interfaz expone las funcionalidades de este webservice
Aviso de Digitalizacioacutenbull Aviso de Recepcioacuten y Aceptacioacutenbull Meacutetodo Dummy para verificacioacuten de funcionamientobull
Ejemplo Interfaz COM wDigDepFiel
De igual manera que el resto de los servicios web el web service de depositario fiel puede ser invocado desdelenguajes visuales y no visuales (en windows) utilizando la interfaz COM
Otros Servicios WEB y herramientas similares de AFIP 110
Ejemplo en Visual Basic (similar para Visual FoxPro Delphi etc)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet wDigDepFiel = CreateObject(wDigDepFiel) Setear tocken y sing de autorizacioacuten (pasos previos)wDigDepFieltoken = WSAAtokenwDigDepFielsign = WSAAsign
CUIT del emisor (debe estar registrado en la AFIP)wDigDepFielcuit = 20267565393
Conectar al Servicio Web de Depositario Fiel (homologacioacuten)ok = wDigDepFielConectar(httpstestdiaafipgovarDiaWswDigDepFielwDigDepFielasmx)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)wDigDepFielDummyDebugPrint appserver status wDigDepFielAppServerStatusDebugPrint dbserver status wDigDepFielDbServerStatusDebugPrint authserver status wDigDepFielAuthServerStatus
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393codigo = 000 carpeta completa 001 carpeta adicional FechaHora en formato ISO 2010-06-07T002351750000fecha_hora_acept = Format(Now() yyyy-MM-dd) amp T amp _ Format(Now() hhmmss) amp 000000ticket = 1234errCode = wDigDepFielAvisoRecepAcept(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie _ codigo fecha_hora_acept ticket)DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoRecepAcept Coacutedigo Error amp wDigDepFielCodError
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000 1234567890123456cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393cuit_ata = 20267565393codigo = 000 carpeta completa 001 carpeta adicionalticket = 1234url = httpwwwexamplecomhashing = db1491eda47d78532cdfca19c62875aade941dc2
inicializo aviso limpio datos (familias)wDigDepFielIniciarAvisocodigo = 02cantidad = 1wDigDepFielAgregarFamilia codigo cantidadcodigo = 03cantidad = 3wDigDepFielAgregarFamilia codigo cantidad
cantidad_total = 4
Ejemplo Interfaz COM wDigDepFiel 111
errCode = wDigDepFielAvisoDigit(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie cuit_ata _ codigo url ticket hashing cantidad_total)
DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoDigit Coacutedigo amp wDigDepFielCodError
Otros Servicios Web relacionados de otros organismos
Remito Electroacutenico (COT ARBA)
Interfaz para Servicio Web Coacutedigo de Operaciones de Traslado (COT) Remito Electronico correspondienteal articulo 41 del Coacutedigo Fiscal que establece la obligacioacuten de amparar el traslado o transporte de bienes en elterritorio de la provincia de Bs As Ver manual especiacutefico en RemitoElectronicoCotArba
Trazabilidad de Medicamentos (ANMAT)
Interfaz para Servicio Web Coacutedigo de Trazabilidad de Medicamentos (SOAP) correspondiente a laResolucioacuten 4352011 del Ministerio de Salud y Disposicioacuten 36832011 de ANMAT Sistema Nacional deTrazabilidad de Medicamentos que deberaacuten implementar las personas fiacutesicas o juriacutedicas que intervengan en lacadena de comercializacioacuten distribucioacuten y dispensacioacuten de especialidades medicinales incluidas en elRegistro de Especialidades Medicinales SNT Especificacioacuten Teacutecnica V2 Ver manual especiacutefico enTrazabilidadMedicamentos
Trazabilidad de Precursores Quiacutemicos (SEDRONAR)
Interfaz para Servicio Web Trazabilidad de Precursores Quiacutemicos TrazaMedSDRN (SOAP) para informarmovimientos de Sustancias Quiacutemicas Controladas Decreto 109596 modificado por Decreto 116100Sistema Nacional de Trazabilidad modulo de Precursores Quiacutemicos (RENPRE SEDRONAR PAMI INSSJP)que deberaacuten implementar el operador de precursores quiacutemicos obtencioacuten de nuacutemero de CUFE (Coacutedigo deUbicacioacuten Fiacutesica de Establecimiento) Entrenamiento y Alineacioacuten de Datos Resolucioacuten 90012 RENPREVer manual especiacutefico en TrazabilidadPrecursoresQuimicos
Certificados
Generacioacuten
Para poder utilizar la interfase se deben tramitar y asociar los certificados de homologacioacutenproduccioacuten en laAFIP Para mas informacioacuten ver Paacutegina principal de Factura Electroacutenica (AFIP)
Crear Pedido CSR con WSAA
A partir de la revisoacuten 1632 (ver Actualizaciones Factura Electroacutenica moacutedulo WSAApy versioacuten 110b) esposible generar el pedido de certificado automaacuteticamente utilizando la opcioacuten --crear_pedido_cert)La herramienta solicitaraacute el CUIT buscaraacute la denominacioacuten del contribuyente en el padroacuten de AFIP ygeneraraacute los archivos necesarios (clave privada y pedido de certificado)
Ejemplo
Otros Servicios Web relacionados de otros organismos 112
CPyAfipWsgt WSAA-cliexe --crear_pedido_certreingartS55t-B~pyafipws$ python wsaapy --crear_pedido_certIngrese un CUIT 20267565393Denominacioacuten seguacuten AFIP REINGART MARIANO ALEJANDROLongitud clave 2048 (bits)Se crearon los archivosclave_privada_20267565393_201609105952keypedido_cert_20267565393_201609105952csr
Tambieacuten pueden especificarse esos datos por linea de comando (CUIT nombrealias empresa y longitud de laclave -2048 bits predeterminados-) ejecutando
WSAA-cliexe --crear_pedido_cert 20267565393 PyAfipWS SHA-2 REINGART MARIANO ALEJANDRO 2048
Nota desde el coacutedigo fuente ejecutar python wsaapyTambieacuten es posible realizar el procedimiento por programa (automatizadamente) llamando a los meacutetodoswsaaCrearClavePrivada(clave_privada) y wsaaCrearPedidoCertificado(cuitempresa nombre pedido_cert)
La herramienta deja listos los archivos respectivos pudiendo subir el pedido de certificado CSR a AFIP (tantoen homologacioacuten como en produccioacuten)
WSASS
Video Explicativo completo (incluyendo WSASS autogestioacuten de certificados en homologacioacuten AFIP) httpswwwyoutubecomwatchv=ietDXvUzVIQ
OpenSSL
Pasos para crear el certificado (maacutes informacioacuten en Instructivo AFIP)
Bajar e instalar OpenSSL para Windows 098i (historico) o 102k o superior (recomendado) Encaso de inconvenientes instalar Redistribuible de Visual C++
bull
Ingresar por liacutenea de comando al directorio de OpenSSL COpenSSLbingtbull Generar la clave privada
openssl genrsa -out empresakey 2048
bull
Generar el pedido (CSR certificate signing request) por liacutenea de comando
openssl req -new -key empresakey -subj C=ARO=[empresa]CN=[nombre]serialNumber=CUIT [nro_cuit] -out empresacsr
Reemplazar [empresa] por el nombre de su empresa Ej Nombre de la empresa tal cualfigura en la consulta de inscripcioacuten ej Empresa S A
diams
Reemplazar [nombre] por su nombre o server hostname Nombre del servicio aplicacioacuten uunidad operativa ej Interfaz PyAfipWs
diams
Reemplazar [nro_cuit] por la CUIT sin guiones de la empresa o programador Ej CUITxxxxxxxxxxx
diams
bull
Enviar el empresacsr a la AFIP para que lo firmen y devuelvan el certificado empresacrtbull
Ejemplo concreto
Crear Pedido CSR con WSAA 113
openssl req -new -key empresakey -subj C=ARO=Mariano ReingartCN=PyAfipWsserialNumber=CUIT 20267565393 -out empresacsr
Generar Certificado CRT
Una vez generado el pedido de certificado CSR (ver puntos anteriores) el traacutemite es
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Nuevo Certificado en el WSASSdiams Nombre simboacutelico del DN un alias del computador fiscal (nombre de fantasiacutea ej PC1)diams Solicitud de certificado en formato PKCS10 abrir con un editor de texto el CSR y copiaraqui el contenido
diams
Presionar Crear DN y obtener certificadodiams Abrir un archivo nuevo y copiar el campo Resultado (este es el certificado usar extensioacutenCRT)
diams
bull
Produccioacuten Ingresar por clave fiscal al servicio online Administracioacuten de Certificados DigitalesIr a Agregar Alias escribir el alias (nombre relacionado al certificado)diams Subir el archivo CSR presionar Agregardiams Luego buscar y descargar el certificado CRTdiams
bull
Con esta interfase no es necesario convertir el certificado en formato pkcs12 ni importarlo alrepositorio de Windows
bull
Para maacutes informacioacuten ver instructivo oficial AFIP
Asociacioacuten
Para poder usar los servicios web se debe asociar el certificado al webservice y CUIT (empresa) que loutilizaraacute
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Crear autorizacioacuten a servicio en el WSASSdiams Seleecionar el Nombre simboacutelico del DN a autorizar (igual que en el paso anterior)diams Revisar el CUIT representado y quien genera la autorizacioacutendiams Seleccionar el Servicio al que desea acceder (por ej wsfe factura electroacutenica)diams Presionar Crear autorizacioacuten de Acceso y revisar el resultadodiams
bull
Produccioacuten en el sitio de AFIP ingresar por clave fiscalEntrar en Administrador de Relaciones de Clave Fiscaldiams Elegir Nueva Relacioacutendiams Presionar BUSCAR para seleccionar el webservice de AFIP por ej ws - FacturacioacutenElectroacutenica
diams
Presionar BUSCAR para seleccionar el Representante seleccionar el nombre del alias delComputador Fiscal (ver seccioacuten anterior)
diams
Confirmardiams
bull
Anteriormente en produccioacuten debiacutea realizarse utilizando el servicio de clave fiscal ARFE - GestionarRelaciones yendo a Realizar una nueva Asociacioacuten completando Empresa Servicio y computador-certificado- que utilizara los webservices
OpenSSL 114
Para maacutes informacioacuten en produccioacuten ver instructivos oficiales de la AFIP
obtener certificado AFIPbull asociar certificado AFIPbull
Es el mismo traacutemite para la renovacioacuten (ns1cmscertexpired Certificado expirado) debesubirse el arcihvo CSR (pedido de certificado) y descargar el nuevo CRT Recordamos que los certificadostienen una vigencia de 2 antildeos en produccioacuten y 1 antildeo en homologacioacuten
Pre-requisitos para Produccioacuten (RECE)
Para poder usar Factura Electroacutenica en Produccioacuten (modo definitivo) ademaacutes de los puntos mencionadosanteriormente dentro de Clave Fiscal servicio online Regimenes de facturacioacuten y registracioacuten(REARRECERFI) es necesario
Adherirse al reacutegimen (realizarlo con anterioridad este traacutemite puede demorar varias semanas)Importante en el Rubro I C) RECE RCEL (Factura Electroacutenica y Factura Electroacutenica en Linea)especificar RECE (no RCEL que es para Comprobantes en linea y Facturador Plus nocontemplados por los webservices)
bull
Dar de alta los nuevos puntos de ventas (uno por cada webservice a utilizar factura nacionalexportacioacuten bono fiscal etc)
bull
Para maacutes informacioacuten ver demo interactiva oficial empadronamiento AFIP
Descargas
OpenSSL para windowsbull Redistribuibe VC++bull
Comprobacioacuten de Autenticacioacuten (WSAA)
Para descartar problemas teacutecnicos de acceso en produccioacuten u homologacioacuten (y verificar la validez delcertificado generado) se puede utilizar la herramienta WSAAEXE WSAA-cliEXE en modo depuracioacuten(sin necesidad de autorizar una factura solo solicitar acceso) yo el mensaje XML devuelto porWSAACallWSAA()
CPYAFIPWSgtWSAA-cliEXE reingartcrt reingartkey wsfe 2400 httpswsaaafipgovarwsservicesLoginCms --trace
Usando CERT=reingartcrt PRIVATEKEY=reingartkey URL=httpswsaaafipgovarwsservicesLoginCms SERVICE=wsfex TTL=2400Creando TRA------------------------------------------------------------------------------ltxml version=10 encoding=UTF-8gtltloginTicketRequest version=10gt ltheadergt ltuniqueIdgt1279058341ltuniqueIdgt ltgenerationTimegt2010-07-13T181901ltgenerationTimegt ltexpirationTimegt2010-07-13T193901ltexpirationTimegt ltheadergt ltservicegtwsfexltservicegtltloginTicketRequestgt------------------------------------------------------------------------------
Asociacioacuten 115
Frimando TRALlamando WSAA--------------------------------------------------------------------------------POST httpswsaaafipgovarwsservicesLoginCmsSOAPAction httpargovafipdiffacturaelectronicaloginCmsContent-length 3369Content-type textxml charset=UTF-8
================================================================================El archivo TAxml se ha generado correctamente
Nota Cambiar WSAAEXE por WSAA-CLIEXE o viceversa dependiendo del paquete de instalacioacuten o comoeste compilado (si aparece el mensaje This program host a COM object an is started automatically) Parausarlo desde el coacutedigo fuente utilizar en su lugar python wsaapy
Para descartar cualquier problema teacutecnico se puede utilizar la salida que es la traza de depuracioacuten de lacomunicacioacuten con AFIP a la mesa de ayuda (requerimiento y respuesta xml)
Si se estariacutea conectando correctamente a produccioacuten el certificado y las URL son correctas etc se deberiacuteaconstatar que
El ticket de requerimiento de acceso (TRA) correctamente solicita servicio correcto (wsfex)ltservicegtwsfexltservicegt
bull
Se estaacute solicitando acceso a los servidores del ambiente correcto (wsaa_url) POSThttpswsaaafipgovarwsservicesLoginCms (produccioacuten) o POSThttpwsaahomoafipgovarwsservicesLoginCms (homologacioacuten)
bull
El equipo que responde seriacutea del ambiente correcto perezaafipgovarenvidiaafipgovar iraafipgovar (produccioacuten) o avariciaafipgovar(homologacioacuten) Nota los nombres de los servidores pueden cambiar y solo se informan en caso deerror
bull
Si la autenticacioacuten es exitosa (El archivo TAxml se ha generado correctamente en elmensaje XML contenido en dicho archivo se puede verificar los siguientes datos
Fuente AFIP produccioacuten (ltsourcegtCN=wsaa O=AFIP C=AR SERIALNUMBER=CUIT33693450239ltsourcegt) sinoacute diriacutea CN=wsaahomo O=AFIP C=ARSERIALNUMBER=CUIT 33693450239
bull
Destino datos del certificado de produccioacutenhomologacioacuten (C=ar O=pyafipws-sistemasagiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart)
bull
Si el ambiente es el correcto (produccioacutenhomologacioacuten) y sigue devolviendo acceso denegadons1coenotAuthorized Computador no autorizado a acceder al servicio(govafipdeseindvadacsuaviewwsaaLoginFault) revisar el certificado ARFE(asociacioacuten de servicio) RECEREARRFI sobre reacutegimen habilitado puntos de venta y demaacutes traacutemites anteAFIP Si aparece error 600 ValidacionDeToken Error al verificar hashVerificacionDeHash No valida la firma digital se estaacute usando un sign y token en elambiente incorrecto (de produccioacuten en homologacioacuten y viceversa)
Comprobacioacuten de Autenticacioacuten (WSAA) 116
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)
De manera similar a lo expuesto anteriormente se provee una aplicacioacuten visual a modo de ejemplo paracomprobar el funcionamiento de la interfaz y los certificados tramitados desde AFIP
El instalador para este aplicacioacuten puede descargarse de
instalar-ej-wsaa-202zip (archivado en 1GoogleCode)bull
Por defecto se instala en CArchivos de Programawsaaej-wsaaexe
Importante Es necesario configurar correctamente el certificado y clave privada con la ruta completa a dichosarchivos
Para pruebas en produccioacuten cambiar la URL ahttpswsaaafipgovarwsservicesLoginCms y configurar los certificados
La version de la interfaz no debe decir Homologacioacuten y debe permitir cambiar la URL sino deben reinstalarlos instaladores para produccioacuten eliminando cualquier archivo anterior
Importante generalmente solo debe correr el ejemplo no instalar ni actualizar el componente WSAA si tieneuna versioacuten superior (o incluida con otro webservice como WSFEv1 o WSLPG) o esta usando el instaladorpara produccioacuten Si no lo tiene instalado puede usar instalador-WSAA-202cexe o superior
Errores Frecuentes
Los siguientes son posibles interpretaciones y soluciones a los errores que enviacutean los servidores de AFIP
Fallas SOAP
Falla SOAP ns1coenotAuthorized o ns1cmscertuntrusted
En WSAA descartando que se este usando el certificado del ambiente incorrecto (certificado dehomologacioacuten en produccioacuten y viceversa) es necesario que el certificado y CUIT esteacuten habilitados paraacceder al servicio web especificado (wsfe wsfex wsbfe wsctg wDigDepFiel etc) No es suficiente generarel certificado (en homologacioacuten o en produccioacuten) hay que solicitar explicitamente acceso al serviciorequerido ver Asociacioacuten de Certificado
Los servicios no relacionados a factura electroacutenica en produccioacuten tienen otros meacutetodos para asociar loscertificados
Ver Comprobacioacuten de Autenticacioacuten WSAA con informacioacuten para determinar o depurar el problema deacceso
Mensajes de Error Original
Computador no autorizado a acceder los servicios de AFIP (ns1coenotAuthorized)bull Certificado no emitido por AC de confianza (ns1cmscertuntrusted)bull
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA) 117
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso alWSN solicitado
Este error es reportado por AFIP cuando se esta solicitan varios tickets de acceso para el mismo certificado yservicio
Ver Reutilizacioacuten de Ticket de Acceso
Falla SOAP Server was unable to read request ---gt There is an error in XML document (41339) ---gt Input string was not in a correct format
Este error correponde al protocolo de intercambio de datos (ver Errores por Tipos de Datos) y puede significarque
Un campo obligatorio no fue completadobull Se completoacute un campo con un tipo de datos invaacutelido (float en lugar de int coma en vez de punto etc)bull Se especificoacute un valor no esperado por el web servicebull
En cualquier caso se puede revisar el mensaje XML de requermiento (atributos xml_request o XmlRequest) ybuscar la etiqueta con datos incorrectos en la liacutenea y caracter donde se informa el error (por ej en este casoliacutenea 4 cerca del caracter 1339) Ver maacutes informacioacuten y rutinas en Manejo de Excepciones
Otras fallas SOAP
WSAA y otros webservices pueden devolver errores no documentados o capturados por AFIP por ej
Server was unable to process request ---ampgt This OracleTransactionhas completed it is no longer usable
bull
SoapFault soapenvServer Could not initialize classorghibernatetransformTransformers
bull
Nuestra interfaz no utiliza Java ni Hibernate por lo que este tipo de problemas son cuestiones internas deAFIP Los errores Oracle u ORA son un problema interno de la base de datos de AFIP
Puede ocurrir en homologacioacuten y se debe esperar a que AFIP solucione el problema
En estos casos para produccioacuten se puede consultar con la mesa de ayuda sriafipgovar (seguramente es untema que lo resolveraacuten en el diacutea y no requiera una intervencioacuten de programacioacuten o configuracioacuten especial)
Errores generales AFIP
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token
Posiblemente haya un problema interno en AFIP (frecuentemente se soluciona automaacuteticamente ya que puedeser un problema de los servidores de AFIP ver abajo) o se este enviando incorrectamente el WSAAToken(por ej el lenguaje de programacioacuten o la base de datos recortoacute el string) Revisar que dicho dato se esteacutecopiando tal cual al webservice de negocio (WSFEv1Token WSMTXCAToken etc) o utilizar los nuevosmeacutetodos como WSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado118
En python se puede analizar el sign ejecutando
import base64print base64b64decode(wsaaToken)
Que deberiacutea mostrar un XML (token del ticket de acceso) como el siguiente
ltxml version=10 encoding=UTF-8 standalone=yesgtltsso version=20gt ltid unique_id=788962471 src=CN=wsaahomo O=AFIP C=AR SERIALNUMBER=CUIT 33693450239 gen_time=1401116887 exp_time=1401160147 dst=CN=wsfe O=AFIP C=ARgt ltoperation value=granted type=logingt ltlogin uid=C=ar O=pyafipws-sistemas agiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart service=wsfe regmethod=22 entity=33693450239 authmethod=cmsgt ltrelationsgt ltrelation reltype=4 key=20267565393gt ltrelationsgt ltlogingt ltoperationgtltssogt
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 a la firma
Posiblemente se este enviando incorrectamente el WSAASign (por ej el lenguaje de programacioacuten o la basede datos recortoacute el string) Revisar que dicho dato se esteacute copiando tal cual al webservice de negocio(WSFEv1Sign WSMTXCASign etc) o utilizar los nuevos meacutetodos comoWSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
600 ValidacionDeToken Error al verificar hash VerificacionDeHash No valid la firmadigital
Este error es reportado por AFIP cuando no se estaacute enviando al webservice de negocio (WSFEv1WSMTXCA WSFEXv1 etc) el Token y Sign obtenido con WSAA (o se lo enviacutea vaciacuteo)
Esto puede deberse porque no se esteacute validando correctamente el ticket de requerimiento de acceso(certificado invaacutelido fecha invaacutelida ambiente de produccioacuten homologacioacuten incorrecto ticket de acceso yaotorgado etc) Revisar que la URL de cada webservice sea correcta (homologacioacuten o produccioacuten tanto deWSAA como del servicio web de negocio WSFEv1 WSMTXCA etc) y que el certificado corresponda alambiente correcto
Ver Manejos de excepciones para detectar el inconveniente en WSAA
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC
No estaacuten sincronizados la fecha y hora del equipo con los servidores de AFIP
En linux se actualiza con
sudo ntpdate timeafipgovar
En windows se actualiza yendo a Propiedades del Reloj Hora de Internet introduciendotimeafipgovar
Otros mensajes similares
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token119
Token vencido fecha y hora de vencimiento del token enviado - fecha y hora actual del servidorbull Validaciondetoken No validaron las fechas del token Gen Time Exp Time Now Utcbull WSAA xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid Eltiempo de generacioacutenexpiracioacuten es invaacutelido generationTime posee formato o dato invaacutelido (ej en elfuturo o maacutes de 24 hs de antiguedad)
bull
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken No aparece CUITen lista de relaciones
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesovaacutelido pero se intenta operar con un CUIT incorrecto yo que no se corresponde al certificado Revisar que elCUIT sea correcto y que esteacute asociado al servicio y certificado (ver ARFE en punto anterior)
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken Error al verificarhash VerificacionDeHash No valid la firma digital
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el ambiente requerido (por ej ticket de acceso de homologacioacuten usado en produccioacuten) o no seenvioacute correctamente el tocken y sign
Usuario no autorizado para realizar esta operacioacuten Validacionde Token No valido idSistema wsfex (Id Sistema de token es wsfe)
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el servicio web requerido (por ej ticket de acceso de factura nacional -wsfe- usado enexportacioacuten -wsfex-)
Se debe revisar el valor del servicio al crear el requerimiento de acceso (CreateTRA)
Problemas con los certificados
Error inesperado no existe el archivo o directorio de certificadoclave privada
Este error corresponde a que la interfaz no encuentra los archivos del certificadoclave privada o la ruta notiene alguacuten directorio Revisar la ruta completa y reintentar
Mensaje de Error Original (certificado)
Unexpected Python Error lttype exceptionsIOErrorgt [Errno 2] No such file or directoryreingartcrt
Mensaje de Error Original (clave privada)
Unexpected Python Error 936error02001002system libraryfopenNo such file ordirectorycryptobiobss_filec122fopen(reingartkeyr) 936error2006D080BIOroutinesBIO_new_fileno such filecryptobiobss_filec125 None
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC 120
Error inesperado La clave privada no coincide con el certificado
Este error corresponde a que el certificado no fue creado con la clave privada dada por lo que no se puederealizar la encriptacioacuten necesaria Revisar que la clave privada sea con la que se creoacute el pedido de certificadooriginal (CSR) y reintentar Si no se cuenta con la clave privada original es imposible utilizar el certificadopor lo que es necesario generar y asociar uno nuevo
Mensaje de Error Original
Unexpected Python Error ltclass M2CryptoSMIMESMIME_Errorgt936error0B080074x509 certificate routinesX509_check_private_keykey valuesmismatchcryptox509x509_cmpc399 936error2107407FPKCS7routinesPKCS7_signprivate key does not match certificatecryptopkcs7pk7_smimec76
Error Inesperado La clave privada es invaacutelida
Mensaje de Error Original
Unexpected Python Error 936error0906D06CPEM routinesPEM_read_biono startlinecryptopempem_libc647Expecting ANY PRIVATE KEY
Este error corresponde a que la clave privada no estaacute en el formato correcto (texto plano PEM) seguramenteel archivo se encuentra en PKCS12 (binario certificado x509 + clave privada con extensioacuten p12 o pfx)lo que no es necesario para esta interfaz
Para convertir de pkcs12 a pem utilizar
openssl pkcs12 -in empresap12 -out empresapem -nodes
Eso generaraacute el archivo empresapem donde
La clave privada (key) se encuentra entre -----BEGIN RSA PRIVATE KEY----- y-----END RSA PRIVATE KEY-----
bull
El certificado (crt) se encuentra entre -----BEGIN CERTIFICATE----- y -----ENDCERTIFICATE-----
bull
Copiar dichas lineas en archivos separados Los archivos deben incluir el encabezado (-----BEGIN ) ypie (-----END ) para ser vaacutelidos
En caso de ser necesario para recorrer el camino inverso generar archivo PKCS12 desde PEM (no necesariopor esta interfaz) realizar
openssl pkcs12 -export -inkey empresakey -in empresacrt -out empresap12
Error inesperado Mala Desencriptacioacuten
Este error corresponde a que el certificado fue creado usando una frase de seguridad (passphrase) por lo queen tiempo de ejecucioacuten solicita entrada dicha contrasentildea (bloqueandose si no se proporciona)
Mensaje de Error Original
Error inesperado La clave privada no coincide con el certificado 121
M2CryptoEVPEVPError 3079395008error06065064digital enveloperoutinesEVP_DecryptFinal_exbaddecryptevp_encc3303079395008error0906A065PEM routinesPEM_do_headerbaddecryptpem_libc428
Para remover la passphrase (contrasentildea) por ej del archivo privadapem y grabarlo en privadakeyejecutar el siguiente comando
openssl rsa -in privadapem -out privadakey
Error inesperado Esperando certificado
El certificado proporcionado es invaacutelido
Es posible leer los datos de un certificado utilizando el comando openssl
openssl x509 -in reingartcrt -noout -text
Deberiacutea mostrar la informacioacuten completa del certificado
Certificate Data Version 3 (0x2) Serial Number 0791000000000000 Signature Algorithm sha1WithRSAEncryption Issuer CN=AFIP-Autoridad Certificante Homologacion C=AR ST=Capital Federal L=Ciudad Autonoma de Buenos Aires O=Administracion Federal de Ingresos Publicos OU=Subdireccion General de Sistemas y TelecomunicacionesemailAddress=ac_homoafipgovarserialNumber=CUIT 33693450239 Validity Not Before Feb 1 174604 2010 GMT Not After Feb 1 174604 2011 GMT Subject CN=Mariano ReingartserialNumber=CUIT 20267565393 O=PyAfipWs-Sistemas Agiles C=AR
Si no lo muestra posiblemente el certificado esteacute en otro formato (ver como convertir desde pk7 en puntosanteriores)
Mensaje de Error Original
M2CryptoX509X509Error 3078817472error0906D06CPEM routinesPEM_read_bionostart linepem_libc650Expecting CERTIFICATE
Error al dar de alta computador
A partir de Agosto de 2016 aparentemente AFIP estaacute solicitando claves maacutes largas pudiendose presentar elsiguiente error al tratar de generar un certificado por WSASS Autoservicio de Acceso a WebServices(TESTINGHOMOLOGACIOacuteN)
ERROR clsCrearComputador (CUIT=20267565393 ALIAS=test_1024) createComputer Error al dar de alta al computador (CUIT=20267565393 ALIAS=test_1024) La longitud de clave puacuteblica debe ser estar comprendida entre 2048 y 8192 bits
En este caso de debe generar la clave con mayor cantidad de bits por ej indicando el paraacutemetro 2048 aInstructivo OpenSSL
Error inesperado Mala Desencriptacioacuten 122
La herramienta WSAA 110g ya crea de manera predeterminada claves de 4096 bits ver Crear Pedido CSR
Se estima que estas cuestiones afectaraacuten en PRODUCCIOacuteN cuando venzan la mayoriacutea de los certificados paraese entorno el 21 de Febrero de 2016 Es posible con este componente revisar el vencimiento de cada crtcon los Metodos para Certificados
Excepcioacuten SSLError X509_load_cert_crl_file
No se puede cargar el archivo afip_ca_infocrt de la lista de autoridades de certificacioacuten de confiaza(CACERT) necesario para verificar el canal seguro como solicita AFIP
Ese archivo en las ultimas actualizaciones se encuentra en la carpeta conf o puede ser descargado desde el el repositorio
El archivo debe ser copiado a la carpeta principal donde esteacute el programa WSAA o configurar el paraacutemetroCACERT con la ruta a la ubicacioacuten completa
Mensaje de Error Original
[Errno 185090050] _sslc345 error0B084002x509 certificateroutinesX509_load_cert_crl_filesystem lib
Falla SOAP WSAA (SoapFault)
En ciertas ocaciones WSAA puede denegar el acceso con los siguientes mensajes
ns1cmscertexpired Certificado expiradobull ns1xmlbad No se ha podido interpretar el XML contra el SCHEMAbull cmscertuntrusted Certificado NO emitido por un AC de confianzabull cmssigninvalid cmsbad y cmsbadbase64 no se esta informando correctamente el mensajecriptograacutefico firmado (Firma invaacutelida o algoriacutetmo no soportado)
bull
Generalmente se esta tratando de usar un certificado invaacutelido o expirado se estaacute pasando mal alguacuten paraacutemetro(servicio o tiempo de vida) o se estaacute tratando de acceder al ambiente equivocado (el cerificado es deproduccioacuten y el servidor de homologacioacuten o viceversa)
Ver consulta tema anterior para revisar el certificado Modo Homologacioacuten Produccioacuten y Comprobacioacuten deAutenticacioacuten WSAA
Errores de Conectividad
Antes las fallas de conexioacuten sobrecarga caiacutedas de internet u otros problemas de comunicacioacuten la interfazpuede devolver los siguientes errores (en su mayoriacutea del lenguaje de programacioacuten Python o sistemaoperativo)
AttributeError NoneType object has no attribute makefile no sepuede establecer el canal de comunicacioacuten (socket) puede que internet no este funcionando en elcliente
bull
socketgaierror [Errno -2] Name or service not known no se puede resolverel nombre del equipo revise los servidores DNS asignados a su conexioacuten de internet
bull
Error al dar de alta computador 123
socketerror [Errno 104] Connection reset by peer la conexioacuten fue cerradapor la contraparte (servidor AFIP) posiblemente por sobrecarga
bull
lturlopen (11001 getaddrinfo failed)gt no se puede resolver el nombre de archivorevise los DNS y si estaacute utiliando alguacuten servidor intermedio (proxy)
bull
ExpatError Not well formed token el servidor posiblemente no esta devolviendo XMLcorrecto debido a un error interno
bull
BadStatusLine ResponseNotReady significa que los servidores de AFIP no contestan algocoherente (compatible con el protocolo HTTP)
bull
AttributeError Tag not Found Body (no elements found) significa que losservidores de AFIP no contestan un XML vaacutelido seguacuten el protocolo de webservices SOAP
bull
SSLError The read operation timed out la conexioacuten SSLTLS supero el tiempo deespera posiblemente es un error de conectividad de Internet o los servidores de AFIP estaacuten caiacutedos
bull
Service Unavailable El servidor de AFIP no estaacute disponible y no devuelve un mensaje XMLcorrecto
bull
ServerNotFoundError Unable to find the server atservicios1afipgovar no estaacute resolviendo el nombre del Servidor de AFIP a la direccioacutenIP revisar la configuracioacuten DNS con su proveedor de Internet
bull
error [Errno 111] Connection refused error [Errno 10061] No sepuede establecer una conexioacuten ya que el equipo de destino denegoacuteexpresamente dicha conexioacuten revisar que no esteacute mal configurado el servidor proxy(comentar o no enviar parametro si no corresponde)
bull
En todos estos casos se recomienda reintentar la operatoria luego de unos instantes despueacutes de verificar laconexioacuten de internet Se puede probar ingresando a la URL del webserice (por ej[ httpsservicios1afipgovarwsfev1serviceasmxWSDL
WSFEv1]) con un navegador y ver si les abre correctamente la paacutegina
Tambieacuten puede haber un tema de antivirus o proxy que esteacute bloqueando la conexioacuten saliente En ese caso(servidor intermedio para poder salir a internet) se debe consultar con los administradores de la red yposiblemente se necesite configurar
El paraacutemetro proxy en el meacutetodo Conectar formato usuarioclaveservidorpuerto (verejemplo)
bull
o seccioacuten [PROXY] en el archivo receini (ver ejemplo)bull
Ver la siguiente seccioacuten si el problema persiste Recordar que a veces funciona o no dependiendo del lugardesde donde se conecta el cliente ya que AFIP tiene una granja de servidores pueden probar reconectandosea internet desde otra IP para ver si los deriva a un servidor que funcione (o esperar a que baje la demanda yover si lo solucionan)
Errores de Protocolo SSL
AFIP estaacute desafectando los protocolos de seguridad obsoletos (SSLv3 requiriendo TLSv1+) por lo que ensistemas operativos antiguos o desactualizados (por ej Windows XP) puede existir una incompatibilidad conque imposibilite la comunicacioacuten segura es recomendable actualizar el sistema operativo lenguaje deprogramacioacuten y componentes
SSLEOFError EOF occurred in violation of protocol (_sslc590)bull SSLHandshakeError [SSL SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alertbull
Errores de Conectividad 124
handshake failure (_sslc581)[Errno 1] _sslc490 error14094410SSLroutinesSSL3_READ_BYTESsslv3 alert handshake failure
bull
Como mitigacioacuten puede utilizare un transporte alternativo basado en la biblioteca CURL que en general tienemejor cobertura para este tipo de cuestiones en Windows
Para ello establecer paraacutemetro wrapper=pycurl en el meacutetodo Conectar si se utilizan loscomponentes
wrapper = pycurlok = WSFEv1Conectar(cache wsdl proxy wrapper)
Si se utilizan las herramientas por linea de comando configurar en el receini
[WSFEv1]wrapper = pycurl
Errores AFIP CUIT Emisor
En caso de problemas con el CUIT emisor y no superar una de las siguientes validaciones excluyentes(verificacioacuten de datos registrales inscripcioacuten en el reacutegimen autorizacioacuten de emisioacuten de comprobantesdomicilio fiscal etc) AFIP devolveraacute un Coacutedigo de Error 10000 con los mensajes posibles
01 LA CUIT INFORMADA NO CORRESPONDE A UN RESPONSABLE INSCRIPTO EN ELIVA ACTIVO
bull
02 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESELECTRONICOS ORIGINALES O EL PERIODO DE INICIO AUTORIZADO ES POSTERIORAL DE LA GENERACION DE LA SOLICITUD
bull
03 LA CUIT INFORMADA REGISTRA INCONVENIENTES CON EL DOMICILIO FISCALbull 04 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESCLASE A
bull
05 EL CUIT INFORMADO COMO EMISOR NO SE ENCUENTRA REGISTRADO DE FORMAACTIVA EN LAS BASES DE LA ADMINISTRACIOacuteN
bull
06 DEBE POSEER AL MENOS UNA ACTIVAD ACTIVAbull
En estos casos debe contactar la mesa de ayuda de AFIP para solucionar el inconveniente que esteacute bloqueandola emisioacuten de facturas electroacutenicas (generalmente no es un tema teacutecnico sino un traacutemite administrativo)
Errores AFIP Punto de Venta
Otros errores relacionados a la emisioacuten de facturas electroacutenicas pueden ser
1501 El Punto de Venta debe ser del tipo habilitado para el reacutegimen CAE Codificacioacuten de Productos- Web Services o del reacutegimen CAEA
bull
Errores de Protocolo SSL 125
En este caso se debe revisar que el tipo de punto de venta dado de alta coincida con el servicio web aconsumir (campo sistema de facturacioacuten asociado)
RECE para aplicativo y web services (CAE WSFEv1 factura electroacutenica mercado interno tradicionalsin detalle)
bull
RECE para aplicativo y web services EXPORTACION (CAE WSFEXv1 factura electroacutenicaexportacioacuten con detalle)
bull
Codificacioacuten de Productos Web Services (CAE WSMTXCA factura electroacutenica mercado interno condetalle)
bull
CAEA - Codificacioacuten de Productos (CAE anticipado WSMTXCA factura electroacutenica mercado internocon detalle)
bull
No debe figurar Factura en Linea porque ese punto de venta solo permite operar por Clave Fiscal serviciointeractivo de Comprobantes en Liacutenea
Errores de tipos de datos
Se recuerda que este componente es dinaacutemico y generalmente no realiza conversioacuten ni ajustes en los tipos dedatos por lo que la aplicacioacuten que lo utilice debe revisarlos y verificar que sean correctos para ser enviadosrespetando las especificaciones y validaciones de AFIP
Debido a que los distintos lenguajes de programacioacuten pueden almacenar y pasar los valores de formasdiferentes (eventualmente en registros recordsets campos fields o similares) es recomendable que seconviertan todos los datos a string (cadenas de caracteres) para evitar errores de conversioacuten y redondeoTambieacuten se pueden usar otros tipos de datos baacutesicos como enteros (integer) flotantes (float)numeacutericomoneda (currencydecimal) que son los que en definitiva reconoce AFIP Las fechas deben pasarseen formato string seguacuten el formato de cada webservice Los importes deben pasarse con punto decimal (nocoma y sin separadores de miles ni signo pesos)
En VB se pueden convertir los valores con CStr (string) CLng (long) CCur (currency) etc o incluso lasfunciones str o val en ciertos casos ejemplo
tipo_cbte = CInt(rstipo_cbte)
Para un ejemplo concreto ver la implentacioacuten completa de referencia factura_electronicamdb (Access 2k osuperior)
En caso de enviar los tipos de datos incorrectos en Traceback (ver Manejo de Excepciones) podraacuteencontrarse algunos de los mensajes frecuentes
AttributeError PyIDispatch object has no attribute strip se envioacuteun dato que no puede convertirse a string
bull
PyIDispatch at 0x10531678 with obj at 0x0C997832 se usoacute un tipo de datos noconvertidosoportado ver Mensajes XML
bull
TypeError int() argument must be a string or a number notNoneType se envioacute un nulo en un campo que necesitaba un nuacutemero
bull
ValueError invalid literal for int() with base 10 A se envioacute un stringen un campo que necesitaba un nuacutemero
bull
Errores AFIP Punto de Venta 126
Errores internos de AFIP
Ocasionalmente pueden producirse errores no documentados en las especificaciones teacutecnicas de AFIP Por ejcuando se intenta utilizar la URL de un webservice obsoleto como WSBFE en vez de WSBFEv1 el servidorde AFIP ha devuelto el siguiente error
soapServer Server was unable to process request ---ampgt Object reference not set to an instance ofan object
bull
Otros problemas internos de los servidores de AFIP que los resuelve dicho organismo automaacuteticamente (sinintervencioacuten necesaria generalmente en el transcurso del diacutea) son
500 Error general DB (InsertandAuthorize - fex_pckprc_ins_rcel_comprobantes OEX ) - (1654) -ORA-01654 unable to extend index MIGRARCEL_CMP_UNC_INDEX by 4 in tablespaceFISCO_DATOS ORA-06512 at MIGRAFEX_PCK line 353 ORA-06512 at line 1
bull
500 Error interno DB - fex_Rece_Pckget_ctzbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
500 Error general DB (InsertandAuthorize - prc_ws_ins_cab) BFEErrorbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-12535 TNSoperationtimed out
bull
500 Error interno de aplicacioacuten - Metodo FECAESolicitar - Index was outside the bounds of thearray
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-00257 archiver error Connect internalonly until freed ORA-02063 preceding line from GHOST ORA-06512 at ORARECE_V1_PCKline 1651 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-28000 the account is lockedORA-02063 preceding line from E15K_PADR ORA-06512 at ORARECE_V1_PCK line 1806ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLEinitialization or shutdown in progress
bull
501 Error interno de base de datos - CAECabInsert ORA-02068 following severe error fromCONTRIB ORA-03113 end-of-file communication channel ORA-06512 atORARECE_V1_PCK
bull
501_ Error interno de base de datos - CAECabInsert ORA-01001 invalid cursor ORA-06512 atORARECE_V1_PCK line 580 ORA-06512 at ORARECE_V1_PCK line 1070 ORA-06512 atline 1
bull
501 Error interno de base de datos - CAEDetInsert ORA-03233 unable to extend tableORAF136_DETALLES_FACTE subpartition F136_DET_2011_CLAVE_08 by 128 in tablespaceUSERS
bull
501 Error interno de base de datos - CAESequenceGenerarORA-01502 indexORAF136_DET_CAE_UK or partition of such index is in unusable state ORA-06512 atORARECE_V1_PCK line 1477 ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace FISCO_DATOS ORA-06512 at ORARECE_V1_PCK line1168 ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLE initializationor shutdown in progress
bull
501 Error interno de base de datos - AlicIvaCAEInsertORA-14400 inserted partition key does notbull
Errores internos de AFIP 127
map to any partition ORA-06512 at ORARECE_V1_PCK line 1308 ORA-06512 at line 1501 Error interno de base de datos - CuitsEnPadronSet ORA-12541 TNSno listener ORA-06512 atORARECE_V1_PCK line 1831 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-04031 unable to allocate 20528 bytesof shared memory (shared poolunknown objectsga heap(10)KTI SGA freeable small pool)ORA-02062 preceding line from SEFI ORA-06512 at ORARECE_V1_PCK line 1898ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace USERS at ORARECE_V1_PCK line 1202
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-12505 TNSlistener could notresolve SID given in connect descriptor
bull
501 Error interno de base de datos - CAECompConsultarORA-01502 indexORAIX_F136_DETALLES_TPN or partition of such index is in unusable state
bull
501 Error interno de base de datos - CAECabInsert ORA-01502 index ORAF136_CAB_CUIT_IDor partition of such index is in unusable state
bull
501 DataBase - Resultado inesperadobull 501 Error interno de base de datos - CAESequenceGenerarORA-01654 unable to extend indexORAF136_DET_CAE_UK by 1024 in tablespace FISCO_FE ORA-06512 atORARECE_V1_PCK line 1781 ORA-06512 at line 1
bull
502 Error interno de base de datos - Autorizador CAE - Transaccioacuten Activabull Error interno de aplicacioacuten - Metodo FECompConsultarORA-01034 ORACLE not availableORA-27101 shared memory realm does not exist
bull
Error interno de aplicacioacuten - Metodo FECompConsultarORA-01035 ORACLE only available tousers with RESTRICTED SESSION privilege
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-28000 the account is lockedbull soapenvServer Error de conexin DB [Cd A001]bull soapenvClient Error de acceso a la base de datosbull soapenvClient business0010bull soapenvClient orgapacheaxis2databindingADBExeption unexpected subelementconsultarCTGDatos
bull
Tambieacuten pueden ocurrir Errores de Conectividad a nivel de sistema operativo socket error ioerror timeout connection refused ssl handshake server not found etc (verarriba) especialmente cuando los servidores de AFIP se saturan por cambios y actualizaciones
Realizar la consulta con la mesa de ayuda de AFIP sriafipgovar (produccioacuten) y webservicesafipgovar(homologacoacuten) para dejar constancia del problema y si corresponde ver de utilizar los meacutetodos tradicionalespara emitir comprobantes seguacuten RG248508 Artiacuteculo 33
En el caso de inoperatividad del sistema se deberaacute emitir y entregar el comprobanterespectivo utilizando el controlador fiscal o los comprobantes manuales seguacuten correspondahasta tanto esta Administracioacuten Federal apruebe otro procedimiento alternativo de respaldo
Importante en general es obligatorio informar los comprobantes emitidos manualemente por formulariomultinota en dependencia de AFIP a traveacutes de servicios en linea o como AFIP disponga en casos particularesConsultar con el contador la normativa y legislacioacuten vigente
Errores internos de AFIP 128
Errores de Permisos
Dependiendo de las poliacuteticas de seguridad puede ser necesario dar permisos de acceso a la carpeta cache(archivos temporales) o aquellas donde se almacenen los archivos de intercambio (entrada salida PDF oXML)
IMPORTANTE los certificados y claves privadas no deben ser expuestas en una carpeta puacuteblica delservidor web o similar Utilizar passphrase (ver Meacutetodos WSAA) para mayor proteccioacuten y seguridad
Linux
En GNULinux generalmente es necesario que el usuario del servidor web (www-data o similar) puedaacceder a la carpeta
Por ejemplo se podriacutea utilizar los siguientes comandos
chown www-data -R optpyafipwschmod a+xr -R optpyafipwschmod a+xwrt -R optpyafipwscache
Revisar los permisos con su administrador de sistemas
Windows
Acceso Denegado (Archivos)
Error IOError [Errno 13] Permission denied cArchivos deProgramaPyAfipWSCacheTAXML
En general es recomendable utilizar una carpeta con permisos de escritura para la aplicacioacuten
Si esto no es posible se puede configurar los permisos de acceso
Explorador de Archivosbull Buscar carpeta de instalacioacuten (CArchivos de ProgramaPyAfipWS)bull Propiedades (click derecho)bull Solapa Seguridadbull Seleccionar Usuarios que ejecutan la aplicacioacutenbull Editarbull Modificar (habilitar)bull Aceptarbull
Ejemplo
Acceso Denegado (CreateObjectCreateInstance)
En ciertos servidores (Windows 7 o superior) dependiendo de la configuracioacuten debe permitir inicio yactivacioacuten de los componentes
Errores de Permisos 129
Error al llamar a CreateObject CreateInstance o similar Acceso Denegado(HRESULT0x80070005 E_ACCESSDENIED
Solucioacuten
Inicio buscar Servicios de Componentes (o via el Panel de Control HerramientasAdministrativas)
bull
Equipos Mi PC Configuracioacuten DCOMbull Buscar WSAA WSFEv1 o el componente que desee configurarbull Propiedades (Click Derecho)bull Solapa Seguridadbull Permisos de inicio y activacioacuten Personalizado Editarbull Agregar los usuarios que deben tener permisos necesariosbull Aceptarbull
Repetir para Permisos de Acceso y Configuracioacuten de ser necesario
Ejemplo
Acceso Denegado (CreateObjectCreateInstance) 130
Se agrega seccion PyI25 Generador de Coacutedigos de Barrasbull Se agrega seccioacuten PyEmail Envio de correo electroacutenicobull Se agrega seccioacuten Nuevas Validaciones a WSFEv1bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
AbrilMayo 2011 (hasta revisioacuten interna 221)
Se agrega seccioacuten Manejo de Excepcionesbull Se agrega seccioacuten Verificacioacuten del Canal de Comunicacioacuten Segurobull Se agrega seccioacuten Tabla Comparativa Webservicesbull Se agrega seccioacuten Reutilizacioacuten de Ticket de Acceso a WSAAbull Se agrega seccioacuten Obtencioacuten de atributos avanzados a WSAA y WSFEv1bull Se agrega seccioacuten Factura C Monotributo a WSFEv1bull Se actualiza secciones WSAA (meacutetodos atributos errores)bull Se actualiza secciones WSFEv1 (meacutetodos atributos errores)bull Se actualiza secciones WSFEX (meacutetodos atributos errores)bull Se ajusta secciones Instalacioacuten (descargas instalacioacuten manualsilenciosa)bull
FebreroMarzo 2011 (hasta revisioacuten interna 155)
Se agrega seccioacuten WSMTXCA (objeto meacutetodos atributos ejemplo errores) y RECEMbull Se agrega seccioacuten Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)bull Se actualiza seccioacuten WSFEv1 y RECE1bull Se agrega seccioacuten PyFEPDF (interfaz COM herramient CLI archivos de texto tablas DBFconfiguracioacuten y disentildeador visual)
bull
Se ajusta seccioacuten Interfase por archivos de texto siacutemil SIAP - RECE (configuracioacuten tablas DBF)bull
Ver historial completo desde revisioacuten 1 -2009- (solo usuarios autorizados)
Funcionamiento del campo ID
Importante El ID no aplica a los nuevos webservices (WSFEv1 ni WSMTXCA) igualmente se aconseja leery seguir las siguientes recomendaciones Si bien los nuevos webservices tampoco tienen reprocesamiento lainterfaz lo realiza internamente verificando los datos enviados y recibidos (ver informacioacuten adicional en cadawebservice)
El ID es el Identificador del requerimiento requerido por AFIP un nuacutemero interno de secuencia controladopor el emisor que permite identificar de manera uacutenica cada operacioacuten de autorizacioacuten (solicitud de CAE)Este dato es de vital importancia para poder recuperar un CAE frente a problemas de comunicacioacuten o fallasdel hardwaresoftware Sin el eacutes imposible recuperar un CAE y se puede llegar a bloquear todo el circuito defacturacioacuten electroacutenica en los servidores de AFIP Por ello es recomendable que sea un dato propio delsistema de facturacioacuten almacenado en un soporte permanente (base de datos en el disco riacutegido o similares)
El ID debe ser uacutenico para cada comprobante autorizado y debe cambiar si hubo rechazo previo Los ID nodeben reutilizarse salvo para realizar reprocesos (recuperar un CAE ya emitido) La AFIP almacena lastransacciones seguacuten su ID a mismo ID mismo resultado y CAE (independientemente de los otros datos de laoperacioacuten de transaccioacuten)
En el caso de fallas los webservices poseen meacutetodos para recuperar el uacuteltimo ID informado (por ej verUltNro o GetLastID)
Funcionamiento del campo ID 5
Si bien los ejemplos (incluyendo los oficiales) utilizan generalmente el uacuteltimo ID + 1 esto es solo para ilustrarel meacutetodo en general no es recomendable su uso en produccioacuten ademaacutes de requerir comunicacioacuten extra (noes obligatorio llamar al meacutetodo uacuteltimo ID) ya que puede generar inconvenientes en caso de muacuteltiples equipossolicitando autorizacioacuten simultaacuteneamente fallas de comunicacioacuten o problemas de almacenamiento Seriacutearecomendable por ej que el ID sea un campo autonumeacuterico autoincremental o serial secuencial queacompantildee a la factura
El ID es arbitrario y no tiene relacioacuten con el nordm de factura La uacutenica condicioacuten es que debe ser uacutenico pero noes necesario que sea creciente o secuencial
Validez de Comprobantes Electronicos emitidos
El uso incorrecto de los servicios web (no respetando el funcionamiento de los campos en especial el IDreproceso motivos de observacioacuten y errores) puede ocasionar comportamientos erraacuteticos (facturas noautorizadas o autorizadas con otros datos) Se recomienda revisar el funcionamiento general de su sistema enproduccioacuten utilizando las validaciones que prevee la AFIP
Consulta interactiva de CAE httpsservicioswebafipgobargenericoscomprobantescaeaspxbull Consulta interactiva de CAE Anticipado httpsservicioswebafipgobargenericoscomprobantescaeaaspx
bull
Por Clave Fiscal servicio Verificacioacuten de validez de comprobantes emitidos (solo receptores)bull Por servicio web para Facturas E A y B (Bono Fiscal) Meacutetodo Recuperar comprobante (para facturasde exportacioacuten solo emisores)
bull
Para maacutes informacioacuten y automatizacioacuten del proceso ver servicio web Constatacioacuten de ComprobantesWSCDC
Mensajes XML
Los mensajes XML contienen la comunicacioacuten transmitida entre el sistema y la AFIP en el formato deintercambio de los servicios web
Atributo XmlRequest (requerimientoxml) incluye credenciales de acceso y la solicitud remota(meacutetodo a utilizar paraacutemetros etc)
bull
Atributo XmlResponse (respuestaxml) incluye los datos devueltos por el proceso remotoincluyendo mensajes de error (si corresponde)
bull
Almacenar estos archivos es de vital importancia para el registro de las operaciones realizadas por webservicey su eventual verificacioacuten depuracioacuten o solucioacuten de inconvenientes La informacioacuten contenida en estosarchivos es solo relevante a los desarrolladores no es necesario que sean enviados al usuario final
Dependiendo de la interfaz se pueden recuperar estos mensajes en forma de cadenas de texto para su posterioralmacenamiento o generar los archivos correspondientes
Para maacutes informacioacuten ver atributos XmlRequest y XmlResponse o paraacutemetros xml --trace
Guardar WSFEv1XmlRequest y WSFEv1XmlResponse (ver Manejo de Excepciones para unarutina completa)
bull
RECE1EXE xml --trace generaraacute los archivos con la extensioacuten xml en el directorio de laherramienta (ver Paraacutemetros para maacutes informacioacuten)
bull
Validez de Comprobantes Electronicos emitidos 6
Nota de Seguridad los mensajes pueden incluir datos sensibles (credenciales de acceso a AFIP token ysign) que pueden ser vaacutelidos por varias horas auacuten despueacutes de efectuada la comunicacioacuten En caso compartirestos archivos (por ej en el foro puacuteblico de consultas) se deberiacutean tomar las medidas necesarias para evitarinconvenientes (recortar el campo sign es suficiente para que no se puedan reutilizar las credenciales deacceso)
Importante En ciertos casos para determinados webservices AFIP solicita tag vacios (por ejpermiso_existente en WSFEXv1) por lo que se ha ajustado en la biblioteca de comunicacioacuten SOAP(versioacuten 127 y superiores) para manejar tres escenarios
Enviar un dato por ej permiso_existente = Sltpermiso_existentegtSltpermiso_existentegt
bull
Enviar un tag vacio completando con string vacio por ej permiso_existente = ltpermiso_existentegtltpermiso_existentegt
bull
No enviar un tag (valor NULL NIL None Void etc) por ej permiso_existente = NULL(no genera XML)
bull
En caso de no seguir las especificaciones de AFIP el webservice retornaraacute un mensaje de error del tipoServer was unable to read request ---gt There is an gt error in XMLdocument (5 1353) ---gt Input string was not in a correct format dondeindica revisar el XmlRequest liacutenea 5 columna 1353 (en este caso puntual) para corregir el dato enviado
Documentacioacuten Oficial AFIP
Recomendamos revisar y seguir los lineamientos y normativa de AFIP
httpwwwafipgovarfebull httpwwwafipgovarwsbull
Recordamos que la interfaz y bibliotecas (PyAfipWs) no realizan ninguacuten tipo de chequeo o validacioacutenadicional (ya que esta tarea la realizan los servidores de AFIP) y tampoco convierte entre distintos tipos dedatos (salvo conversioacuten trivial a cadenas -strings- para ser enviadas por XML) por lo que es responsabilidadde la aplicacioacuten principal cumplir con las especificaciones y legislacioacuten vigente referidas a los servicios webde AFIP proporcionando los datos correctos que correspondan
Modos Homologacioacuten y Produccioacuten
Por disentildeo el instalador para Windows publicado de la interfaz COM (pyafipwspy) y herramientas por liacuteneade comando (recepy recexpy recebpy rece1py) funcionaraacute inicialmente solo en modo homologacioacuten(testing) ya que su objetivo es simplemente facilitar las pruebas para que los usuarios que no concen Pythonpuedan evaluar el producto antes de interiorizarse en el lenguaje yo contratar el soporte comercial
Con los instaladores de evaluacioacuten en modo de homologacioacuten (pruebas) se ignoraraacute las URLsproporcionadas a CallWSAA Conectar o especificadas en receini En ese caso para activar modo produccioacuten(definitivo) es necesario ajustar el coacutedigo fuente ver instrucciones de Instalacioacuten desde Coacutedigo Fuente( video explicativo) Ofrecemos soporte comercial contemplando el acceso al instalador compilado ampajustado para produccioacuten para los clientes que asiacute lo requieran Ver Costos y Condiciones
Mensajes XML 7
Configuracioacuten para Produccioacuten
Para entrar en el ambiente de produccioacuten de AFIP ademaacutes de utilizar el instalador correcto (no el deevaluacioacuten ver arriba) se debe usar las URLWSDL correspondientes para cada webservice (modohomologacioacuten deshabilitado)
WSAA httpswsaaafipgovarwsservicesLoginCmswsdlbull WSFE httpsservicios1afipgovarwsfeserviceasmx -obsoleto desde 2011 por AFIP-bull WSFEv1 httpsservicios1afipgovarwsfev1serviceasmxWSDLbull WSFEXv1 httpsservicios1afipgovarwsfexv1serviceasmxWSDLbull WSMTXCA httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAServicewsdlbull WSBFEv1 httpsservicios1afipgovarwsbfev1serviceasmxWSDLbull
Ejemplo en el receini
[WSAA]CERT=reingartcrtPRIVATEKEY=reingartkeyURL=httpswsaaafipgovarwsservicesLoginCmsCACERT=confafip_ca_infocrt
[WSFEv1]CUIT=20267565393ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
Ejemplo en Visual Basic o similar (segundo paraacutemetro del meacutetodo Conectar)
Certificado = reingartcrt certificado de produccioacutenClavePrivada = reingartkey clave privada de produccioacutencms = WSAASignTRA(WSAACreateTRA(wsfe) Certificado ClavePrivada)
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlok = WSAAConectar(cache wsaa_url)ta = WSAALoginCMS(cms)
wsfev1_url = httpsservicios1afipgovarwsfev1serviceasmxWSDLok = WSFEv1Conectar(cache wsfev1_wsdl)
WSFEv1Cuit = 20267565393 CUIT del emisor (segun certificado)
Luego de configurar las opciones para produccioacuten se puede verificar el correcto funcionamiento de lascredenciales y URL utilizando los meacutetodos auxiliares por ej consultando los puntos de venta habilitados
parametros RECE1 ptosventabull meacutetodo ParamGetPtosVentabull
Aclaracioacuten No es obligatorio usar el instalador ni realizar compilacioacuten se puede bajar revisar modificar yejecutar directamente el coacutedigo fuente Python publicado en modo homologacioacuten o produccioacuten
Configuracioacuten para Produccioacuten 8
Importante Los CAE obtenidos en modo homologacioacuten no tienen validez fiscal
Advertencia Teoacutericamente no deberiacutea ser posible conectarse a produccioacuten con certificados de homologacioacuten(y viceversa) pero en la praacutectica han sucedido casos (obteniendo CAE de homologacioacuten sin validez fiscal)por lo que recomendamos extremar las medidas de seguridad y control (verificando certificados yconfiguracioacuten de URL de servidores) para generar las facturas en el ambiente correcto Ver Verificar ValidezCAE y Comprobacioacuten WSAA
Manejo de Excepciones
Las versiones recientes de WSAA (202) WSFEv1 (110) WSMTXCA (101) y WSFEX (126123) incluyenmejoras y unificaciograven en el manejo de excepcioneserrores (atributos LanzarExcepciones Excepciony Traceback) permitiendo un control maacutes simple de los Unexpected Python Error (errores noesperados que informa Python el lenguaje de programacioacuten de la interfaz generalmente por problemas deconexioacuten o tipos de datos invaacutelidos) sobre todo para lenguajes que no soportar mensajes de Error COM(previniendo mensajes por errores no controlados como Error fatal coacutedigo de excepcion=C0000005 y elcierre del programa)
Dependiendo de cada caso (en especial para lenguajes de programacioacuten legados) es conveniente deshabilitarlos errores no manejados (LanzarExcepciones = False) y controlar manualmente las excepciones y el valorretornado luego de llamar a cada meacutetodo
Ejemplo para Visual Basic
Dim ta as Variant
WSAALanzarExcepciones = Falseta = WSAALoginCMS(cms)If WSAAExcepcion ltgt Then
muestro al usuario solo el mensaje de error no la traza MsgBox WSAAExcepcion vbCritical Excepcioacuten
Exit SubEnd If
Mismo ejemplo para Visual Fox Pro
WSAALanzarExcepciones = Fta = WSAALoginCMS(cms)IF LEN(WSAAExcepcion) gt 0 THEN WSAATraceback MESSAGEBOX(WSAAExcepcion 5 + 48 Excepcion) CANCELENDIF
Tambieacuten se puede verificar que la respuesta del meacutetodo (en este caso en la variable ta notar que es del tipoVariant) no sea nula en ese caso se ha producido una excepcioacuten y el mensaje deberiacutea estar en el atributoExcepcion con su traza en Traceback
Nota dependiendo de la version los atributos Excepcion y Traceback pueden estar disponibles solo luego deocurrido el error (utilizar las ulitmas versiones para poder consultar estos atributos en cualquier momento)
Es recomendable que se muestre al usuario solo la Excepcioacuten (la traza es informacioacuten teacutecnica que no tieneutilizad para el operador) y para facilitar la depuracioacuten en todos los casos es uacutetil guardar los Mensajes XML
Manejo de Excepciones 9
y excepcioacuten ya que a veces los lenguajes de programacioacuten cortan el mensaje y se dificulta saber el motivo delerror Ademaacutes es recomendable siempre verificar que los objetos hayan sido creados (para no generar nuevoserrores) y que estos sean compatibles con la versioacuten que manejamos (si tenemos varias instalaciones distintaspara no solicitar atributos inexistentes)
Por ej para VB (cambiar WSAA por el webservice que corresponda)
verifico que el objeto haya sido creadoIf Not WSAA Is Nothing Then
verifico que la versioacuten del objeto sea compatibleIf WSAAVersion gt= 102a Then creo el archivo guardo alliacute todos los atributos para depuracioacuten
fd = FreeFile Open cerrortxt For Append As fd Print fd WSAAExcepcion Print fd WSAATraceback Print fd WSAAXmlRequest Print fd WSAAXmlResponse Close fd
End IfEnd If
Ejemplo para VFP (cambiar WSAA por el webservice que corresponda)
-- Depuracioacuten (grabar a un archivo los datos de prueba)gnErrFile = FCREATE(cerrortxt) =FWRITE(gnErrFile WSAAToken + CHR(13))=FWRITE(gnErrFile WSAASign + CHR(13)) =FWRITE(gnErrFile WSAAXmlRequest + CHR(13))=FWRITE(gnErrFile WSAAXmlResponse + CHR(13))=FWRITE(gnErrFile WSAAExcepcion + CHR(13))=FWRITE(gnErrFile WSAATraceback + CHR(13))=FCLOSE(gnErrFile)
Error Handler
Importante este meacutetodo no es estrictamente necesario si su programa ya tiene incorporado el manejo deerrores seguacuten el lenguaje de programacioacuten que utilicie (especialmente si utiliza el control de excepcionesmencionado en la seccioacuten anterior)
Todas estas consideraciones no quitan que se deba tener previsto el controlador de errores habitual dellenguaje para capturar los errores graves (por ej al no poder crear el objeto enviar un tipo de dato incorrectoo llamar un meacutetodoatributo inexistente) ya sea utilizando
Visual Basic ON ERROR GOTO bull Visual Fox Pro ON ERROR DO bull o bloques TRY EXCEPT CATCH o similaresbull
Lo mismo aplica a WSFEv1 WSMTXCA y WSFEX Para maacutes informacioacuten ver los ejemplos actualizados
Para VB
On Error GoTo ManejoError
Crear objeto interface (WSAA WSFEv1 etc)
Error Handler 10
Set WSAA = CreateObject(WSAA) llamar a los meacutetodos de WSAA
Exit Sub
ManejoError
Si hubo error (tradicional no controlado)
Mostrar mensajes de Depuracioacuten en ventana de inmediatoIf Not WSAA Is Nothing Then
If WSAAVersion gt= 102a Then DebugPrint WSAAExcepcion DebugPrint WSAATraceback DebugPrint WSAAXmlRequest DebugPrint WSAAXmlResponse
End IfEnd IfIf Not WSFEv1 Is Nothing Then
If WSFEv1Version gt= 110a Then DebugPrint WSFEv1Excepcion DebugPrint WSFEv1Traceback DebugPrint WSFEv1XmlRequest DebugPrint WSFEv1XmlResponse DebugPrint WSFEv1DebugLog()
End IfEnd If
Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipSelect Case MsgBox(ErrDescription vbCritical + vbRetryCancel Error amp ErrNumber - vbObjectError amp en amp ErrSource)
Case vbRetry DebugAssert False
ResumeCase vbCancel
DebugPrint ErrDescriptionEnd Select
Para VFP (con procedimiento para captura de errores automaacutetica)
ON ERROR DO errhand2-- Crear objeto interface Web Service de Factura ElectroacutenicaWSFE = CREATEOBJECT(WSFEv1) -- llamar a los meacutetodos de WSFE
-- Procedimiento para manejar errores WSFEPROCEDURE errhand2 --PARAMETER merror mess mess1 mprog mlineno
-- Depuracioacuten (mostrar los mensajes de error en la ventana principal)
WSFEv1XmlRequest WSFEv1XmlResponse WSFEv1Excepcion WSFEv1Traceback
Error number + LTRIM(STR(ERROR()))
Error Handler 11
Error message + MESSAGE() Line of code with error + MESSAGE(1) Line number of error + LTRIM(STR(LINENO())) Program with error + PROGRAM()
-- Preguntar Aceptar o cancelar ch = MESSAGEBOX(WSFEExcepcion 5 + 48 Error) IF ch = 2 ampamp Cancelar ON ERROR CLEAR EVENTS CLOSE ALL RELEASE ALL CLEAR ALL CANCEL ENDIF ENDPROC
Es posible seguir utilizando para las versiones anteriores o por compatibilidad hacia atraacutes LanzarExcepciones= Verdadero (predeterminado) en dicho caso se generaraacute un Error COM que deberaacute ser capturado por laaplicacioacuten y el mensaje estaraacute en ErrDescription (para VB) o MESSAGE() (para VFP)
Time-Out
En casos de falla de los servidores de AFIP la respuesta se puede demorar por lo que se puede configurar elparametro timeout (tiempo de espera) en el meacutetodo Conectar(cache wsdl proxy wrappercacert timeout) para controlar el periacuteodo y minimizar los bloqueos
De manera predeterminada el tiempo de espera en las uacuteltimas versiones es de 30 segundos pero se puedenpasar otros valores como 300 para que espere hasta 5 minutos (si los servidores de AFIP estaacuten muycongestionados) o reducir a 15 o 10 para esperar un tiempo maacutes reducido y dar una respuesta raacutepida alusuario (ver en ese caso Reproceso Automaacutetico para reintentarconsultar en caso de fallas en AFIP)
Es recomendable establecer la propiedad LanzarExcepciones a Falso y comprobar el valor deExcepcion (ver arriba) que generalmente informaraacute el error del sistema operativo por timeout Varioswebservices de AFIP tienen un meacutetodo Dummy que se pueden combinar con el timeout para detectar si elservidor de AFIP esta funcionando correctamente o no (justamente ese meacutetodo tambieacuten puede fallar desdeAFIP y es necesario controlar el tiempo de espera para un chequeo raacutepido)
Ver Errores de Conectividad y Errores internos de AFIP para mayor informacioacuten sobre los problemasfrecuentes con la comunicacioacuten hacia los servidores de AFIP
Importante Si no se utiliza los paraacutemetros cache proxy wrapper y cacert deberiacutean ser pasados como stringvacio (no saltear) Para poder utilizar estos paraacutemetros se deberiacutea usar una versioacuten actualizada de loscomponentes (2015)
Verificacioacuten del Canal de Comunicacioacuten Seguro
Por nueva Especificacioacuten Teacutecnica WSAA 122(Requerimientos de canal seguro comunicacioacuten para los CEE WSAA y WSN) se debe verificar la identidaddel servidor de AFIP (transformando lo que antes era una sugerencia (no documentada) en una verificacioacutenobligatoria de comprobar el certificado y URL del servidor)
Time-Out 12
Para ello los meacutetodos Conectar reciben dos paraacutemetros adicionales (actualmente solo para uacuteltimasversiones de desarrollo de WSAA 204 y WSFEv1 112 o superiror)
wrapper libreriacutea http con soporte avanzado de ssl (por el momento pycurl)bull cacert ruta al certificado de la autoridad certificante a verificar geotrustcrt ocomodocrt Puede utilizar el archivo con ambos certificados afip_ca_infocrt que lomantenemos actualizado con todos los certificados requeridos
bull
IMPORTANTE es recomendable empezar a utilizar el archivo geneacuterico de entidades certificantes pasandocacert=True o cacert=default De este modo si AFIP cambia el certificado o se vence algunaCA es probable que el nuevo certificado esteacute en el archivo generico por lo que no habriacutea que modificar elcoacutedigo y agregarlo manualmente (siempre que se este utilizando una versioacuten actualizada del proyecto)
Como solucioacuten provisoria se pueden descargar cacertpem desde el siguiente link httpscurlhaxxsedocscaextracthtml Esos son los certificados de Firefox (Mozilla) que contiene todos loscertificados existentes Se deberiacutea reemplazar por el archivo afip_ca_infocrt
Ejemplo en Visual Basic
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlwrapper = pycurl para situaciones especiales o versiones anteriores (instalador lt 27)proxy = formato usuarioclaveservidorpuertocacert = WSAAInstallDir + confafip_ca_infocrt Indicar ruta completa (directorio conf instalador gt 27)WSAAConectar(cache wsaa_url proxy wrapper cacert)
Ejemplo en RECEINI (solo se agrega los paraacutemetros de configuracioacuten CACERT y WRAPPER el resto seusa normalmente)
[WSAA]URL=httpswsaaafipgovarwsservicesLoginCmswsdlCACERT=confafip_ca_infocrtWRAPPER=pycurl
Nota De realizar la verificacioacuten debe agregar los paraacutemetros a todas las secciones que se conecten con loswebservices [WSAA] [WSFEv1] [WSLPG] etc y usar un instalador actualizado
Para verificar la Autoridad Certificante (CACERT) se recomienda probar el uacuteltimo ejemplo interactivo(cambiando httplib2 por pycurl para validar el nuevo certificado de wsaa) Para maacutes informacioacuten ver EjemploInteractivo de Autenticacioacuten (requiere instalacioacuten)
De encontrarse alguna inconsistencia el meacutetodo Conectar devolveraacute falso y en Excepcioacuten estaraacute el motivo deerror
No verifica el certificado (60 SSL certificate problem verify that the CAcert is OK Details error14090086SSLroutinesSSL3_GET_SERVER_CERTIFICATEcertificate verify failed)
bull
No verifica URL (51 SSL certificate subject namewsaahomoafipgovar does not match target host namewsaahomoafipgobar)
bull
El archivo de autoridades certificantes (paraacutemetro cacert) es incorrecto SSLError [Errno185090050] _sslc344 error0B084002x509 certificate
bull
Verificacioacuten del Canal de Comunicacioacuten Seguro 13
routinesX509_load_cert_crl_filesystem lib error (77 )SSLHandshakeError [ SSL CERTIFICATE_VERIFY_FAILED ] certifiacutecateverify failed (_sslc581 ) o WindowsError [Error 2] El sistema nopuede encontrar el archivo especificado IOError [Errno 2] No suchfile or directory (usar alternativamente confafip_ca_infocrt)
Se utiliza una libreriacutea de transporte distinta (pycurl) y posiblemente sea reemplazada en el futuro por lo querecomendamos dejar parametrizado este tema para evitar inconvenientes (pudiendo usar cualquier libreriacutea httpyo deshabilitar la comprobacioacuten de autoridad certificante al no pasarle los nuevos paraacutemetros a Conectarpara mantener compatibilidad con versiones anteriores yo en caso de que AFIP instale un certificadoincompatible en sus servidores)
Tabla comparativa Webservices
A continuacioacuten se presenta un resumen de webservices herramientas atributos y meacutetodos soportados
Caracteriacutestica WSFE v0 WSFE v1 v11 v2 v26 WSBFE v0 y v1 WSFEX v0 y v1 WSMTXCA
Normativa AFIP RG2485RG2485 RG2926 RG2959RG2975 RG3067 RG3571RG3668 RG3749 RG3779
RG2557 RG2758 RG3066RG3689 RG2904 RG2926 RG3536
Reacutegimen Mercado Internooriginal
Mercado interno (sin informardetalle)
Bono Fiscal - Bienes deCapital Exportacioacuten Mercado Interno (informar detalle
codificacioacuten de artiacuteculos)Clases de Facturas A B C M A B C M A B E A B
Sujetos comprendidos RI (obsoleto desde172011)
Responsables InscriptosExentos y MonotributoReacutegimen General
ResponsablesInscriptos inscriptos enla Secretariacutea deComercio
Exportadores inscriptosen los RegistrosEspeciales Aduaneros(V1 obligatorio desde31122011)
Responsables Inscriptos Notificadospor Juez Administrativo AFIP
Objeto COM(Windows) WSFE WSFEv1 WSBFE o WSBFEv1 WSFEX o WSFEXv1 WSMTXCA
Biblioteca COM(Windows) wsfedll wsfev1dll pyafipwsdll o
wsbfev1dllpyafipwsdll owsfexv1dll wsmtxdll
Modulo Python(Linux) wsfepy wsfev1py wsbfepy o wsbfev1py wsfexpy o wsfexv1py wsmtxpy
Herramienta siacutemilSIAPRECE(WindowsLinux)
receexe recepy rece1exe rece1py recebexe recebpy recexexe recexpy recemexe recempy
Informacioacuten General PyAfipWs Proyecto Version 1 Bonos FiscalesElectroacutenicos
Factura ElectroacutenicaExportacioacuten Proyecto Matrix
DocumentacioacutenTeacutecnica (Manual) WSFE WSFEv1 WSBFE WSFEX WSMTXCA
Nombre de servicioparaWSAACreateTRA
wsfe wsfe wsbfe wsfex wsmtxca
Meacutetodo Solicitud deAutorizacioacuten CAE oinformacioacuten deCAEA
Aut (CAE) CAESolicitar CAEARegInformativo
Authorize (CAE) Authorize (CAE) AutorizarComprobante InformarComprobanteCAEA
Tabla comparativa Webservices 14
Meacutetodos para CAEA(anticipado)
CAEASolicitarCAEAConsultar
SolicitarCAEAConsultarCAEAEntreFechasConsultarCAEA (emulado)
Campo ID(identificador uacutenico) en Aut en Authorize en Authorize
Reproceso siacute (realizado por AFIP) automaacutetico (emulado en lainterfaz) siacute (realizado por AFIP) siacute (realizado por AFIP) automaacutetico (emulado en la interfaz)
Campoproductosservicios presta_serv=SN concepto=123 tipo_expo=123 concepto=123
Campomonedacotizacioacuten moneda_id moneda_ctz imp_moneda_id
imp_moneda_ctz moneda_id moneda_ctz moneda_id moneda_ctz
MeacutetodoCrearFactura oAut
id presta_servtipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_totalimp_tot_concimp_neto impto_liqimpto_liq_rniimp_op_exfecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta
concepto tipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_total imp_tot_concimp_neto imp_iva imp_tribimp_op_ex fecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz
tipo_doc nro_doczona tipo_cbtepunto_vta cbte_nrofecha_cbte imp_totalimp_neto impto_liqimp_tot_concimpto_liq_rniimp_op_ex imp_percimp_iibbimp_perc_munimp_internosimp_moneda_idImp_moneda_ctz
tipo_cbte punto_vtacbte_nro fecha_cbteimp_total tipo_expopermiso_existentedst_cmp clientecuit_pais_clientedomicilio_clienteid_impositivomoneda_id moneda_ctzobs_comerciales obsforma_pago incotermsidioma_cbteincoterms_dsfecha_pago)
concepto tipo_doc nro_doctipo_cbte punto_vta cbt_desdecbt_hasta imp_total imp_tot_concimp_neto imp_subtotal imp_tribimp_op_ex fecha_cbtefecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz obs
MeacutetodoAgregarItem(detalle de artiacuteculo)
ncm sec ds qtyumed precio bonifiva_id imp_total
codigo ds qty umedprecio imp_total bonif
u_mtx cod_mtx codigo ds qtyumed precio bonif cod_ivaimp_iva imp_subtotal
MeacutetodoAgregarCbteAsoc(comprobantesasociados)
tipo_cbte pto_vta nro_cbteCUIT fecha
tipo_cbte pto_vtanro_cbte cuit_cbte tipo_cbte pto_vta nro_cbte fecha
MeacutetodoAgregarPermiso(permisos deembarque)
permiso_id pais_dst
MeacutetodoAgregarIVA(subtotales de aliacutecuotade iva)
iva_id base_imp importe iva_id base_imp importe
MeacutetodoAgregarTributo(otros impuestos)
tributo_id ds base_imp alicimporte tributo_id ds base_imp alic importe
Meacutetodo para consultarpuntos de ventahabilitados
ParamGetPtosVentaConsultarPuntosVentaCAEConsultarPuntosVentaCAEA
Meacutetodo pararecuperar un
CompConsultar GetCMP GetCMP ConsultarComprobante
Tabla comparativa Webservices 15
comprobanteMeacutetodo para obteneruacutetlimo nordmcomprobante
RecuperaLastCMP CompUltimoAutorizado GetLastCMP GetLastCMP CompUltimoAutorizado
Meacutetodos para obtenertablas de paraacutemetros
ParamGetTiposCbteParamGetTiposConceptoParamGetTiposDocParamGetTiposIvaParamGetTiposMonedasParamGetTiposOpcionalParamGetTiposTributosParamGetCotizacionParamGetPtosVenta
GetParamMonGetParamTipoCbteGetParamUMedGetParamTipoIVAGetParamNCM
GetParamMonGetParamTipoCbteGetParamTipoExpoGetParamIdiomasGetParamUMedGetParamIncotermsGetParamDstPaisGetParamDstCUITGetParamCtz
ConsultarComprobanteConsultarTiposComprobanteConsultarTiposDocumentoConsultarAlicuotasIVAConsultarCondicionesIVAConsultarMonedasConsultarUnidadesMedidaConsultarTiposTributoConsultarCotizacionMoneda
SEUO
Notas Generales
Convencioacuten de nombres si bien por transparencia se tratoacute de utilizar los nombres de los meacutetodosdefinidos en las especificaciones teacutecnicas se han cambiado los nombres de paraacutemetros y meacutetodosauxiliares para simplificar y unificar las interfaces manteniendo cierta coherencia entre los distintoswebservices por lo que algunas denominaciones internas pueden variar respecto a lasespecificaciones teacutecnicas de AFIP
bull
Esta tabla contiene un resumen de las consideraciones generales revisar la normativa vigenteespecificaciones y documentacioacuten teacutecnica actualizada para contemplar los casos particulares Ademaacutesse respetan las descripciones de servicios (WSDL) por ej si bien AFIP publica la especificacioacutenteacutecnica RG 2485 - Manual para el desarrollador V25 el webservice sigue siendo WSFEv1 ver RG 2485 - WSFEV1 - Manual para el desarrollador V26 RG 2904 - WSMTXCA - Manual para elDesarrollador - V02 RG 2758 - wsfex - Manual del desarrollador - V011 WSBFEV1 BonosFiscales Electroacutenicos Manual para el desarrollador V11
bull
Todas las facturas generadas en PDF o formatos similares pueden incluir el detalle de las operaciones(artiacuteculos coacutedigos descripcioacuten precio unitario etc) independientemente de lo que obligue ainformar AFIP en cada webservice No se podriacutea optar por utilizar el WSMTXCA (con detalleRG2904) si no ha recibido notificacioacuten por juez administrativo de AFIP en general corresponde elWSFEv1 (sin detalle RG2485 etal) para la mayoriacutea de los contribuyentes Para emitir facturas conCAEA (coacutedigo de autorizacioacuten electroacutenico anticipado) se deben cumplir ciertas condiciones(cantidad miacutenima de facturas por mes) en general solo aplicable a Auto-Impresores y GrandesContribuyentes
bull
La numeracioacuten de los comprobantes comienza de 1 por cada punto de venta y tipo de comprobante(no se comparten talonarios como con la facturacioacuten tradicional) Incluso cada webservicegeneralmente requiere dar de alta un punto de venta exclusivo No se puede continuar la numeracioacutenprevia ni de otro webservice
bull
La fecha de los comprobantes no puede ser anterior al uacuteltimo emitido pero generalmente se puedeautorizar facturas con fecha entre 5 a 10 diacuteas en el pasado o en el futuro por contingencias(dependiendo del webservice y si es servicios o productos) Ver meacutetodo de consultas y recupero decomprobantes No se podraacute emitir comprobantes antes de la fecha indicada en el formulario deEmpadronamiento (por ej si se eligioacute el inicio en Julio2015 no se pueden emitir facturas con fechade junio)
bull
En caso de inoperatividad del servidor de AFIP se deberiacutea emitir facturas tradicionales y presentar unformulario multinota en la agencia indicando las facturas realizadas manualmente y dejandoconstancia del motivo Para maacutes informacioacuten ver RG2485 Art 33
bull
Notas Generales 16
Se debe confirmar los temas de normativaslegislacioacuten con un Contador Puacuteblico Nacional debidamentehabilitado y con experiencia en el tema
Disclaimer - Aviso Legal
Toda informacioacuten es proporcionada a Titulo Informativo El programa es software libre liberado bajo licenciaGPLv3 y se entrega como estaacute sin garantiacuteas expliacutecitas ni implicitas de ninguacuten tipo incluyendo sin limitacioacutenpeacuterdida de ganancias interrupcioacuten de negocios peacuterdida de programas u otros datos en sistemas decomputacioacuten o cualquier otro reclamo Al usarlo acepta hacerlo bajo su propia responsabilidad conociendo lanormativa y reglamentaciones existentes
Instalacioacuten
Descargas
Bajar y Ejecutar el instalador
Importante ver Actualizaciones para novedades importantes instaladores y cambios recientes
Recomendado Instalador unificado (conteniendo la interfaz para todos los servicios web para homologacioacuten-solo evaluacioacutenpruebas-)
Windows 32 bits
PyAfipWs-272171-32bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSFEv1 WSMTXCAWSFEXv1WSBFEv1 WSCT WSFECred WSCDC WSCOC PyFEPDF PYI25 y PYEMAILWS_SR_Padron COT IIBB Arba Granos -WSLPG y WSCTG- Pecuarios- WSLSP WSLUMWSLTV Trazabilidad Medicamentos Trazabilidad de Productos Meacutedicos Trazabilidad dePrecursores Quiacutenicos Trazabilidad de Productos Agroquiacutemicos Fitosanitarios Trazabilidad deProductos Veterinarios) Recomendado para desarrolloevaluacioacuten
bull
PyAfipWs-271949-32bit+wsaa_211c+wsfev1_119a-typelibexe Instalador de desarrolloactualizado -para referenciar viacutea libreriacutea de tipos- (TypeLib) Soacutelo incluye WSAA y WSFEv1
bull
Windows 64 bits
PyAfipWs-271872-64bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSBFE WSFEv1 WSFEXv1WSMTXCA PyFEPDF PYI25 y PYEMAIL Granos -WSLPG y WSCTGv3- COT IIBB ArbaTrazabilidad Medicamentos y Agroquimicos) Recomendado para desarrolloevaluacioacuten
bull
Consultar por otros webservices y sistemas operativos
IMPORTANTE Los instaladores publicados son solo para evaluacioacuten por lo que pueden no estaractualizados con los uacuteltimos ajustes en los servidores yo ejemplos Ver instructivo Instalacioacuten Codigo Fuente( video explicativo) o consultar por soporte comercial
Los ejemplos completos del uso de la interfase en Visual Basic Visual Foxpro y otros lenguajes se puededescargar desde
Disclaimer - Aviso Legal 17
GitHub (repositorio actualizado) o Google Code (histoacuterico)bull
Para guias iniciales ver base de datos con ejemplos completos de WSFEv1 y WSFEX (implementacioacuten dereferencia)
factura_electronicamdb MS Access 2000 o sup programado en VBAbull pyafipwsmdb MS Access 97 programado en VBA (nuevo con FCE)bull pyafipws2kmdb MS Access 2000 o sup programado en VBA (versioacuten anterior)bull
IMPORTANTE las uacuteltimas versiones incorporan nuevas funcionalidades y deben ser testeadas con susistema antes de ser instaladas en produccioacuten De encontrar problemas de instalacioacuten (por causas del sistemaoperativo o similar) que impidan crear el objeto o conectarse al webservice se recomienda utilizar lasversiones anteriores o registrar manualmente los componentes de forma autoacutenoma con --register VerInstalacioacuten Manual para maacutes detalles Recordamos que este tipo de incidentes pueden ser consultados con elsoporte comercial o soporte comunitario ver Maacutes Informacioacuten
Incidencias Conocidas Dado que existen varias versiones dependiendo de que sistema operativo se utiliceen general no deberiacutea haber problemas de instalacioacuten pero puede haber cuestiones de permisos de acceso poliacuteticas de seguridad en algunos entornos Windows (por ej Permission Denied) En esos casosrecomendamos instalarlo como Administrador o darle permisos de modificacioacuten (Propiedades Solapa deSeguridad) al usuario del sistema operativo en la carpeta del componente (generalmente CArchivos deprogramaPyAfipWs o Program Files) Ver Permisos en Windows para mayor informacioacuten
Se recomienda desinstalar cualquier versioacuten anterior y borrar la carpeta de instalacioacuten para evitar archivostemporales residentes o temas similares
Instalacioacuten Manual Avanzada
Para la interfaz COM cada webservice tiene su DLL o EXE que puede ser instalado manualmente (norecomendado en general ya que no verifica si el archivo esta en uso no desinstala automaacuteticamente la versioacutenanterior entre otros temas que pudieran surgir)
Instalacioacuten manual pyafipwsexe --register o utlizar regsvr32 pyafipwsdllbull Desinstalacioacuten manual pyafipwsexe --unregister o utlizar regsvr32 upyafipwsdll
bull
El proceso es similar para instalar la interfaz a otros webservices (cambiando pyafipws por wsfev1wsfexv1 etc seguacuten corresponda por ej wsfexv1exe --register) Tambieacuten se puede registrardirectamente con python python wsaapy --register
Ambos comandos de instalacioacuten son similares pero instalan la interfaz de manera distinta
Embebida (InProcServer) registrando la biblioteca DLL con regsvr32 cuando se invoque a lainterfaz se carga en el mismo proceso del programa principal
bull
Independiente (LocalServer) ejecutando el programa EXE con --register cuando se invoque a lainterfaz se crea un nuevo proceso externo al programa principal (se veraacute el ejecutable por ej en eladministrador de tareas)
bull
NOTA solo es necesario registrar el EXE o la DLL (no ambas) En general es conveniente registrar las DLLpara que se cargue como una libreriacutea compartida embebida (InProcServer) y evitar temas de
Descargas 18
permisosfirewall ya que el EXE registra un proceso independiente (LocalServer) con sus implicancias(pueden surgir temas de permisosfirewall en ciertos sistemas operativos pero se ejecuta independientementeeliminando inconvenientes de dependencias y errores de carga)
Instalacioacuten Silenciosa (Desatendida)
Si bien el instalador muestra un asistente para la instalacioacuten (seleccioacuten del idioma licencia y directorioprogreso) es posible instalarlo sin intervencioacuten del usuario en segundo plano sin mostrar pantalla algunacon
instalador-PyAfipWs-125c-homoexe S D=CPyAfipWS
Las opciones son
S indica instalacioacuten silenciosabull D indica el directorio de instalacioacutenbull
Guiacutea de Instalacioacuten
La interfase se instala automaacuteticamente en CArchivos de Programa en el directorio elegido en elsegundo paso de instalacioacuten como se describe a continuacioacuten
Firma Digital (Editor Comprobado)
Como paso previo de seguridad al ejecutar el instalador verificar que el mismo haya sido firmado pornosotros debiendo aparecer
Editor Comprobado Sistemas Agiles (Mariano Reingart)bull
Consultar en caso de no comprobarse (o mencionar Editor Desconocido) ya que no seriacutea un instaladorcompilado originalmente por nosotros sin alteraciones
Paso 1 Seleccionar idioma
Idiomas disponibles I
Spanish espantildeol (predeterminado)bull English ingleacutesbull
Paso 2 Licencia
Para utilizar el software debe leer y aceptar la licencia
Paso 3 Direcorio de instalacioacuten
De manera predeterminada la interfaz se instalaraacute en una carpeta bajo el directorio estaacutendard de windows (porej CArchivos de Programa o CProgram Files) Se recomienda instalarla directamente en
Instalacioacuten Manual Avanzada 19
el directorio raiz (por ejCPYAFIPWS) para simplificar el acceso a las herramientas por linea de comandos
Paso 3 Finalizar instalacioacuten
Por uacuteltimo el instalador realizaraacute la instalacioacuten
Desinstalar versiones anterioresbull Crear el directorio de destinobull Extraer y copiar los archivosbull Crear desinstaladorbull Copiar configuracioacuten (RECEINI si corresponde)bull Registrar DLLbull
Puede ver el avance y estado final presionando el botoacuten Ver Detalles
Referenciar TypeLib
Ciertos instaladores (-typelib) incluyen una libreriacutea de tipos que es posible referenciar por ej en VB
Importante En general no es necesario referenciar el componente Invocando CreateObject deberiacuteafuncionar y devolveriacutea el objeto dinaacutemico en la mayoriacutea de los lenguajes de programacioacuten (VB VFP etc)
Maacutes informacioacuten
Soporte Comercial (asesoramiento inicial sin cargo de cortesiacutea -limitado y sin compromisos-)Web httpwwwsistemasagilescomartracwikiPyAfipWsdiams Por email facturaelectronicasistemasagilescomardiams Telefoacutenicamente (011) 4450-0716 y (011) 15-3048-921diams
bull
Soporte comunitario (gratuito)Sitio del proyecto httpwwwpyafipwscomardiams Grupo de noticiasdiscusiones httpgroupsgooglecomgrouppyafipwsdiams Coacutedigo Fuente httpsgithubcomreingartpyafipws (actual) y httpcodegooglecomppyafipws (histoacuterico)
diams
Incidencias httpsgithubcomreingartpyafipwsissuesdiams
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA)
Este servicio es necesario para acceder al resto de los servicios de negocios (ej Factura Electroacutenica) ofrecidospor la AFIP
Se debe generar un Ticket de Requerimiento de Acceso (TRA) firmarlo criptograacuteficamente (generando unmensaje CMS) que es enviacutea al servicio web para obtener un Ticket de Acceso (TA)
Esta interfase crea el mensaje en XML lo firma criptograacuteficamente y lo codifica en base-64 como lo requierela AFIP por lo que en general no es necesario realizar ninguno de estos pasos
Paso 3 Direcorio de instalacioacuten 20
Para maacutes informacioacuten oficial ver especificaciones teacutecnicas del WSAA y Arquitectura WS en el sitio de laAFIP
Importante es requerido tramitar los certificados para poder operar este webservice Para maacutes informacioacutenver Instructivos sobre Certificados
Objeto
El objeto COM se crea invocando a CreateObject(WSAA)bull
Meacutetodos
CreateTRA(service ttl) recibe el nombre del servicio (wsfe wsbfe wsfex wsctg etc) y eltiempo de vida (en segundos por defecto 2400) y devuelve un ticket de requerimiento de acceso(string con formato xml) Se puede revisar o modificar el xml devuelto (en general no es necesario)
bull
SignTRA(tra certificado clave_ privada passphrase) recibe el ticket derequerimiento de acceso (string con formato xml creado previamente) y las ubicaciones delcertificado y clave privada (o el contenido de los mismos) Firma el ticket y devuelve el mensaje CMS(string con formato xml) Importante El paraacutemetro opcional passphrase permite protejer la claveprivada por contrasentildea (Disponible a partir de la versioacuten 208) Tambieacuten se puede pasar el contenidode los archivos (como string) en certificado y clave_ privada (pudiendo ser guardados enla base de datos u otro tipo de almacenamiento)
bull
CallWSAA(cms url_webservice) Recibe el mensaje CMS (string con formato xml) y laURL del webservice Se conecta con el servidor remoto ejecuta el meacutetodo remoto LoginCMS ydevuelve el Ticket de Acceso (TA string con formato xml) generado por la AFIP Si no se especifiacutecaurl se utiliza servidores de homologacioacuten
bull
Conectar(cache url_webservice_wsdl proxy wrapper cacert) Nuevo Establece la conexioacuten con el servidor remoto recibe el directorio de archivos temporales la URL delWSDL (descripcioacuten del webservice) y proxy en formato usuarioclaveservidorpuerto Si no seespecifiacuteca url se utiliza servidores de homologacioacuten Parametros adicionales optativos wrapper es lalibreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor (CA)
bull
LoginCMS(cms) Nuevo Recibe el mensaje CMS (string con formato xml) ejecuta el meacutetodoremoto LoginCMS y devuelve el Ticket de Acceso (TA string con formato xml) generado por laAFIP Debe conectarse previamente con Conectar Establece los atributos Token Sign
bull
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido por defecto el ticket deacceso)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Expirado(fecha) Nuevo recibe una fecha (por defecto la fecha de expiracioacuten del uacuteltimo ticketde acceso generado) y verifica contra el reloj del equipo si dicha fecha ha expirado (en cuyo casodevuelve verdadero)
bull
Autenticar(service crt key [wsdl proxy wrapper cacert cachedebug]) Nuevo Meacutetodo unificado para obtener el ticket de acceso Almacena temporalmente elticket de acceso en un archivo en el directorio cache (debe tener permisos de escritura en esedirectorio) y automaacuteticamente lo reutiliza o solicita uno nuevo en caso de que no haya vencidoDisponible a partir de la versioacuten 207
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA) 21
Se recomienda comenzar a utilizar Conectar y LoginCMS en reemplazo de CallWSAA ya que los nuevosmeacutetodos tienen mejor manejo de errores pueden reutilizar la conexioacuten etc
Meacutetodos para Certificados
Los meacutetodos adicionales para el manejo de certificado permiten automatizar el procesamiento y generarpedidos de certificado directamente con este componente sin necesidad de utilizar comandos externosNuevo Disponible a partir de la versioacuten 210
AnalizarCertificado(crt) Carga un certificado digital y extrae los campos maacutesimportantes (establece propiedades Identidad Caducidad Emisor)
bull
CrearClavePrivada(self filename=privadakey key_length=2048pub_exponent=0x10001 passphrase=) Crea una clave privada (private key) necesariapara generar un certificado Queda referenciada internamente para poder crear el CSR (ver siguientemeacutetodo) por lo que las dos operaciones deben hacerse en la misma instancia Puede utilizarse unacontrasentildea (passphrase) para mayor seguridad (especialmente si la clave privada va a alojarse enuna carpeta compartida)
bull
CrearPedidoCertificado(self cuit= empresa=nombre=pyafipwsfilename=empresacsr) Crear un certificate signing request(X509 CSR) - pedido de certificado a gestionar por Clave Fiscal de AFIP para obtener el crt Se debeindicar el CUIT del representante nombre de la empresa (tal cual aparece en la constancia deinscripcioacuten) nombre de fantasia alias del certificado (identificando punto de venta sistema defacturacioacuten etc) y nombre del archivo a generar (recomendable ruta absoluta a una carpeta conpermisos de escritura)
bull
wsaaAnalizarCertificado(reingartcrt)print wsaaIdentidadprint wsaaCaducidad (Fecha de vencimiento)print wsaaEmisorprint wsaaCertX509
Por linea de comando puede ejecutarse el moacutedulo wsaapy con el meacutetodo --analizar
WSAA_cliexe --analizar reingartcrt reingartkey
Atributos
Token el el coacutedigo de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Sign el la firma de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Version versioacuten de la interfase (ej 16)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Identidad Caducidad Emisor CertX509 Nuevo campos del certificado analizado(actualizacioacuten 210 o posterior)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Meacutetodos 22
Ejemplo
Dim WSAA As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA)service = wsfe servicio a accederttl = 2400 tiempo de vida en segundostra = WSAACreateTRA(service ttl) Especificar la ubicacion de los archivos certificado y clavesPath = CurDir() + Certificado = reingartcrt certificado es el firmado por la afipClavePrivada = reingartkey clave privada usada para crear el cert
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
WSAALanzarExcepciones = False revisar Excepcion para controlar errores
Llamar al web service para autenticar anteriormente ta = WSAACallWSAA(cms httpswsaaafipgovarwsservicesLoginCms) Hologacioacuten ahora cache = Directorio para archivos temporales (dejar en blanco para usar predeterminado)wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl homologacioacutenproxy = usar usuarioclaveservidorpuertook = WSAAConectar(cache wsdl proxy)ta = WSAALoginCMS(cms) otener ticket de acceso
If WSAAExcepcion ltgt Then MsgBox WSAAExcepcion vbCritical ExcepcioacutenEnd If
Obtener Token y Sign de autorizacioacutenToken = WSAATokenSign = WSAASign
El Ticket de Acceso contiene el Token (coacutedigo) y Sign (firma) son los elementos que se utilizan en los otrosservicios web para lograr acceso a los mismos
Estos datos se pueden usar por un periacuteodo de tiempo (40 minutos modificable ver Reutilizacioacuten de Ticket deAcceso) siendo necesario volver a invocar el WSAA solo al finalizar este periacuteodo para obtener nuevos Tokeny Sign
Errores
El WSAA informa errores alfanumeacutericos (ErrNumber vbObjectError = 0) debiendo verificar la descripcioacuten(ErrDescription) Entre ellos los maacutes comunes son
cmscertexpired cmscertinvalid cmscertuntrusted El certificado no fue firmado por la AFIPexpiroacute es invaacutelido no se confiacutea en su emisor o no coincide la fuente Se debe revisar o emitircorrectamente los certificados Ver traacutemite de Generacioacuten
bull
xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid El tiempo degeneracioacutenexpiracioacuten es invaacutelido Debe sincronizar relojes con el servidor de la AFIP En Windows
bull
Ejemplo 23
propiedades del reloj habilitar Hora de Internet ingresar timeafipgovarwsnunavailable wsaaunavailable servicio no disponible momentaacuteneamentebull coenotAuthorized Computador no autorizado a acceder los servicios de AFIP Ver traacutemite deAsociacioacuten
bull
cmscertuntrusted Certificado no emitido por AC de confianza Revisar URL para ambiente correcto(produccioacutenhomologacioacuten) y Comprobacioacuten de Autenticacioacuten
bull
wsnnotFound Servicio informado inexistente se debe crear el ticket para un servicio vaacutelido (wsfewsfex etc)
bull
coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (verreutilizacioacuten del ticket de acceso abajo)
bull
Para maacutes errores frecuentes ver Falla SOAP WSAA
Reutilizacioacuten de Ticket de Acceso
Ante problemas de timeout y java socket read failed al intentar solicitar ticket de acceso (WSAA) ons1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (en generalpor sobrecarga o limitacioacuten de AFIP) es posible mitigar el tema reusando un ticket de acceso (token y sign)por hasta 12 hs (40 minutos por defecto) estableciendo el tiempo de vida del ticket pasandolo en el segundoparaacutemetro de CreateTRA (ttl en segundos en este manual esta documentado en secciones previas)
Por ej para un tiempo de vida de 10 hs (103600 segundos valor recomendado para evitar problemas desincronizacioacuten de relojes)
tra = WSAACreateTRA(wsfe 36000)
Luego de solicitar el ticket de acceso el Token y Sign puede ser usado por el periacuteodo especificado (dichosvalores pueden almacenarse en memoria en un archivo o base de datos etc)
Importante se puede guardar WSAAToken y WSAASign en una variable global y luego reutilizarlocada vez que se genera una factura
luego de llamara WSAALoginCMS o WSAACallWSAA o WSAAAutenticar
token = WSAATokensign = WSAASign
guardar token y sign en la base de datos archivo o una variable global
antes de llamar a WSFEv1CAESolicitar WSFEXv1Authorize o similar
WSFEv1Token = tokenWSFEv1Sign = sign
En general no es necesario verificar la fecha del ticket de acceso ya que en general es vaacutelido por 12 horas
Igualmente desde las versiones actualizadas de WSAA (202 o superior) es posible llamar al meacutetodoWSAAExpirado() antes de utilizar el ticket de acceso y este devolveraacute Verdadero si el ticket de accesosigue siendo vaacutelido (dada la fecha del reloj del equipo) o Falso si ha vencido su plazo y debe solicitarse unnuevo ticket de acceso
Errores 24
Por ejemplo luego de obtener el Token y Sign (ya sea por CallWSAA o LoginCMS) obtener y guardar lafecha de expiracioacuten
expiracion = WSAAObtenerTagXml(expirationTime)
Luego antes de usar el Token y Sign (por ej antes de llamar a WSFEv1 WSFEX etc) preguntar si el TA esvaacutelido (no ha expirado)
expiro = WSAAExpirado(expiracion)
Si expiro es True se debe generar otro ticket de acceso porque ha vencido su validez (con este meacutetodo sepuede guardar y verificar independientemente la fecha de expiracioacuten por cada servicio a usar wsfe wsfexwsbfe wsmtxca etc)
Si se comparte el certificado entre distintas maacutequinas o programas debe compartirse el ticket de acceso (porej guardandolo en un archivo o base de datos) y realizar esta verificacioacuten en cada instancia
Ejemplo completo en
reusar_ticket_accesobas (VB) y reusar_ticket_acceso_avanzadoprg (VFP) maacutes avanzadoguardando el TA en un archivo (y poder compartirlo por red o entre varios programas)
bull
reusar_ticket_accesoprg (VFP) y reusar_ticket_acceso_simplebas (VB) simplificado usando el TAen memoria
bull
Nota No es necesario guardar el ticket de acceso completo en un archivo para reutilizarlo Este ejemplo esuacutetil si se debe compartir el ticket entre diferentes programas u equipos en una red Si se usa en un soloprograma y este permanece abierto se puede mantener el valor del Token y Sign directamente en memoria(por ej en una variable) y reusarlo por hasta 12 hs (generalmente solicitandolo al iniciar el programa ymanteniendolo por una jornada de trabajo completa) Tambieacuten se podriacutea almacenar el valor de Token ySign en una base de datos o similar
Ejemplo simple reutilizacioacuten de TA
Ejemplo completo de reuso (usando el ticket de acceso en memoria)
Function Autenticar(TA as String = ) as String Procedimiento para autenticar con AFIP y reutilizar el ticket de acceso Llamar antes de utilizar WSAAToken y WSAASign (WSAA debe estar definido a nivel de moacutedulo)Dim ok expiracion solicitar token sign
cargar ticket de acceso previo (si no se mantiene WSAA instanciado en memoria)If TA ltgt Then
ok = WSAAAnalizarXml(TA)End If
revisar si el ticket es vaacutelido y no ha expirado expiracion = WSAAObtenerTagXml(expirationTime) DebugPrint Fecha Expiracion ticket expiracion
If IsNull(expiracion) Then solicitar = True solicitud inicial
Else solicitar = WSAAExpirado(expiracion) chequear solicitud previa
End If
Reutilizacioacuten de Ticket de Acceso 25
If solicitar Then Generar un Ticket de Requerimiento de Acceso (TRA)
tra = WSAACreateTRA()
uso la ruta a la carpeta de instalaciograven con los certificados de prueba ruta = WSAAInstallDir + DebugPrint ruta ruta
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra ruta + reingartcrt ruta + reingartkey) Cert Demo
ok = WSAAConectar( httpswsaahomoafipgovarwsservicesLoginCms) Homologacion
Llamar al web service para autenticar TA = WSAALoginCMS(cms)
Else DebugPrint no expirado Reutilizando
End If DebugPrint WSAAObtenerTagXml(destination)
Obtener las credenciales del ticket de acceso (desde el XML por si no se conserva el objeto WSAA) token = WSAAObtenerTagXml(token) sign = WSAAObtenerTagXml(sign)
Al retornar se puede utilizar token y sign para WSFEv1 o similar Devuelvo el ticket de acceso (RETURN) para que el programa principal lo almacene si es necesario
Autenticar = TAEnd Function
Importante en este caso WSAA debe ser un objeto global y persistente (al menos por lo que dure elprograma en produccioacuten) no se debe instanciar por cada llamada a Autorizar de lo contrario se perderaacuten elToken y Sign no reutilizando el ticket de acceso Si esto no es posible se debe persistir el Ticket de Accesoen un archivo o base de datos compartida
Ejemplo avanzado reutilizacioacuten de TA
Ejemplo completo de reuso (almacenando el ticket de acceso en un archivo tambieacuten podriacutea usarse una tablaen base de datos sesioacuten u otro medio durable)
inicializo las variablesToken = Sign =
busco un ticket de acceso previamente almacenadoIf Dir(taxml) ltgt Then
leo el xml almacenado del archivo Open taxml For Input As 1 Line Input 1 ta_xml Close 1
analizo el ticket de acceso previo ok = WSAAAnalizarXml(ta_xml)
If Not WSAAExpirado() Then puedo reusar el ticket de acceso
Token = WSAAObtenerTagXml(token) Sign = WSAAObtenerTagXml(sign)
End IfEnd If
Si no reuso un ticket de acceso solicito uno nuevoIf Token = Or Sign = Then
Ejemplo simple reutilizacioacuten de TA 26
Generar un Ticket de Requerimiento de Acceso (TRA) tra = WSAACreateTRA(wsfe 43200) 360012hs
Especificar la ubicacion de los archivos certificado y clave privada cert = reingartcrt certificado de prueba clave = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra cert clave)
If cms ltgt Then Llamar al web service para autenticar (cambiar URL para produccion)
wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl ok = WSAAConectar( wsdl) ta_xml = WSAALoginCMS(cms)
If ta_xml ltgt Then guardo el ticket de acceso en el archivo
Open taxml For Output As 1 Print 1 ta_xml Close 1
End If Token = WSAAToken Sign = WSAASign
End If reviso que no haya errores
DebugPrint Excepcion WSAAExcepcionIf WSAAExcepcion ltgt Then
DebugPrint WSAATracebackEnd If
End If
Imprimir los datos del ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint Token + TokenDebugPrint Sign + Sign
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA
Importante A partir de la actualizacioacuten 207 es posible utilizar el meacutetodo unificado Autenticar (queautomaacuteticamente contempla el tema de reutilizacioacuten al guardar el Ticket de Acceso en un archivo temporal enel directorio cache) en conjuncioacuten con SetTicketAcceso
Crear la instancia (usar CreateObject en VB y similares)wsaa = WSAA()
servidor de AFIP para homologacioacuten (cambiar para produccioacuten)wsaa_url = httpswsaahomoafipgovarwsservicesLoginCmswsdl
parametros opcionalesproxy = solo usar si hay servidor intermediowrapper = httplib2 (default) pycurl (depende proxy)cacert = confafip_ca_infocrt autoridades certificantes (servidores)cache = directorio archivos temporales (verificar permisos)debug = False depuracioacuten interna (en VB es palabra reservada usar otro nombre)
obtener el TA para pruebasta = wsaaAutenticar(wsfe reingartcrt reingartkey wsaa_url proxy wrapper cacert cache debug)
utilizar las credencialesprint wsaaTokenprint wsaaSign
establecer Ticket de Acceso en un solo paso (Nuevo meacutetodo)wsfev1SetTicketAcceso(ta)
Ejemplo avanzado reutilizacioacuten de TA 27
Nota dependiendo del sistema operativo deberaacute conceder permisos de acceso de escritura en la carpeta cachepara poder almacenar el ticket de acceso Tambieacuten es posible pasar el 8vo paraacutemetro cache de Autenticar conotro directorio para los archivos temporales Ver Permisos en Windows para maacutes informacioacuten
Obtencioacuten de Atributos Avanzados WSAA
En versiones recientes (204a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosdel ticket de acceso (uacutetiles para depuracioacuten y solucioacuten de errores)
Origen (Source) WSAAObtenerTagXml(source)bull Destino (Destination) WSAAObtenerTagXml(destination)bull ID Uacutenico WSAAObtenerTagXml(uniqueId)bull Fecha de Generacioacuten WSAAObtenerTagXml(generationTime)bull Fecha de Expiracioacuten WSAAObtenerTagXml(expirationTime)bull
Si ha ocurrido error (llamar previamente a WSAAAnalizarXml(XmlResponse) para analizar larespuesta)
Codigo de Fallo WSAAObtenerTagXml(faultcode)bull Mensaje de Fallo WSAAObtenerTagXml(faultstring)bull Servidor WSAAObtenerTagXml(ns3hostname)bull
Estos datos son uacutetiles para determinar problemas con el certificado ver Comprobacioacuten de AutenticacioacutenWSAA
Servicio Web de Factura Electroacutenica (WSFE)
Este servicio es ofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFE en el sitio de la AFIP
httpwswhomoafipgovarfiscaldocsWSFEWSFE-ManualParaElDesarrollador-090317pdf
Objeto
El objeto COM se crea invocando a CreateObject(WSFE)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA 28
UltNro() recuperar el uacuteltimo nuacutemero de transaccioacuten (id) Devuelve el uacuteltimo valor de secuenciautilizado al pedir autorizacioacuten Uso opcional
bull
Aut(id presta_serv tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto impto_liqimpto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago[fecha_serv_desde] [fecha_serv_hasta]) autoriza la emisioacuten de factura electroacutenicarecibe el id de secuencia (recuperado por UltNro) presta_serv en 1 si se esta facturando servicios (eneste caso es obligatorio el uso de la fecha de servicio desde y hasta) los datos de la factura a emitir ydevuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) Ver ejemplo para el detalle de losparaacutemetros
bull
RecuperaLastCMP(punto_venta tipo_comprobante) recibe el punto de venta y tipode comprobante (stringsenteros) devuelve el uacuteltimo nuacutemero de comprobante autorizado Usoopcional
bull
RecuperaQty() recupera cantidad maacutexima de registros de detalle (por el momento no es demayor utilidad ya que por simplicidad se enviacutea 1 registro de detalle por autorizacioacuten) Uso opcional
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Motivo Reproceso valores complementarios que retorna Autbull CbtDesde CbtHasta FechaCbte` nuacutemeros y fecha de comprobante autorizado queretorna Aut
bull
ImpTotal ImpNeto ImptoLiq` importes total neto e IVA que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 16)bull
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a realizar (ej Factura A solopara tipo_doc = 80 CUIT Facturas B por lote hasta $1000- etc)
bull
Ver especificaciones teacutecnicas del WSFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Meacutetodos 29
Ejemplo
Autorizar una factura electroacutenica nacional a modo de ejemplo (ficticia)
Crear objeto interface Web Service de Factura Electroacutenica
Set WSFE = CreateObject(WSFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEToken = WSAATokenWSFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSFECuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (servidor de homologacioacuten)ok = WSFEConectar(httpswswhomoafipgovarwsfeserviceasmx)
Llamo a un servicio tonto para obtener el estado (opcional)WSFEDummyDebugPrint appserver status WSFEAppServerStatusDebugPrint dbserver status WSFEDbServerStatusDebugPrint authserver status WSFEAuthServerStatus
Recupera cantidad maacutexima de registros (opcional)qty = WSFERecuperarQty()
Recupera uacuteltimo nuacutemero de secuencia IDLastId = WSFEUltNro()
Recupero uacuteltimo nuacutemero de comprobante (opcional)tipo_cbte = 1 punto_vta = 1LastCBTE = WSFERecuperaLastCMP(punto_vta tipo_cbte)
Establezco los valores de la factura o lote a autorizar 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000fecha_cbte = Fecha fecha_venc_pago = Fecha Fechas del periacuteodo del servicio facturado (solo si presta_serv = 1)fecha_serv_desde = Fecha fecha_serv_hasta = Fecha
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEAut(id presta_serv _ tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ impto_liq impto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desde fecha_serv_hasta) solo pasar si presta_serv=0MsgBox CAE amp cae amp Vencimiento amp WSFEVencimientoExit Sub
ManejoError Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipMsgBox ErrDescription vbCritical + vbRetryCancel _
Error amp (ErrNumber - vbObjectError) amp en amp ErrSource
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz (ver aclaracioacuten)
Ejemplo 30
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE)
Se debe llamar al meacutetodo Aut con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a UltNro puede utilizarse un dato local secuencial
bull
presta_serv 0 o 1 para indicar si es una factura de serviciosbull tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (1 Factura A 6 Factura B etc)bull punto_vta Nordm de punto de venta (debe estar autorizado)bull cbt_desde cbt_hasta Nordm de comprobante (si es un solo comprobante repetir Nordm)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 5 diacuteas)bull fecha_venc_pago Fecha liacutemite de vencimiento para el pago de la facturabull fecha_serv_desde fecha_serv_hasta Fechas del periacuteodo de servicios prestadobull
Ver todos los tipos de comprobante httpwswhomoafipgovarfiscaldocsWSFECodCpbtetxt
Ver todos los tipos de documentos httpwswhomoafipgovarfiscaldocsWSFECodDocIDtxt
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEResultado =A (Aceptado) y WSFEVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o los servidores de la AFIP no funcionan o nodevuelven la respuesta esperada
bull
cae = NULL El servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEResultado = R (Rechazado) y WSFEMotivo con los diversos motivos de rechazoproporcionados por el webservice
WSFEMotivo = 00 o NULL no hay error (solo como referencia)diams WSFEMotivo = 01 CUIT informada no es RIdiams WSFEMotivo = 02 CUIT no autorizada a facturar electroacutenicamentediams WSFEMotivo = 03 CUIT registra inconvenientes con domicilio fiscaldiams WSFEMotivo = 04 Punto de venta no se encuentra declaradodiams WSFEMotivo = 05 Fecha del comprobante incorrectadiams WSFEMotivo = 06 CUIT no puede emitir comprobantes clase Adiams WSFEMotivo = 07 para comprobantes clase A debe indicar CUITdiams WSFEMotivo = 08 CUIT informada es invaacutelidadiams WSFEMotivo = 09 CUIT informada no existe en el padroacutendiams WSFEMotivo = 10 CUIT informada no corresponde a un RIdiams WSFEMotivo = 11 el nordm de comprobante no es correlativo o fecha no correspondediams WSFEMotivo = 12 el rango informado se encuentra autorizadodiams WSFEMotivo = 13 LA CUIT INDICADA SE ENCUENTRA COMPRENDIDA EN ELREGIMEN ESTABLECIDO POR LA RESOLUCION GENERAL Ndeg 2177 YO EN ELTITULO I DE LA RESOLUCION GENERAL Ndeg 1361 ART 24 DE LA RG Ndeg 2177-
diams
bull
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE) 31
Para ver la lista completa de coacutedigos de motivos F136 httpwswhomoafipgovarfiscaldocsWSFEF136_MOTIVOStxt
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia En el caso de que la conexioacuten se interrumpa luego de que la AFIP registre la factura y antes deque la informacioacuten del CAE llegue al equipo la uacutenica alternativa es repetir la llamada a Aut con los mismosdatos (incluido el ID original) para obtener el CAE generado anteriormente En ese caso se WSFEReprocesoes S para indicar que el CAE se ha recuperado Por esto es importante guardar el ID o utilizar un dato local
Ver httpwswhomoafipgovarfiscaldocsWSFEWSFE-GuiaAdicionalParaElProgramadorpdf
Servicio Web de Bono Fiscal Electroacutenico (WSBFE)
EL WSBFE (Bonos Fiscales Electroacutenicos) es un Servicio Web de la AFIP para Facturas Electroacutenicas deBienes de Capital correspondiente al Artiacuteculo 3 de la Resolucioacuten General 25572009Este servicio esofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de cada item
A su vez el WSBFE devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva producto seguacuten NCM zonas unidades de medida Estas tablaspueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha devigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia delWSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSBFE en el sitio de la AFIP
httpwwwafipgovarwsWSBFEWSBFE-ManualParaElDesarrolladorpdf
httpwwwafipgovarwsWSBFEWSBFE-GuiaAdicionalParaElProgramadorpdf
La programacioacuten de la interfase WSBFE es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSBFE)bull
Servicio Web de Bono Fiscal Electroacutenico (WSBFE) 32
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(tipo_doc nro_doc zona tipo_cbte punto_vtacbte_nro fecha_cbte imp_total imp_neto impto_liq imp_tot_concimpto_liq_rni imp_op_ex imp_perc imp_iibb imp_perc_munimp_internos imp_moneda_id Imp_moneda_ctz) crea internamente una factura paraluego poder autorizarla recibe los datos de la factura a emitir Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarItem(ncm sec ds qty umed precio bonif iva_idimp_total) agrega internamente un item (linea de factura) a una factura para luego poderautorizarla recibe los datos del item a factura a emitir Ver ejemplo para el detalle de los paraacutemetros
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoIVA() GetParamUMed()GetParamNCM() recupera valores referenciales de coacutedigos de las tablas de paraacutemetros devuelveuna lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde- (verejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpNeto importe neto del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImptoLiq impuesto liquidado (IVA) del comprobante (del comprobante recuperado devuelto porGetCmp)
bull
Meacutetodos 33
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSBFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura de bienes de capital (bono fiscal electroacutenico) a modo de ejemplo (ficticia)
Dim WSAA As Object WSBFE As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSBFEtra = WSAACreateTRA(wsbfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada) Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten Una vez obtenido se puede usar el mismo token y sign por 24 horas
Crear objeto interface Web Service de Factura ElectroacutenicaSet WSBFE = CreateObject(WSBFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSBFEToken = WSAATokenWSBFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSBFECuit = 20267565393
Conectar al Servicio Web de Facturacioacutenok = WSBFEConectar(httpwswhomoafipgovarwsbfeserviceasmx) homologacioacuten
Establezco los valores de la factura a autorizarfecha = 20090530tipo_doc = 80 nro_doc = 23111111113zona = 0 Ver tabla de zonas
Errores 34
tipo_cbte = 1 Ver tabla de tipos de comprobantepunto_vta = 2 cbte_nro = 16fecha_cbte = fechaimp_total = 12100 imp_tot_conc = 000 imp_neto = 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000imp_perc = 000 imp_iibb = 000 imp_perc_mun = 000imp_internos = 000imp_moneda_id = 10 Ver tabla de tipos de monedaImp_moneda_ctz = 10000 cotizacioacuten de la moneda
Creo una factura (internamente no se llama al WebService)ok = WSBFECrearFactura(tipo_doc nro_doc _ zona tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total imp_neto impto_liq _ imp_tot_conc impto_liq_rni imp_op_ex _ imp_perc imp_iibb imp_perc_mun imp_internos _ imp_moneda_id Imp_moneda_ctz)
Agrego un itemncm = 73081000 Ver tabla de coacutedigos habilitados del NCMsec = Coacutedigo de la Secretariacutea (no usado por el momento)ds = Prueba Descripcioacuten completa del artiacuteculo (hasta 4000 car)umed = 1 kg Ver tabla de unidades de medidaqty = 10 cantidadprecio = 1050 precio neto (FacA) precio final (Facuras B)bonif = 500 descuentos (en positivo)iva_id = 5 21 ver tabla aliacutecuota de ivaimp_total = 12100 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSBFEAgregarItem(ncm sec ds qty umed precio bonif iva_id imp_total)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSBFEAuthorize(id)
If cae = Or WSBFEResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyElseIf WSBFEObs ltgt And WSBFEObs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyEnd If
MsgBox Resultado amp WSBFEResultado amp CAE amp cae amp _ Reproceso amp WSBFEReproceso amp _ Obs amp WSBFEObs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)
For Each evento In WSBFEEventosIf evento ltgt 0 Then
MsgBox Evento amp evento vbInformationEnd If
Next
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales del Nomenclador Comuacuten Mercosur habilitados
recupero tabla del nomenclador comuacuten del mercosur
Ejemplo 35
(codigo descripcioacuten (vigencia desde - hasta)) Ej 99999999 (item no incluiacutedo en el Beneficio Fiscal) (20070524 - 20091231)For Each x In WSBFEGetParamNCM() DebugPrint x Next
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSBFE)bull cbt_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull zona_id Zona (seguacuten tabla de paraacutemetros) - Por el momento 0bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull imp_moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull imp_moneda_ctz Cotizacioacuten de la moneda de la facturabull imp_perc Importe de las precepcionesbull imp_iibb Importe de las percepciones de ingresos brutosbull imp_perc_mun Importe de las percepciones municipalesbull imp_internos Importe de los impuestos internosbull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
ncm coacutedigo habilitado seguacuten el Nomenclador Comuacuten del Mercosur (NCM)bull sec coacutedigo de la secretariacutea (no utilizado por el momento pasar )bull ds Descripcioacuten completabull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull bonif Bonificacioacutenbull iva_id Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_total Importe total (incluyendo descuentos e IVA)bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEUltNro puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSBFEResultado =A (Aceptado) y WSBFEVencimiento Sino devuelve
Descripcioacuten de la obtencioacuten de CAE 36
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSBFEObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX)
EL WSFEX es un Servicio Web de la AFIP para Facturas Electroacutenicas de Exportacioacutencorrespondiente a la Resolucioacuten General 27582010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSBFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar los datos de exportacioacutenpermisos comprobantes asociados y el detalle de cada item
A su vez el WSFEX devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
Al igual que el WSBFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda idiomas terminos de comercio exterior paises y cuits unidades de medida etc Estastablas pueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen unafecha de vigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (adiferencia del WSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEX en el sitio de la AFIP
Manual para el desarrolladorpdf (version 0) Informacioacuten importante sobre la operatoriabull Manual para el desarrolladorpdf (version 1) Informacioacuten importante sobre la operatoria ( NuevaVersioacuten)
bull
FacturaElectronicaExportacion Informacioacuten general cambios ejemplos descargas y paraacutemetrosvigentes (puede estar ligeramente desactualizado)
bull
La programacioacuten de la interfase WSFEX es similar a WSBFE se recomienda revisarlo
WSFEX Versioacuten 1 (WSFEXv1)
Seguacuten RG306611 AFIP publicoacute una nueva versioacuten 1 (WSFEXv1) a entrar en vigencia obligatoria el31-12-2011 para maacutes informacioacuten ver Cambios WSFEXv1 respecto a WSFEXv0
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX) 37
Ambos webservices son muy similares por lo que se documenta en esta seccioacuten solo las diferenciasintroducidas
Importante Si bien se mantiene retrocompatibilidad para conectarse al nuevo webservice es necesarioutilizar el objeto WSFEXv1 y usar las nuevas URL
httpswswhomoafipgovarwsfexv1serviceasmxWSDL (homologacioacuten)bull httpsservicios1afipgovarwsfexv1serviceasmxWSDL (producciograven)bull
Aclaracioacuten WSFEXv1 es un nuevo webservice y AFIP ha agregado campos (bonificacioacuten) ha cambiadovarios tipos de datos (en importes cantidad de decimales) ha agregado coacutedigos de tablas de paraacutemetros(unidades de medida) y comprobantes asociados (remitos de tabaco) y ademaacutes realiza nuevas validacionespor lo que recomendamos probar exhaustivamente la interfaz con el desarrollo para exportacioacuten
Ajustes desarrollos de WSFEX a WSFEXv1
Si no utiliza las caracteriacutesticas nuevas es posible utilizar el coacutedigo desarrollado para WSFEX con nuestrainterfaz WSFEXv1
Coacutedigo Anterior (WSFEX)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEX)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar(httpswswhomoafipgovarwsfexserviceasmx) homologacioacuten
Coacutedigo Nuevo (WSFEXv1)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL) homologacioacuten
RECEX vs RECEX1
Por linea de comando tenemos disponible la herramienta RECEX1EXE que reemplaza a RECEXEXE yutiliza praacutecticamente el mismo formato de archivo y campos El nuevo formato esta documentado la seccioacutenRECEX1 - WSFEXv1
Objeto
El objeto COM se crea invocando a CreateObject(WSFEX) para Versioacuten 0 (hasta 30-12-2011)bull El objeto COM se crea invocando a CreateObject(WSFEXv1) para Versioacuten 1 (desde 31-12-2011)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica url se utiliza servidores de homologacioacuten Importante para WSFEXv1 los paraacutemetros soncache url proxy httpwrapper y cacert ver WSFEv1 Nuevo
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
WSFEX Versioacuten 1 (WSFEXv1) 38
CrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte imp_totaltipo_expo permiso_existente dst_cmp cliente cuit_pais_clientedomicilio_cliente id_impositivo moneda_id moneda_ctzobs_comerciales obs forma_pago incoterms idioma_cbteincoterms_ds fecha_pago) crea internamente una factura para luego poder autorizarlarecibe los datos de la factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importantefecha_pago se agrega en WSFEXv1 Modificado
bull
AgregarItem(ncodigo ds qty umed precio imp_total bonif) agregainternamente un item (linea de factura) a una factura para luego poder autorizarla recibe los datos delitem a factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importante bonif se agrega enWSFEXv1 Modificado
bull
AgregarPermiso(id dst) agrega internamente un permiso de exportacioacuten a una factura paraluego poder autorizarla recibe identificacioacuten y paiacutes destino de la mercaderia Ver ejemplo para eldetalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccuit_cbte_asoc) agrega internamente un comprobante asociado a una factura para luego poderautorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de losparaacutemetros Importante cuit_cbte_asoc se agrega en WSFEXv1 Nuevo
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoExpo()GetParamIdiomas() GetParamUMed() GetParamIncoterms()GetParamDstPais() GetParamDstCUIT() recupera valores referenciales de coacutedigos de lastablas de paraacutemetros devuelve una lista de strings con el idcoacutedigo o CUIT y descripcioacuten delparaacutemetro (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
GetParamCtz(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada como paraacutemetrobull GetParamMonConCotizacion(fecha) devuelve la cotizacioacuten consultada de la base de datosaduanera de todas las monedas que posean cotizacioacuten a la fecha indicada Nuevo
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Vencimiento fecha devuelta junto con el CAEbull CbteNro nuacutemero de comprobante (del comprobante autorizado)bull
Meacutetodos 39
FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull Version versioacuten de la interfase (ej 111)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Errores
La interfase procesa los errores WSFEX y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
500 Error interno DB - FEXGetLadt_CMP - get_last problemas internos de los servidores de AFIP(se debe esperar a que lo solucionen)
bull
Operation FEXGetLast_CMP not found in WSDL la URL que se estaacute utilizando no es correcta(verificar URL para el ambiente que se estaacute utilizando)
bull
505 Error general (lockeo) problemas internos de los servidores de AFIP (se debe esperar a que losolucionen)
bull
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSFEX para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura electroacutenica de exportacioacuten a modo de ejemplo (ficticia)
Dim WSAA As Object WSFEX As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEXtra = WSAACreateTRA(wsfex)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service para autenticar (Homologacioacuten)ta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms)
Atributos 40
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1) Setear tocken y sing de autorizacioacuten (pasos previos)WSFEXToken = WSAATokenWSFEXSign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEXCuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (homologacioacuten)ok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEXDummyDebugPrint appserver status WSFEXAppServerStatusDebugPrint dbserver status WSFEXDbServerStatusDebugPrint authserver status WSFEXAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 19 FC Expo (ver tabla de paraacutemetros)punto_vta = 7 Obtengo el uacuteltimo nuacutemero de comprobante y le agrego 1cbte_nro = WSFEXGetLastCMP(tipo_cbte punto_vta) + 1 16fecha_cbte = Format(Date yyyymmdd)tipo_expo = 1 tipo de exportacioacuten (ver tabla de paraacutemetros)permiso_existente = Ndst_cmp = 203 paiacutes destinocliente = Joao Da Silvacuit_pais_cliente = 50000000016domicilio_cliente = Rua 76 km 345 Alagoasid_impositivo = PJ54482221-lmoneda_id = 012 para reales DOL o PES (ver tabla de paraacutemetros)moneda_ctz = 05obs_comerciales = Observaciones comercialesobs = Sin observacionesforma_pago = 30 diasincoterms = FOB (ver tabla de paraacutemetros)idioma_cbte = 1 (ver tabla de paraacutemetros)imp_total = 25000
Creo una factura (internamente no se llama al WebService)ok = WSFEXCrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total tipo_expo permiso_existente dst_cmp _ cliente cuit_pais_cliente domicilio_cliente _ id_impositivo moneda_id moneda_ctz _ obs_comerciales obs forma_pago incoterms _ idioma_cbte incoterms_ds fecha_pago )
Agrego un itemcodigo = PRO1ds = Producto Tipo 1 Exportacion MERCOSUR ISO 9001qty = 2precio = 12500umed = 1 Ver tabla de paraacutemetros (unidades de medida)imp_total = 25000 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSFEXAgregarItem(codigo ds qty umed precio imp_total)
Ejemplo 41
Agrego un permiso (ver manual para el desarrollador)id = 99999AAXX999999Adst = 225 paiacutes destino de la mercaderiaok = WSFEXAgregarPermiso(id dst)
Agrego un comprobante asociado (ver manual para el desarrollador)tipo_cbte_asoc = 19punto_vta_asoc = 2cbte_nro_asoc = 1ok = WSFEXAgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc)
id = 99000000000100 nuacutemero propio de transaccioacuten obtengo el uacuteltimo ID y le adiciono 1 (advertencia evitar overflow y almacenar)id = CStr(CCur(WSFEXGetLastID()) + 1)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEXAuthorize(id)
Verifico que no haya rechazo o advertencia al generar el CAEIf cae = Or WSFEXResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyElseIf WSFEXobs ltgt And WSFEXobs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyEnd If
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato) si es posible almacenar para referencias futurasDebugPrint WSFEXXmlRequest DebugPrint WSFEXXmlResponse
MsgBox Resultado amp WSFEXResultado amp CAE amp cae amp _ Reproceso amp WSFEXReproceso amp _ Obs amp WSFEXobs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEXEventos
If evento ltgt 0 Then MsgBox Evento amp evento vbInformation
End IfNext
Recuperar la facturacae2 = WSFEXGetCMP(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEXFechaCbteDebugPrint Importe Total WSFEXImpTotal
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIPElse MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales de paiacuteses destino habilitados
Ejemplo 42
recupero tabla de coacutedigo de pais destino (codigo descripcioacuten) Ej 203 BRASILFor Each x In WSFEXGetParamDstPais() DebugPrint xNext
Ejemplo para obtener la fecha y cotizacioacuten de una moneda
busco la cotizacioacuten del dolar (ver Parametro Mon) Ej 20100708 3937moneda_id = DOLctz = WSFEXGetParamCtz(moneda_id)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_cbte coacutedigo de comprobante (19 Facturas de Exportacioacuten 20 Nota de Deacutebito por Operacionescon el Exterior 21 Nota de Creacutedito por Operaciones con el Exterior
bull
punto_vta Nordm de punto de venta (debe estar autorizado para WSFEX)bull cbte_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull imp_total Importe total de la facturabull tipo_expo Tipo de exportacion (1 Exportacioacuten definitiva de Bienes 2 Servicios 4 Otros)bull permiso_existente Indica si se posee documento aduanero de exportacioacuten (permiso de embarque)Posibles Valores S N NULL (vaciacuteo)
bull
dst_cmp Paiacutes de destino del comprobante (200 ARGENTINA 203 BRASIL 212 ESTADOSUNIDOS etc)
bull
cliente Apellido y Nombre oacute Razoacuten Social del compradorbull cuit_pais_cliente CUIT del paiacutes destinoContribuyente (Ej 50000000059 BRASIL - PersonaFxedsica 51600000059 BRASIL - Otro tipo de Entidad etc)
bull
domicilio_cliente Domicilio comercial clientebull id_impositivo Clave de identificacioacuten tributaria del compradorbull moneda_id Moneda de la factura (DOL Doacutelar Estadounidense PES Pesos Argentinos 012Real etc)
bull
moneda_ctz Cotizacioacuten de la moneda de la facturabull obs_comerciales observaciones comerciales (texto arbitrario)bull obs observaciones (texto arbitrario)bull forma_pago texto arbitrario (ej 30 diacuteas)bull incoterms clausula de venta terminos de comercio exterior (DAF DDP CIF FCA FAS DESCPT EXW CIP DDU FOB DEQ CFR)
bull
incoterms_ds informacioacuten adicional de terminos comercialesbull idioma_cbte idioma del comprobante 1 Espantildeol 2 Ingleacutes 3 Portugueacutesbull fecha_pago Fecha de pago (yyyymmdd)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
codigo coacutedigo del productobull ds Descripcioacuten completabull precio Precio Unitariobull
Descripcioacuten de la obtencioacuten de CAE 43
qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull imp_total Importe totalbull bonif bonificacion sobre el producto (importe)bull
Consideraciones especiales (soacutelo WSFEXv1 Nuevo )
Para descuentos utilizar umed 99 y los importes en negativo sin cantidad ni preciobull Para sentildeas o adelantos utilizar umed 97 y los importes en negativo o positivo (seguacuten corresponda)sin cantidad ni precio
bull
Para gratificaciones utilizar umed 0 sin importes cantidad ni preciobull Para bonificaciones por item el caacutelculo es precio qty - bonifbull
Adicionalmente se puede llamar al meacutetodo AgregarPermiso para detallar los permisos de embarque ydestinaciones de la mercaderiacutea con los siguientes paraacutemetros
id Coacutedigo de despacho Permiso de Embarque formato 99999AAXX999999A (donde XX podraacutenser nuacutemeros o letras)
bull
dst Paiacutes de destino de la mercaderiacuteabull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los permisos de embarque y destinacionesde la mercaderiacutea con los siguientes paraacutemetros
cbte_tipo Coacutedigo de tipo de comprobante (remitos solo WSFEXv1 Nuevo )bull cbte_punto_venta Punto de ventabull cbte_numero Numero de comprobantebull cbte_cuit CUIT emisor del comprobante (solo WSFEXv1 Nuevo )bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEXGetLastID puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEXResultado =A (Aceptado) y WSFEXVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSFXEResultado = R (Rechazado) y WSFEXObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
IMPORTANTE Revisar las especificaciones teacutecnicas de la AFIP en el Manual para el desarrolladorpdf porlo relativo a tablas de paraacutemetros meacutetodos adicionales y operatoria en general (incluyendo obligatoriedadformatos de los campos y validaciones)
Descripcioacuten de la obtencioacuten de CAE 44
Servicio Web de Factura Electroacutenica Mercado InternoVersioacuten 1 (WSFEv1)
EL WSFEv1 es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten B (sin detalle de factura) de la Resolucioacuten General 29042010 -RG248508 obligatorio a partir de 1-7-2011
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los impuestos(IVA) y tributos
A su vez el WSFEv1 devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva Estas tablas pueden sufrir modificaciones realizadas por la AFIP conaltas y bajas loacutegicas por lo que tienen una fecha de vigencia (desde hasta) y se proveen meacutetodos paraconsultarlas por el mismo servicio web (a diferencia del WSFE que las tablas eran documentadasestaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiProyectoWSFEv1
La programacioacuten de la interfase WSFEv1 es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSFEv1)bull
Meacutetodos
Meacutetodos baacutesicos de WSFEv1
Conectar(cache wsdl proxy wrapper cacert) realiza la conexioacuten a losservidores de la AFIP (primer paso esencial) Si no se especifica url del wsdl se utiliza servidores dehomologacioacuten El paraacutemetro cache es un directorio donde se almacenan internamente la descripcioacutendel servicio (archivo WSDL) para mayor optimizacioacuten Parametros adicionales optativos wrapper esla libreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor(CA)
bull
Servicio Web de Factura Electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 45
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto imp_ivaimp_trib imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz caea fecha_hs_gen) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetros
bull
AgregarIva(iva_id base_imp importe) agrega internamente un subtotal de IVA auna factura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible eimporte Ver ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(tributo_id Desc base_imp alic importe) agregainternamente un subtotal de tributo a una factura para luego poder autorizarla recibe los datos delimpuesto nacional provincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo parael detalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc cuitfecha) agrega internamente un comprobante asociado a una factura para luego poder autorizarlarecibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de los paraacutemetrosEl campo cuit fueacute agregado seguacuten FEv29 13-03-2017 disponible desde actualizacioacuten 119a yrefiere al CUIT emisor del comprobante asociado El campo fecha fueacute agregado seguacuten FEv21320-02-2019 disponible desde actualizacioacuten 122a y refiere a la fecha del comprobante asociado
bull
AgregarOpcional(opcional_id valor) agrega internamente un dato opcional a unafactura para luego poder autorizarla recibe el id del tipo de dato opcional y valor (dependiendo de sise trata de proyectos promovidos bienes usados RG 3411 DDJJ F8001 presuncioacuten de novinculacioacuten con la actividad gravada RG366814) Ver tabla de paraacutemetros Disponible desdeactualizacioacuten 115a
bull
AgregarComprador(doc_tipo=80 doc_nro=0 porcentaje=10000) agregainternamente un dato de comprador a una factura para luego poder autorizarla recibe el tipo dedocumento (80 CUIT) nuacutemero de documento y porcentaje (Bienes Usados Registrables RG 4109 E)Ver COMPG 210 Disponible desde actualizacioacuten 120a
bull
EstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura (ver paraacutemetros del meacutetodo CrearFactura) devuelve True siel campo pertenece al encabezado y se ha actualizado correctamente (ver ejemplo) Disponible desdeactualizacioacuten 116a
bull
ObtenerCampoFactura(campo [[campo2 [campo3]]) devuelve individualmente elvalor de un campo del encabezado u otras sub-estructuras de la factura (ver ejemplo) Uacutetil luego dellamara a CompConsultar Disponible desde actualizacioacuten 117a
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125b 200620
bull
Meacutetodos principales de WSFEv1
CAESolicitar() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo de AutorizacioacutenElectroacutenico (CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
CompConsultar(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle de los paraacutemetros yvalores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos baacutesicos de WSFEv1 46
CAEASolicitar(periodo orden) solicita un CAE Anticipado para la quincenacorrespondiente Devuelve cadena vacia si no se ha solicitado A partir de COMPGv26 estableceel campo Observaciones
bull
CAEAConsultar(periodo orden) recupera un CAE Anticipado emitido con anterioridadDevuelve cadena vacia si no se ha solicitado
bull
CAEARegInformativo informa un comprobante emitido con CAE Anticipado Se debe crear elcomprobante previamente con CrearFactura consignando el CAEA Actualiza los atributos(Resultado Obs etc) de manera similar a CAESolicitar Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
Meacutetodos alternativos para solicitud de muacuteltiples CAE
IniciarFacturasX() inicializa lista interna de facturas (comprobantes) para Solicitar muacuteltiplesCAE (llamar una uacutenica vez antes de CrearFacturaAgregarFacturaX)
bull
AgregarFacturaX() agrega el uacuteltimo comprobante cargado internamente con CrearFacturaa la lista para Solicitar muacuteltiples CAE
bull
CAESolicitarX() autoriza la emisioacuten de muacuteltiples facturas electroacutenicas (varios CAE porsolicitud) devuelve la cantidad de registros enviadosrecibidos a AFIP
bull
LeerFacturaX(indice) activa internamente una factura (dada su posicioacuten en la lista) pararevisar los datoss devuelto por AFIP usando ObtenerCampoFactura luego de haber llamado aCAESolicitarX
bull
Meacutetodos Auxiliares del webservice
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull ParamGetTiposMonedas() ParamGetTiposCbte() ParamGetTiposDoc()ParamGetTiposIva() ParamGetTiposOpcional() ParamGetTiposTributos()ParamGetTiposPaises() recupera valores referenciales de coacutedigos de las tablas de paraacutemetrosdevuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde-(ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros ParamGetTiposPaises agregadopara COMPGv26
bull
ParamGetCotizacion(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada comoparaacutemetro
bull
ParamGetPtosVenta() devuelve los puntos de venta autorizados para factura electroacutenicabull
Meacutetodos Utilitarios provistos por este componente
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Atributos
El componente tiene las siguientes propiedades que pueden ser consultadas o modificadas
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull
Meacutetodos principales de WSFEv1 47
AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull CAEA coacutedigo de autorizacioacuten anticipado (si corresponde)bull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTribimportes del comprobante
bull
ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull Reprocesar habilita reproceso automaacutetico (habilitado por defecto ver abajo)bull EmisitonTipo tipo de coacutedigo de autorizacioacuten (CAE o CAEA)bull
Errores
La interfase procesa los errores WSFEv1 y los almacena en las propiedades Errores y ErrCodeErrMsg (porej motivo de rechazo al intentar solicitar CAE) AFIP tambieacuten puede enviar errrores o advertencias por lacomo Observaciones propiedad Obs Se recomienda revisarlos luego de llamar a los Webservices
Ver ejemplos y especificaciones teacutecnicas del WSFEv1 para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ver Manejo de Excepciones para conocer las tecnicas para controlar las distintas excepciones que puedenocurrir (ver atributos Excepcion y Traceback en general por problemas de conectividad) y como proceder yalmacenar los mensajes XML para depuracioacuten y futuras consultas (atributos XmlRequest y XmlResponse)
Validaciones WSFEv1
AFIP realiza varias validaciones a los datos enviados muchas agregadas recientemente por lo que para evitarinconvenientes se recomienda revisar las siguientes validaciones y consideraciones generales
10063 Factura individual DocTipo 80 DocNro XXXXXXXXX no se encuentra inscripto encondicion ACTIVA en el impuesto Las facturas A solo pueden ser emitidas a ResponsablesInscriptos consignando el CUIT vaacutelido y registrado (tipo_doc=80)
bull
10014 Para facturas B (CbteDesde distinto a CbteHasta) el resultado de la operacioacuten ImpTotal (CbteHasta - CbteDesde + 1 ) debe ser menor a $1000 y 10015 Para facturas B (CbteDesde distintoa CbteHasta) menor a $1000 el campo DocNro deberaacute ser cero (0) y el campo DocTipo 99 Los lotesde facturas B menores a $1000- pueden ser emitidos a soacutelo a Consumidor Final (tipo_doc=99 ynro_doc=0) indicando el importe total del reango de facturas
bull
10043 El campo ImpTotConc (Importe Total del Concepto) para comprobantes tipo C debe ser iguala cero (0) y 10047 El campo ImpIVA (Importe de IVA) para comprobantes tipo C debe ser igual a
bull
Atributos 48
cero (0) 10071 Para comprobantes tipo C el objeto IVA no debe informarse Para emitir FacturasC no se informa iva ni imp_tot_conc ver caso especial Monotributo10048 El campo Importe Total ImpTotal debe ser igual a la suma de ImpTotConc + ImpNeto +ImpOpEx + ImpTrib + ImpIVA La sumatoria de los campos imp_neto impto_iva imp_op_eximp_tot_conc imp_trib contra imp_total no debe diferir en maacutes de 1 centavo (o 001)
bull
10051 Los importes informados en AlicIVA no se corresponden con los porcentajes La baseimponible por la aliacutecuota de IVA no debe diferir en maacutes de 1 centavo con el impuesto liquidado deIVA (para cada tasa ver AgregarIVA)
bull
10020 El campo BaseImp en AlicIVA es obligatorio y debe ser mayor a 0 cero Si el imp_neto es 0no se debe enviar subtotal de IVA ni para la tasa 0 (no usar AgregarIVA)
bull
10018Si ImpIva es igual a 0 el objeto Iva y AlicIva son obligatorios Id iva = 3 (iva 0) Si elimp_neto es ltgt0 y el iva liquidado es 0 se debe enviar coacutedigo de alicuota 3 (0) -por ej casoespecial de hacer factura de 1 centavo- Si no corresponde IVA (exento o no gravado) se debe enviarimp_iva NULO (vbNull null o similar) y no enviar aliacutecuotas
bull
Consideraciones especiales
Para emitir Facturas B a Responsables No Inscriptos debe informarse en Tributos el importecorrespondiente (ver AgregarTributo)
bull
Para factura E no corresponde este webservice por maacutes que sea a Tierra del Fuego Ver WSFEXbull imp_tot_conc debe utilizarse para los importes no gravados (por ej cheques rechazados)bull IVA 0 es distinto a No Gravado (seriacutea imp_tot_conc) o Exento (imp_op_ex) En esos casos no vaalicuota de iva e imp_iva = NULL y imp_neto = 0 (ver validaciones arriba)
bull
Si se usa IVA 0 en el subtotal de la aliacutecuota iva_id=3 se debe pasar base_imp = 100 e importe = 0Ademaacutes imp_neto = 100 (gravado aunque no liquide IVA)
bull
Recordamos que si la AFIP detecta una validacioacuten no obligatoria (por ej no corresponde emitir factura A)devolvera un mensaje (en el atributo WSFEv1Obs) y el IVA liquidado no puede computarse como creacuteditofiscal (la factura debe incorporar dichos mensajes)
Dependiendo del caso los mensajes de validacioacuten pueden ser enviados por AFIP tanto en WSFEv1Obs o enWSFEv1ErrMsg se deben revisar ambos campos
Nota estas consideraciones pueden variar en cada caso dependiendo de cada situacioacuten particular frente aAFIP Recomendamos consultar con el contador los aspectos legales y la normativa vigente
Ejemplo
Ejemplo Solicitud CAE WSFEv1
Autorizar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSFEv1 As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1tra = WSAACreateTRA(wsfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() +
Validaciones WSFEv1 49
Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service WSAA para autenticarcache = directorio temporal (usar predeterminado)url_wsdl = httpswsaahomoafipgovarwsservicesLoginCms usar wsaaafipgovar en produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSAAConectar(cache url_wsdl proxy wrapper)ta = WSAALoginCMS(cms)
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSFEv1 = CreateObject(WSFEv1)DebugPrint WSFEv1version
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEv1Token = WSAATokenWSFEv1Sign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEv1Cuit = 20267565393
Conectar al Servicio Web de Facturacioacutencache = directorio temporal (usar predeterminado)url_wsdl = httpswswhomoafipgovarwsfev1serviceasmxWSDL usar servicios1 para produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSFEv1Conectar(cache url_wsdl proxy) homologacioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEv1DummyDebugPrint appserver status WSFEv1AppServerStatusDebugPrint dbserver status WSFEv1DbServerStatusDebugPrint authserver status WSFEv1AuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4001cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta) + 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 20267565393cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Ejemplo Solicitud CAE WSFEv1 50
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
datos de compradores RG 4109-E bienes muebles registrables ()If False Then solo productos y si hay maacutes de un comprador ok = WSFEv1AgregarComprador(80 30500010912 9999) ok = WSFEv1AgregarComprador(80 30999032083 001)End If
Solicito CAEcae = WSFEv1CAESolicitar()
DebugPrint Resultado WSFEv1ResultadoDebugPrint CAE WSFEv1cae
DebugPrint Numero de comprobante WSFEv1CbteNro
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSFEv1XmlRequestDebugPrint WSFEv1XmlResponse
MsgBox Resultado amp WSFEv1Resultado amp CAE amp cae amp Venc amp WSFEv1Vencimiento amp Obs amp WSFEv1obs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEv1eventos MsgBox evento vbInformation EventoNext
Ejemplo Consultar CAE WSFEv1
Recuperar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia continua elejemplo anterior) CAE normal
Buscar la facturacae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEv1FechaCbteDebugPrint Fecha Vencimiento CAE WSFEv1VencimientoDebugPrint Importe Total WSFEv1ImpTotal
comparar con los datos del ejemplo anterior
Ejemplo Consultar CAE WSFEv1 51
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIP amp cae amp vs amp cae2Else MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
obtener datos del encabezado (a partir de actualizacioacuten 117a)cae = wsfev1ObtenerCampoFactura(cae)tipo_doc = wsfev1ObtenerCampoFactura(tipo_doc)nro_doc = wsfev1ObtenerCampoFactura(nro_doc)imp_total = wsfev1ObtenerCampoFactura(imp_total) obtener primer alicuota de IVAimp_iva1 = wsfev1ObtenerCampoFactura(iva 0 importe) obtener primer tributoimp_trib1 = wsfev1ObtenerCampoFactura(tributos 0 importe) obtener primer opcionalvalor_opcional1 = wsfev1ObtenerCampoFactura(opcionales 0 valor) obtener primer coacutedigo de observacion de AFIPobs_code1 = wsfev1ObtenerCampoFactura(obs 0 code) pruebo obtener el segundo mensaje de observacion inexistenteobs_code2 = wsfev1ObtenerCampoFactura(obs 1 msg)debugPrint wsfev1Excepcion El campo 1 solicitado no existe
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1
Ejemplo para obtener las tablas de parametros en este caso puntos de venta habilitados (uacutetil en produccioacutenpara verificar el acceso al webservice)
recupero tabla de paraacutemetros de punto de venta habilitado (3|EmisionTipoCAE|BloqueadoN|FchBajaNULL)For Each x In WSFEv1ParamGetPtosVenta() DebugPrint xNext
Ejemplo Solicitud CAEA y registro informativo WSFEv1
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE Anticipado
PASO 1 Solicito CAE Anticipado para el periacuteodo NOTA solicitar por uacutenica vez para un determinado periacuteodo consultar si se ha solicitado previamente
periodo = 201102 Antildeo y mesorden = 2 Segunda Quincena
consulto CAEA ya solicitadoCAEA = WSFEv1CAEAConsultar(periodo orden)If CAEA = Then
solicito nuevo CAEA CAEA = WSFEv1CAEASolicitar(periodo orden)End If
MsgBox Periodo amp periodo amp Orden amp orden amp vbCrLf amp CAEA amp CAEA amp vbCrLf amp _Obs amp WSFEv1Obs amp vbCrLf amp _Errores amp WSFEv1ErrMsg
Si no tengo CAEA terminoIf CAEA = Then End
PASO 2 Establezco los valores de la factura a informar
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1 52
tipo_cbte = 6punto_vta = 4005cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta)If cbte_nro = Then cbte_nro = 0 no hay comprobantes emitidosElse cbte_nro = CLng(cbte_nro) convertir a entero largoEnd Iffecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
creo una factura (con CAEA)ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz CAEA fecha_hs_gen)
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
Informo comprobante emitido con CAE anticipadocae = WSFEv1CAEARegInformativo()
DebugPrint Resultado WSFEv1Resultado
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura o completar el registro de encabezado (ver archivo deintercambio) con los siguiente paraacutemetros
Ejemplo Solicitud CAEA y registro informativo WSFEv1 53
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc seguacuten tabla de paraacutemetros de AFIP) y nuacutemero deDocumento del cliente (receptor de la factura) Usar tipo_doc=99 y nro_doc=0 para consumidoresfinales (Factura B lt $1000)
bull
tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSFE)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta generalmente el mismo nuacutemero si es unafactura individual o un rango si son Factura B lt $ 1000 a Consumidor Final -en este uacuteltimo caso seobtiene un uacutenico CAE para el lote-)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la factura (debe ser igual a la suma de imp_tot_conc + imp_op_ex +imp_neto + imp_iva + imp_trib)
bull
imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la factura (igual a la suma de base_imp para todas lasalicuotas)
bull
imp_iva Importe del IVA liquidado (igual a la suma de importe_iva para todas las aliacutecutoas) Enviarnull o similar si no corresponde y no se enviacutean subtotales por aliacutecuota
bull
imp_trib Importe de otros tributos (incluyendo percepciones de IVA retenciones IVA no inscriptoetc)
bull
imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros actualmente solo PES)bull moneda_ctz Cotizacioacuten de la moneda de la factura (actualmente solo 100)bull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull caea codigo de autorizacioacuten anticipado (si corresponde)bull
Luego por cada alicuota de IVA (excepto para no gravado y exento) se debe llamar al meacutetodo AgregarIva ocompletar el registro respectivo con los siguientes paraacutemetros
iva_id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros AFIP)bull base_imp base imponible (importe)bull importe_iva importe liquidado (base_imp por alicuota)bull
De existir otros tributos (percepcionesretenciones o similares) se debe llamar al meacutetodo AgregarTributo ocompletar el registro respectivo con los siguientes paraacutemetros
tributo_id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros AFIP)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc o completar el registro respectivo para detallar loscomprobantes asociados a una nota de creacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo CAESolicitar o CAEARegInformativo dependiendo de lamodalidad (o ejecutar el programa RECE1 si se esta utilizando la herramienta por linea de comando)
Descripcioacuten de la obtencioacuten de CAE CAEA 54
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEv1Resultado= A (Aceptado) y WSFEv1Vencimiento del CAE (fch_venc_cae) Sino devuelve cae = La interfase nopudo procesar la respuesta del WebService o bien la conexioacuten a internet esta caiacuteda las direcciones de losservidores son incorrectas o el servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEv1Resultado = R (Rechazado) y WSFEv1Obs (o WSFEv1ErrMsg) con los diversos motivos derechazo proporcionados por el webservice (ver WSFEMotivo)
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Como requisito previo para la modalidad CAE Anticipado se debe llamar a CAEASolicitar oCAEAConsultar con los datos del periodo y orden (antes de comenzar la quincena) para obtener el uacutenicoCAEA para los comprobantes del periacuteodo
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (CompConsultar) o usar la rutina deReproceso Automaacutetico incluida en este componente
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEV1 en el sitio de la AFIP
Minisitio Factura Electroacutenica AFIP informacioacuten generalbull Manual para el desarrolladorpdf Informacioacuten importante sobre la operatoriabull
Reproceso Automaacutetico
Importante En el caso de que la conexioacuten se interrumpa al llamar a CAESolicitar luego de que la AFIPregistre la factura y antes de que la informacioacuten del CAE llegue al equipo se debe llamada aCompConsultar con los paraacutemetros de la factura (tipo_cbte punto_vta cbte_nro) para recuperar el CAEgenerado anteriormente (ver ejemplo pseudocoacutedigo y por RECE1 get)
Este procedimiento puede ser realizado automaacuteticamente por la interfaz (de manera similar a como realizabaAFIP originalmente en WSFEv0) habilitando el atributo Reprocesar = True (valor predeterminado) conlo que la interfaz automaticamente
Solicita un nuevo CAE en caso de que no exista en los registros de la AFIPbull Consulta y obtiene el CAE anterior en caso de que ya exista en los registros de AFIPbull
En ese caso si se da un reprocesamiento automaacutetico como se mencionoacute en el primer parrafoWSFEReproceso se establece a S para indicar que el CAE se ha recuperado
Si bien no se utiliza un ID por lo que se minimizan los errores al reprocesar los comprobantes igualmente serecomienda revisar el atributo de Reproceso ya que un incorrecto uso puede generar inconvenientes alregistrar los comprobantes en AFIP Para ello la interfaz cuenta con los atributos CbteNro FechaCbteImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTrib o XmlRequest yXmlResponse que deben ser contrastados contra la informacioacuten enviada en el caso de interrupciones oinconvenientes en la comunicacioacuten (a partir de la versioacuten 107d si Reproceso = S la interfaz verificoacuteautomaacuteticamente todos los datos enviados con los registrados en la AFIP y estos concuerdan)
Se recomienda almacenar los datos en un medio durable para poder enviar la misma factura que fuera
Reproceso Automaacutetico 55
interrumpida salvo que se tenga certeza de que la misma no ha sido procesada por AFIP Especialmente sedeberiacutea guardar el nuacutemero de factura antes de solicitar CAE y no utilizar ult o el meacutetodoCompUltimoAutorizado para consultar el uacuteltimo nuacutemero de comprobante emitido ya que ante cualquierinterrupcioacuten se no se podriacutea recuperar los datos registrados en AFIP (o se podriacutean generar duplicados)
En siacutentesis al re-enviar los datos de un comprobante que por alguacuten motivo no ha devuelto CAE (cuando lacomunicacioacuten se ha interrumpido y no ha sido aceptado o rechazado formalmente con Resultado=A o R)se recomienda revisar el reproceso y los datos registrados (devueltos por la interfaz) o en su defectodeshabilitar Reprocesar con False e implementar un procedimiento propio de recuperacioacuten ante fallas
Si el reproceso estaacute habilitado no es necesario modificar la aplicacioacuten en caso de fallas simplementereintentar la solicitud de CAE o informacioacuten de CAEA y la interfaz realizaraacute los meacutetodos pertinentes seguacutense describioacute anteriormente
En caso de que no haya sido necesario reprocesar el requerimiento el atributo Reproceso quedaraacute vacioEn caso de que haya sido necesario reprocesar pero no ha sido exitoso (ocurrioacute un error o validacioacuten que nopermitioacute recuperar el CAE o los datos enviados no concuerdan con los registrados en AFIP) Reprocesoseraacute N y se informaraacute el error original
Lo expuesto anteriormente aplica tambieacuten a CAEA -anticipado- al informar los comprobantes emitidos(CAEARegInformativo)
En ambas ocasiones se puede consultar el atributo EmisionTipo que contiene CAE o CAEA dependiendodel caso
Nota El Reproceso automaacutetico estaacute incluido internamente en CAESolicitar y CAEARegInformativopor lo que estaacute disponible tanto en la biblioteca Python Interfaz COM la herramienta por liacutenea de comandoRECE1EXE y al aplicativo PyRece
Advertencia El Reproceso automaacutetico es una caracteriacutestica adicional propia de la interface por lo tantopuede sufrir variaciones o mejoras se recuerda que la informacioacuten expuesta en esta documentacioacuten aplica a lauacuteltima versioacuten de los instaladores
Factura C Monotributo Exento
Seguacuten RG 30672011 se adiciona la posibilidad de autorizar comprobantes clase C (monotributistas) aWSFEv1 (RG2485)
Seguacuten RG 37492015 se incluye a los sujetos exentos en el impuesto al valor agregado Para poder emitircomprobantes clase C ademaacutes de seguir las pautas sentildealadas en esta seccioacuten el punto de venta debe estardado de alta como Factura Electroacutenica - Exento en IVA - Web Services
Los siguientes coacutedigos de comprobantes (tipo_cbte) pueden ser utilizados en este caso
11 Factura Cbull 12 Nota de Deacutebito Cbull 13 Nota de Creacutedito Cbull 15 Recibo Cbull
Los requisitos fundamentales para poder validar un comprobante informado son las los siguientes
Factura C Monotributo Exento 56
Ingresar siempre imp_tot_conc = 01 Ingresar siempre imp_op_ex = 02 Ingresar siempre imp_iva = 03 Informar en imp_neto el importe subtotal de la factura4 No informar subtotales de IVA (AgregarIVA)5
Coacutedigo de Ejemplo
Establezco los valores de la factura a autorizartipo_cbte = 11punto_vta = 4002cbte_nro = 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 10000 imp_tot_conc = 000 imp_neto = 10000imp_iva = 000 imp_trib = 000 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 2 o 3)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Solicito CAECAE = WSFEv1CAESolicitar()
Documentacioacuten Oficial Facturacioacuten Electroacutenica RG 2485 Proyecto FE v25 - Manual para el desarrollador(Revisioacuten correspondiente al 01 de Abril de 2015)
Datos Opcionales AFIP WSFEv1
El componente permite enviar los datos opcionales requeridos por las diversas resoluciones de AFIP seguacuten latabla de paraacutemetros Disponible desde actualizacioacuten 115b
Datos opcionales para proyectos promovidos
WSFEv1AgregarOpcional(2 1234) identificador del proyecto
Datos opcionales para RG Bienes Usados 3411 (del vendedor)
WSFEv1AgregarOpcional(91 Juan Perez) Nombre y Apellido WSFEv1AgregarOpcional(92 200) Nacionalidad (coacutedigo de paiacutes)WSFEv1AgregarOpcional(93 Balcarce 50) Domicilio
Datos opcionales para RG 3668 Impuesto al Valor Agregado - Art12 (presuncioacuten de no vinculacioacuten con laactividad gravada FORM 8001)
WSFEv1AgregarOpcional(5 02) IVA Excepciones (01 LocadorPrestador 02 Conferencias 03 RG 74 04 Bienes de cambio 05 Ropa de trabajo 06 Intermediario)
Datos Opcionales AFIP WSFEv1 57
WSFEv1AgregarOpcional(61 80) Firmante Doc Tipo (80 CUIT 96 DNI etc)WSFEv1AgregarOpcional(62 20267565393) Firmante Doc NroWSFEv1AgregarOpcional(7 01) Caraacutecter del Firmante (01 Titular 02 DirectorPresidente 03 Apoderado 04 Empleado)
Datos opcionales para RG 3749 (RG 3368 Establecimientos de educacioacuten puacuteblica de gestioacuten privada)
WSFEv1AgregarOpcional(10 1) Actividad ComprendidaWSFEv1AgregarOpcional(1011 80) Tipo de Documento (titular del pago)WSFEv1AgregarOpcional(1012 20267565393) Nuacutemero de Documento (titular del pago)
Datos opcionales para RG4520
WSFEv1AgregarOpcional(5 01) Actividad
Datos opcionales para FEv213 (RG 4367 Factura de Creacutedito Electroacutenica MiPyMEs (FCE))
WSFEv1AgregarOpcional(2101 2850590940090418135201) CBUWSFEv1AgregarOpcional(2102 pyafipws) aliasWSFEv1AgregarOpcional(27 SCA) tipo de transmisioacuten (desde el 01042021) if tipo_cbte in (203 208 213) WSFEv1AgregarOpcional(22 S) Anulacioacuten
Obtencioacuten de Atributos Avanzados WSFEv1
En versiones recientes (112a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosde la respuesta (uacutetiles para depuracioacuten y solucioacuten de errores) con los meacutetodos AnalizarXml yObtenerTagXml
Ejemplo para recuperar datos puntuales de un comprobante emitido (moneda cotizacioacuten CUIT etc)
cae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)ok = WSFEv1AnalizarXml(XmlResponse)If ok Then
datos del encabezado DebugPrint CAE WSFEv1ObtenerTagXml(CodAutorizacion) WSFEv1CAE DebugPrint CbteFch WSFEv1ObtenerTagXml(CbteFch) WSFEv1FechaCbte DebugPrint Moneda WSFEv1ObtenerTagXml(MonId) DebugPrint Cotizacion WSFEv1ObtenerTagXml(MonCotiz) DebugPrint DocTipo WSFEv1ObtenerTagXml(DocTipo) DebugPrint DocNro WSFEv1ObtenerTagXml(DocNro)
ejemplos con arreglos (primer elemento = 0 segundo = 1 etc) DebugPrint Primer IVA (alci id) WSFEv1ObtenerTagXml(Iva AlicIva 0 Id) DebugPrint Primer IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 0 Importe) DebugPrint Segundo IVA (alic id) WSFEv1ObtenerTagXml(Iva AlicIva 1 Id) DebugPrint Segundo IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 1 Importe) DebugPrint Primer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 0 Desc) DebugPrint Primer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 0 Importe) DebugPrint Segundo Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 1 Desc) DebugPrint Segundo Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 1 Importe) DebugPrint Tercer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 2 Desc) DebugPrint Tercer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 2 Importe)End If
Obtencioacuten de Atributos Avanzados WSFEv1 58
Servicio Web de Factura Electroacutenica Mercado InternoPrograma Matrix (WSMTXCA)
EL WSMTXCA es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten A (con detalle de factura) de la Resolucioacuten General 29042010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYY-MM-DD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los artiacuteculos losimpuestos (IVA) y tributos (similar a WSFEX y WSBFE)
A su vez el WSMTXCA devuelve mensajes de eventos (mantenimiento programado advertencias etc) losque deben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva tributos unidades de medida Estas tablas pueden sufrirmodificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha de vigencia(desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia del WSFE quelas tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiFacturaElectronicaMTXCAService
La programacioacuten de la interfase WSMTXCA es similar a WSFE WSFEX WSBFE y WSFEv1 serecomienda revisarlos
Objeto
El objeto COM se crea invocando a CreateObject(WSMTXCA)bull
Meacutetodos
Meacutetodos principales
Conectar(cache wsdl proxy) realiza la conexioacuten a los servidores de la AFIP (primerpaso esencial) Si no se especifica url del wsdl se utiliza servidores de homologacioacuten El paraacutemetrocache es un directorio donde se almacenan internamente la descripcioacuten del servicio (archivo WSDL)para mayor optimizacioacuten Proxy es un string con la informacioacuten del servidor intermediousuarioclaveservidorpuerto
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto
bull
Servicio Web de Factura Electroacutenica Mercado Interno Programa Matrix (WSMTXCA) 59
imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pagofecha_serv_desde fecha_serv_hasta moneda_id moneda_ctz obs) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetrosEstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura devuelve True si el campo pertenece al encabezado y se haactualizado correctamente (ver ejemplo)
bull
AgregarIva(id base_imp importe) agrega internamente un subtotal de IVA a unafactura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible e importeVer ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(id Desc base_imp alic importe) agrega internamente unsubtotal de tributo a una factura para luego poder autorizarla recibe los datos del impuesto nacionalprovincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccbte_cuit fecha) agrega internamente un comprobante asociado a una factura para luegopoder autorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detallede los paraacutemetros El campo cuit fueacute agregado seguacuten Release v05 15-03-2017 disponible desdeactualizacioacuten 113a El campo fecha fue agregado en Realse v010 01072019
bull
AgregarItem(u_mtx cod_mtx codigo ds qty umed precio bonifcod_iva imp_iva imp_subtotal) agrega internamente un item (linea de factura) a unafactura para luego poder autorizarla recibe los datos del item a factura a emitir Ver ejemplo para eldetalle de los paraacutemetros
bull
EstablecerCampoItem(campo valor) establece individualmente el valor de un campo deldetalle de la factura (uacuteltimo item agregado) devuelve True si el campo pertenece al encabezado y seha actualizado correctamente (ver ejemplo)
bull
AutorizarComprobante() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo deAutorizacioacuten Electroacutenico (CAE) Ver ejemplo
bull
AutorizarAjusteIVA() autoriza un ajuste de IVA (notas de creacutedito deacutebito) Se debe informarel coacutedigo 7790001001139 e informar solo el importe de IVA ajustado
bull
SolicitarCAEA(periodo orden) permite obtener un CAEA y su respectivo periacuteodo devigencia (fecha de validez desde y fecha de validez hasta)
bull
ConsultarCAEA(periodo orden caea) permite consultar la informacioacutencorrespondiente a un CAEA previamente otorgado (recibe periacuteodoorden o CAEA)
bull
InformarComprobanteCAEA() enviacutea la informacioacuten del comprobante emitido y asociado a unCAEA (ver AutorizarComprobante)
bull
InformarAjusteIVACAEA() enviacutea la informacioacuten del comprobante de ajuste de IVA emitidospara un CAEA (ver AutorizarAjusteIVA)
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125a 200620
bull
Meacutetodos secundarios
ConsultarComprobante(tipo_cbte punto_vta cbte_nro) recupera los datos deuna factura autorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobanteoriginal y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vezestablece los datos de la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle delos paraacutemetros y valores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos 60
ConsultarMonedas() ConsultarTiposComprobante()ConsultarTiposDocumento() ConsultarAlicuotasIVA()ConsultarCondicionesIVA() ConsultarUnidadesMedida()ConsultarTiposTributo() recupera valores referenciales de coacutedigos de las tablas deparaacutemetros devuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -sicorresponde- (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
ConsultarCotizacionMoneda(moneda_id) devuelve cotizacioacuten y fecha de la monedaindicada como paraacutemetro
bull
ConsultarPuntosVentaCAE() permite consultar los puntos de venta habilitados para CAE eneste WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPuntosVentaCAEA() permite consultar los puntos de venta habilitados para CAEAen este WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPtosVtaCAEANoInformados(caea) permite consultar que puntos de venta auacutenno fueron informados para un CAEA determinado devuelve una lista (array de strings) con los datosdel numero_punto_venta
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importes del comprobantebull ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull
Errores
La interfase procesa los errores WSMTXCA y los almacena en las proipedades Errores y ErrCodeErrMsgVer especificaciones teacutecnicas del WSMTXCA para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ejemplo
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSMTXCA As Object
Atributos 61
On Error GoTo ManejoError
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSMTXCAtra = WSAACreateTRA(wsmtxca)DebugPrint tra
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)DebugPrint cms
Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten (cambiar para produccioacuten)
Imprimir el ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint taDebugPrint Token WSAATokenDebugPrint Sign WSAASign
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSMTXCA = CreateObject(WSMTXCA)DebugPrint WSMTXCAversion
Setear tocken y sing de autorizacioacuten (pasos previos)WSMTXCAToken = WSAATokenWSMTXCASign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSMTXCACuit = 20267565393
Conectar al Servicio Web de FacturacioacutenWSDL = httpsserviciosjavaafipgovarwsmtxcaservicesMTXCAServicewsdlok = WSMTXCAConectar( WSDL) produccioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSMTXCADummyDebugPrint appserver status WSMTXCAAppServerStatusDebugPrint dbserver status WSMTXCADbServerStatusDebugPrint authserver status WSMTXCAAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4000cbte_nro = WSMTXCACompUltimoAutorizado(tipo_cbte punto_vta)fecha = Format(Date yyyy-mm-dd)concepto = 3tipo_doc = 80 nro_doc = 30000000007cbte_nro = CLng(cbte_nro) + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000
Ejemplo 62
imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs = Observaciones Comerciales libre
ok = WSMTXCACrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz obs)
Agrego los comprobantes asociadosIf False Then solo si es nc o nd tipo = 19 pto_vta = 2 nro = 1234 ok = WSMTXCAAgregarCmpAsoc(tipo pto_vta nro)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSMTXCAAgregarTributo(id Desc base_imp alic importe)
Agrego subtotales de IVAid = 5 21base_im = 10000importe = 2100ok = WSMTXCAAgregarIva(id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890codigo = P0001ds = Descripcion del producto P0001qty = 10000umed = 7precio = 10000bonif = 000cod_iva = 5imp_iva = 2100imp_subtotal = 12100ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx DESC Descuento 0 _
99 0 0 cod_iva -2100 -12100)
Solicito CAEcae = WSMTXCAAutorizarComprobante()
verifico que no haya erroresFor Each er In WSMTXCAErrores MsgBox er vbInformation ErrorNext
Ejemplo 63
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSMTXCAXmlRequestDebugPrint WSMTXCAXmlResponse
MsgBox Resultado amp WSMTXCAResultado amp CAE amp cae amp _ Venc amp WSMTXCAVencimiento amp Obs amp WSMTXCAobs _
vbInformation + vbOKOnly
Ejemplo para obtener coacutedigos referenciales (tabla moneda)
recupero tabla de paraacutemetros de moneda (id descripcioacuten)For Each x In WSMTXCAConsultarMonedas() DebugPrint xNext
busco la cotizacioacuten del dolar (ver Param Mon)ctz = WSMTXCAConsultarCotizacionMoneda(DOL)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSMTX factura electroacutenica con detalle)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta ambos el mismo nuacutemero si es una facturaindividual)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull imp_subtotal subtotal sin ivabull imp_trib Importe de otros tributosbull imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull moneda_ctz Cotizacioacuten de la moneda de la facturabull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull obs observaciones comerciales (campo libre)bull caea debe completarse si se informa una factura en esta modalidad (obtenido con SolicitarCAEA)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
u_mtx cantidad de unidades(ej 123456)bull cod_mtx codigo mtx del producto (ej 1234567890)bull codigo codigo opcional del producto (ej P0001)bull ds Descripcioacuten completabull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull
Descripcioacuten de la obtencioacuten de CAE CAEA 64
bonif Bonificacioacutenbull cod_iva Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_iva importe liquidado de IVAbull imp_subtotal = Importe total (incluyendo descuentos e IVA)bull
Para items descriptivos utilizar umed = 0 Para anticipos o descuentos utilizar umed = 99
Por cada alicuota de IVA se debe llamar al meacutetodo AgregarIva con los siguientes paraacutemetros
id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull base_imp base imponible (importe)bull importe importe liquidadobull
De existir otros tributos se debe llamar al meacutetodo AgregarTributo con los siguientes paraacutemetros
id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los comprobantes asociados a una nota decreacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobantebull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo AutorizarComprobante o InformarComprobanteCAEA
Si no hubiere inconvenientes la llamada debe devolver el CAE CAEA y se establece el atributoWSMTXCAResultado = A (Aceptado) y WSMTXCAVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSMTXCAObscon los diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (ConsultarComprobante)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSMTX en el sitio de la AFIP
Manual Desarrollador Informacioacuten importante sobre la operatoriabull
Descripcioacuten de la obtencioacuten de CAE CAEA 65
Establecer campos individualmente (ejemplo WSMTXCA)
Para lenguajes que no soporten el pasaje de varios parametros a un meacutetodo (por ej SERVOY por sulimitacioacuten de 6 argumentos) desde la versioacuten 106a es posible crear la factura en blanco (todos los camposvacios) y luego establecer los campos individualmente
ok = WSMTXCACrearFactura()ok = WSMTXCAEstablecerCampoFactura(concepto concepto)ok = WSMTXCAEstablecerCampoFactura(tipo_doc tipo_doc)ok = WSMTXCAEstablecerCampoFactura(nro_doc nro_doc)ok = WSMTXCAEstablecerCampoFactura(tipo_cbte tipo_cbte)ok = WSMTXCAEstablecerCampoFactura(punto_vta punto_vta)ok = WSMTXCAEstablecerCampoFactura(cbt_desde cbt_desde)ok = WSMTXCAEstablecerCampoFactura(cbt_hasta cbt_hasta)ok = WSMTXCAEstablecerCampoFactura(imp_total imp_total)ok = WSMTXCAEstablecerCampoFactura(imp_tot_conc imp_tot_conc)ok = WSMTXCAEstablecerCampoFactura(imp_neto imp_neto)ok = WSMTXCAEstablecerCampoFactura(imp_subtotal imp_subtotal)ok = WSMTXCAEstablecerCampoFactura(imp_trib imp_trib)ok = WSMTXCAEstablecerCampoFactura(imp_op_ex imp_op_ex)ok = WSMTXCAEstablecerCampoFactura(fecha_cbte fecha_cbte)ok = WSMTXCAEstablecerCampoFactura(fecha_venc_pago fecha_venc_pago)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_desde fecha_serv_desde)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_hasta fecha_serv_hasta)ok = WSMTXCAEstablecerCampoFactura(moneda_id moneda_id)ok = WSMTXCAEstablecerCampoFactura(moneda_ctz moneda_ctz)ok = WSMTXCAEstablecerCampoFactura(observaciones Obs)ok = WSMTXCAEstablecerCampoFactura(caea CAEA)ok = WSMTXCAEstablecerCampoFactura(vencimiento vencimiento)
Para los items de detalle seriacutea similar
ok = WSMTXCAAgregarItem()ok = WSMTXCAEstablecerCampoItem(u_mtx u_mtx)ok = WSMTXCAEstablecerCampoItem(cod_mtx cod_mtx)ok = WSMTXCAEstablecerCampoItem(codigo codigo)ok = WSMTXCAEstablecerCampoItem(ds ds)ok = WSMTXCAEstablecerCampoItem(qty qty)ok = WSMTXCAEstablecerCampoItem(umed umed)ok = WSMTXCAEstablecerCampoItem(precio precio)ok = WSMTXCAEstablecerCampoItem(bonif bonif)ok = WSMTXCAEstablecerCampoItem(iva_id cod_iva)ok = WSMTXCAEstablecerCampoItem(imp_iva imp_iva)ok = WSMTXCAEstablecerCampoItem(imp_subtotal imp_subtotal)
Interfase por archivos de texto siacutemil SIAP - RECE
Para lenguajes donde no es posible utilizar objetos COM se desarrolloacute una interfaz de texto (command lineinterfase) para poder utilizar los Web Services de la AFIP que funciona como un programa independientemanteniendo las ventajas y caracteriacutesticas presentadas anteriormente
Formatos de archivos de intercambio soportados
Archivos TXT de Texto plano estilo COBOL y aplicativos SIAP AFIPbull Tablas DBF para dBase III Fox Clipper Harbour (xBase) etcbull Formato JSON para lenguajes de programacioacuten maacutes modernos (PHP JAVA JavaScript etc)bull
Establecer campos individualmente (ejemplo WSMTXCA) 66
La herramienta es multiplataforma (LinuxWindows)
Ver secciones anteriores sobre la descripcioacuten de las opciones de configuracioacuten campos y procedimientos
Consideraciones Generalesbull Autenticacioacuten (WSAA) ticket de acceso certificados y claves privadasbull Gestioacuten de CAE (WSFEv1) mercado interno sin detalle (version 1)bull Gestioacuten de CAE (WSMTXCA) mercado interno con detalle (matrix)bull Gestioacuten de CAE (WSFEX) exportacioacutenbull
Configuracioacuten
Editar el archivo RECEINI en la carpeta de la intefase (CPYAFIPWS)
CERT ubicacioacuten del archivo certificado (ver WSAA)bull PRIVATEKEY ubicacioacuten del archivo de la clave privada (ver WSAA)bull CUIT CUIT del emisorbull ENTRADA ubicacioacuten del archivo de texto de entrada (para cada webservice)bull SALIDA ubicacioacuten del archivo de texto de salida (para cada webservice)bull URL direccioacuten de los servicios web de produccioacuten (para cada webservice)bull Seccion [DBF] configura los nombres de archivos con las tablas requeridasbull
Ejemplo
[WSAA]CERT=CSISTEMAempresacrtPRIVATEKEY= CSISTEMAempresakeyURL=httpswsaaafipgovarwsservicesLoginCmswsdl[WSFEv1]CUIT=30000000000CBU=2222222222222222222222ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
[WSMTXCA]CUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtReprocesar= SURL=httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAService
[WSBFE] aplica tambieacuten a WSBFEv1CUIT=30000000000ENTRADA= CSISTEMAentradatxtSALIDA= CSISTEMAsalidatxtURL=httpsservicios1afipgovarwsbfev1serviceasmxWSDL
[WSFEXv1] aplica tambieacuten a WSFEXCUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfexv1serviceasmxWSDL
Interfase por archivos de texto siacutemil SIAP - RECE 67
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalles = detallesdbfDatos Opcionales = opcionalesdbf
Seccioacuten [WSAA]
Configuracioacuten referente al web service de autenticacioacuten
CERT ubicacioacuten del archivo que contiene el certificadobull PRIVATEKEY ubicacioacuten de la clave privada correspondiente al certificadobull URL direccioacuten del servidor de AFIP Por ej para produccioacuten httpswsaaafipgovarwsservicesLoginCmswsdl
bull
Seccioacuten [WSFEv1]
Configuracioacuten referente al web service de factura nacional
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfev1serviceasmxWSDL
bull
Seccioacuten [WSFEX]
Configuracioacuten referente al web service de factura exportacioacuten
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfexserviceasmx
bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull
Seccioacuten [PROXY]
Configuracioacuten referente al servidor intermedio de salida a internet (firewall antivirus proxy etc) ej
Configuracioacuten 68
HOST = localhostbull PORT = 8000bull USER = marianobull PASS = reingartbull
NOTA solo debe configurarse esta seccioacuten si corresponde contactar al administrador de red de la empresapara determinar los paraacutemetros correctos de cada caso Para maacutes informacioacuten ver Errores de Conectividad
Formato de archivos de entrada y salida
Factura electroacutenica normal (WSFE)
El formato utilizado es similar a RECE pero extendido con algunos campos necesarios para utilizar losServicios Web A continuacioacuten se detalla nombre del campo posicioacuten inicial longitud y tipo
fecha_cbte (28A)bull tipo_cbte (102N)bull punto_vta (134N)bull cbt_desde (178N)bull cbt_hasta (258N)bull tipo_doc (362N)bull nro_doc (3811N)bull imp_total (7915I)bull imp_tot_conc (9415I)bull imp_neto (10915I)bull impto_liq (12415I)bull impto_liq_rni (13915I)bull imp_op_ex (15415I)bull cae (26114N)bull fecha_vto (2758A)bull resultado (2911A)bull motivo (2922A)bull reproceso (2941A)bull fecha_venc_pago (2958A)bull presta_serv (3031N)bull fecha_serv_desde (3048A)bull fecha_serv_hasta (3128A)bull id (32015N)bull
Tipos de campo
A Alfanumericobull N Numericobull I Importes con 2 decimales (sin incluir punto)bull
Los espacios no definidos se ignoran (completar con un espacio en blanco)
Para maacutes informacioacuten sobre los campos ver paraacutemetros y valores que retorna el meacutetodo Aut en el presentemanual
Seccioacuten [PROXY] 69
Como formato de entrada es posible utilizar el mismo archivo generado para el aplicativo SIAPRECE perono se podraacuten facturar servicios ya que los campo presta_serv y fecha_serv_desde y fecha_serv_hasta no estaacutencontemplados en dicho formato
Factura electroacutenica bienes de capital (WSBFE)
El formato es similar al de factura electroacutenica normal pero variacutea el tipo de registro (0 Encabezado 1 Detallede cada Item)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 0bull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numericobull Campo tipo_doc Posicioacuten 24 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 26 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 37 Longitud 15 Tipo Importebull Campo imp_tot_conc Posicioacuten 52 Longitud 15 Tipo Importebull Campo imp_neto Posicioacuten 67 Longitud 15 Tipo Importebull Campo impto_liq Posicioacuten 82 Longitud 15 Tipo Importebull Campo impto_liq_rni Posicioacuten 97 Longitud 15 Tipo Importebull Campo imp_op_ex Posicioacuten 112 Longitud 15 Tipo Importebull Campo impto_perc Posicioacuten 127 Longitud 15 Tipo Importebull Campo imp_iibb Posicioacuten 142 Longitud 15 Tipo Importebull Campo impto_perc_mun Posicioacuten 157 Longitud 15 Tipo Importebull Campo imp_internos Posicioacuten 172 Longitud 15 Tipo Importebull Campo imp_moneda_id Posicioacuten 187 Longitud 3 Tipo Alfanumericobull Campo imp_moneda_ctz Posicioacuten 190 Longitud 10 Tipo Importebull Campo zona Posicioacuten 200 Longitud 5 Tipo Alfanumericobull Campo cae Posicioacuten 205 Longitud 14 Tipo Numericobull Campo fecha_vto Posicioacuten 219 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 227 Longitud 1 Tipo Alfanumericobull Campo obs Posicioacuten 228 Longitud 2 Tipo Alfanumericobull Campo reproceso Posicioacuten 230 Longitud 1 Tipo Alfanumericobull Campo id Posicioacuten 231 Longitud 15 Tipo Numericobull
Detalle (por cada item)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 1bull Campo ncm Posicioacuten 2 Longitud 15 Tipo Alfanumericobull Campo sec Posicioacuten 17 Longitud 15 Tipo Alfanumericobull Campo qty Posicioacuten 32 Longitud 15 Tipo Importebull Campo umed Posicioacuten 47 Longitud 5 Tipo Numericobull Campo precio Posicioacuten 52 Longitud 15 Tipo Importebull Campo bonif Posicioacuten 67 Longitud 15 Tipo Importebull Campo imp_total Posicioacuten 82 Longitud 15 Tipo Importebull Campo iva_id Posicioacuten 97 Longitud 5 Tipo Numericobull Campo ds Posicioacuten 102 Longitud 200 Tipo Alfanumericobull
Factura electroacutenica normal (WSFE) 70
Si se informa el campo ID la factura se genera con dicho nuacutemero de secuencia De lo contrario para evitarproblemas y poder reprocesar el CAE se genera con un nuacutemero de secuencia del formatoTPPPPNNNNNNNN (tipo de comprobante punto de venta y nuacutemero de comprobante)
Factura electroacutenica exportacioacuten (WSFEX)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Formato
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 3bull Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo obs Posicioacuten 1618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 2618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 2668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 2671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 2691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 2692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 2706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 2714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 2715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 2716 Longitud 40 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 2756 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 2771 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 32 Longitud 12 Tipo Importe Decimalesbull Campo umed Posicioacuten 44 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 46 Longitud 12 Tipo Importe Decimales 3bull Campo imp_total Posicioacuten 58 Longitud 14 Tipo Importe Decimales 3bull Campo ds Posicioacuten 72 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica bienes de capital (WSBFE) 71
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Nota se utilizan 3 decimales para los importes y 6 para la cotizacioacuten de la moneda
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Tributo 2 IVA 3 Comprobante asociado 6 Opcionales 8 Periodo Comprobante asociado) y no tienedetalle de artiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbt_desde Posicioacuten 16 Longitud 8 Tipo Numericobull Campo cbt_hasta Posicioacuten 24 Longitud 8 Tipo Numericobull Campo concepto Posicioacuten 32 Longitud 1 Tipo Numericobull Campo tipo_doc Posicioacuten 33 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 35 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 46 Longitud 15 Tipo Importe Decimales 2bull Campo no_usar Posicioacuten 61 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 76 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 91 Longitud 15 Tipo Importe Decimales 2bull Campo imp_iva Posicioacuten 106 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 121 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 136 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 151 Longitud 3 Tipo Alfanumericobull Campo moneda_ctz Posicioacuten 154 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 164 Longitud 8 Tipo Alfanumericobull Campo cae Posicioacuten 172 Longitud 14 Tipo Alfanumericobull Campo fch_venc_cae Posicioacuten 186 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 194 Longitud 1 Tipo Alfanumericobull Campo motivos_obs Posicioacuten 195 Longitud 1000 Tipo Alfanumericobull Campo err_code Posicioacuten 1195 Longitud 6 Tipo Alfanumericobull Campo err_msg Posicioacuten 1201 Longitud 1000 Tipo Alfanumericobull Campo reproceso Posicioacuten 2201 Longitud 1 Tipo Alfanumericobull Campo emision_tipo Posicioacuten 2202 Longitud 4 Tipo Alfanumericobull Campo fecha_serv_desde Posicioacuten 2206 Longitud 8 Tipo Alfanumericobull
Factura electroacutenica exportacioacuten (WSFEX) 72
Campo fecha_serv_hasta Posicioacuten 2214 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 2222 Longitud 3 Tipo Numericobull Campo punto_vta Posicioacuten 2225 Longitud 5 Tipo Numericobull Campo fecha_hs_gen Posicioacuten 2230 Longitud 14 Tipo Alfanumerico formato yyyymmddhhmiss(pCAEA contingencia)
bull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tributo_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo desc Posicioacuten 18 Longitud 100 Tipo Alfanumericobull Campo base_imp Posicioacuten 118 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 133 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 148 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo iva_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo base_imp Posicioacuten 18 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 33 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numericobull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numericobull Campo nro Posicioacuten 9 Longitud 8 Tipo Numericobull Campo fecha Posicioacuten 17 Longitud 8 Tipo Numericobull Campo cuit Posicioacuten 25 Longitud 11 Tipo Numericobull
Opcionales Disponible desde actualizacioacuten 133b
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Compradores Disponible desde actualizacioacuten 137a (RG-4109-E Bienes Muebles Registrables)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo doc_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo doc_nro Posicioacuten 5 Longitud 80 Tipo Numerico Decimalesbull Campo porcentaje Posicioacuten 85 Longitud 6 Tipo Importe Decimales 2bull
Periodo Cbte Asoc Disponible desde actualizacioacuten 138a
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_desde Posicioacuten 2 Longitud 8 Tipo Numericobull Campo fecha_hasta Posicioacuten 10 Longitud 8 Tipo Numericobull
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 73
Factura electroacutenica Mercado Interno Matrix (WSMTXCA)
El formato es similar al de factura electroacutenica mercado interno version 1 pero variacutea el tipo de registro (0Encabezado 1 Tributo 2 IVA 3 Comprobante asociado 4 Detalle de cada item) y tiene detalle deartiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 10 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 12 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 14 Longitud 4 Tipo Numerico Decimalesbull Campo cbt_desde Posicioacuten 18 Longitud 8 Tipo Numerico Decimalesbull Campo cbt_hasta Posicioacuten 26 Longitud 8 Tipo Numerico Decimalesbull Campo concepto Posicioacuten 34 Longitud 1 Tipo Numerico Decimalesbull Campo tipo_doc Posicioacuten 35 Longitud 2 Tipo Numerico Decimalesbull Campo nro_doc Posicioacuten 37 Longitud 11 Tipo Numerico Decimalesbull Campo imp_total Posicioacuten 48 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 63 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 78 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 93 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 108 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 138 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 141 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 151 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_desde Posicioacuten 161 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_hasta Posicioacuten 171 Longitud 10 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 181 Longitud 14 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 195 Longitud 10 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 205 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 206 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 1206 Longitud 6 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 1212 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo reproceso Posicin 2212 Longitud 1 Tipo Alfanumerico Decimalesbull Campo emision_tipo Posicin 2213 Longitud 4 Tipo Alfanumerico Decimalesbull Campo observaciones Posicioacuten 2217 Longitud 1000 Tipo Alfanumerico Decimalesbull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tributo_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull Campo desc Posicioacuten 5 Longitud 100 Tipo Alfanumerico Decimalesbull Campo base_imp Posicioacuten 105 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 120 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 135 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo iva_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Mercado Interno Matrix (WSMTXCA) 74
Campo base_imp Posicioacuten 5 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 20 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Opcionales
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Detalle de item
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo u_mtx Posicioacuten 2 Longitud 10 Tipo Numerico Decimalesbull Campo cod_mtx Posicioacuten 12 Longitud 30 Tipo Alfanumerico Decimalesbull Campo codigo Posicioacuten 42 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 72 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo umed Posicioacuten 87 Longitud 3 Tipo Numerico Decimalesbull Campo precio Posicioacuten 90 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo bonif Posicioacuten 105 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo iva_id Posicioacuten 120 Longitud 3 Tipo Numerico Decimalesbull Campo imp_iva Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 138 Longitud 15 Tipo Importe Decimales 2bull Campo ds Posicioacuten 153 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo pais_dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo nombre_cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 2bull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1) 75
Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 4000 Tipo Alfanumerico Decimalesbull Campo obs_generales Posicioacuten 4618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 5618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 5668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 5671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 5691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 5692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 5706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 5714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 5715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 5716 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 6716 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 6731 Longitud 8 Tipo Alfanumerico Decimalesbull Campo excepcion Posicioacuten 6739 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 6839 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 6939 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo fecha_pago Posicioacuten 7939 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 50 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 52 Longitud 12 Tipo Importe Decimales 6bull Campo umed Posicioacuten 64 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 66 Longitud 12 Tipo Importe Decimales 6bull Campo importe Posicioacuten 78 Longitud 13 Tipo Importe Decimales 2bull Campo bonif Posicioacuten 91 Longitud 12 Tipo Importe Decimales 6bull Campo ds Posicioacuten 103 Longitud 4000 Tipo Alfanumerico Decimalesbull
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull Campo cbte_cuit Posicioacuten 17 Longitud 11 Tipo Numerico Decimalesbull
Formato Tablas xBase DBF (dBase III Fox Clipper)
Las ultimas versiones de la interfaz ademas de manejo por archivo de texto soporta manejo por tablas DBFEstas tablas pueden ser generadas con cualquier libreriacutea o aplicacioacuten compatible (incluso pueden ser abiertascon planillas de caacutelculo)
Formato Tablas xBase DBF (dBase III Fox Clipper) 76
Los tipos de campos son
C(l) caracter (longitud)bull N(ld) numerico (longitud y decimales)bull M camos memo (usado para errores y mensajes extensos gt250 caracteres)bull D campos fechabull
Los nombres de los campos son los mismos que se manejan para el archivo de texto pero sin el guioacuten bajo yrecortados a 10 caracteres
Se utiliza la libreriacutea Python dBase (dbf-08819) que soporta los siguientes tipos de archivos
dBase III Plusbull dBase III Plus wmemosbull dBase IVbull dBase IV SQLbull dBase IV wmemosbull dBase IV wmemosbull dBase IV wSQL tablebull dBase Vbull FoxBASEbull FoxPro wmemosbull Visual FoxProbull Visual FoxPro (auto increment field)bull
Reconoce archivos con extensioacuten DBF DBT FPT entre otros
Factura electroacutenica mercado interno (WSFEv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
IMPORTANTE algunos campos han cambiado su denominacioacuten en las uacuteltimas versiones para hacerloscompatibles con las tablas PDF (solo se muestra el nombre de campo perteneciente a la uacuteltima actualizacioacuten)
Encabezado (encabezadbf)
Encabezado (datos generales de la factura)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtdesde N(80)bull Campo cbthasta N(80)bull Campo concepto N(10)bull Campo tipodoc N(20)bull Campo nrodoc N(110)bull Campo imptotal N(152)bull Campo nousar N(152)bull Campo imptotconc N(152)bull
Factura electroacutenica mercado interno (WSFEv1) 77
Campo impneto N(152)bull Campo impiva N(152)bull Campo imptrib N(152)bull Campo impopex N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo fechavencp C(8)bull Campo cae C(14)bull Campo fchvenccae C(8)bull Campo resultado C(1)bull Campo motivosobs Mbull Campo errcode C(6)bull Campo errmsg Mbull Campo reproceso C(1)bull Campo emisiontip C(4)bull Campo fechaservd C(8)bull Campo fechaservh C(8)bull
Tributo (tributodbf)
Detalle de otros tributos
Campo tiporeg N(10)bull Campo tributoid N(160)bull Campo desc C(100)bull Campo baseimp N(152)bull Campo alic N(152)bull Campo importe N(152)bull
Iva (ivadbf)
Detalle de subtotales por aliacutecuota de IVA
Campo tiporeg N(10)bull Campo ivaid N(160)bull Campo baseimp N(152)bull Campo importe N(152)bull
Comprobante Asociado (comprobadbf)
Comprobante Asociado
Campo tiporeg N(10)bull Campo tipo N(30)bull Campo ptovta N(40)bull Campo nro N(80)bull
Opcionales (opcionaldbf)
Datos opcionales (adicionales seguacuten cada nueva RG 3411 3668 4004-E etc)
Encabezado (encabezadbf) 78
Campo tiporeg N(10)bull Campo opcionalid C(4)bull Campo valor C(250)bull
Compradores (compradodbf)
Datos para Venta de bienes muebles registrables (RG 4109-E)
Campo tiporeg N(10)bull Campo doctipo N(30)bull Campo docnro N(800)bull Campo porcentaje N(62)bull
Factura electroacutenica mercado interno matrix (WSMTXCA)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Tabla Encabezadbf Encabezado (datos generales de la factura)
tiporeg N(10)bull fechacbte C(10)bull tipocbte N(20)bull puntovta N(40)bull cbtdesde N(80)bull cbthasta N(80)bull concepto N(10)bull tipodoc N(20)bull nrodoc N(110)bull imptotal N(152)bull imptotconc N(152)bull impneto N(152)bull impsubtota N(152)bull imptrib N(152)bull impopex N(152)bull monedaid C(3)bull monedactz N(106)bull fechavencp C(10)bull fechaservd C(10)bull fechaservh C(10)bull cae N(140)bull fchvenccae C(10)bull resultado C(1)bull motivosobs Mbull errcode C(6)bull errmsg Mbull reproceso C(1)bull emisiontip C(4)bull observacio Mbull
Tabla Tributodbf Detalle de otros tributos
Opcionales (opcionaldbf) 79
tiporeg N(10)bull tributoid C(3)bull desc C(100)bull baseimp N(152)bull alic N(152)bull importe N(152)bull
Tabla Ivadbf Detalle de subtotales por aliacutecuota de IVA
tiporeg N(10)bull ivaid C(3)bull baseimp N(152)bull importe N(152)bull
Tabla Comprobadbf Comprobante Asociado
tiporeg N(10)bull tipo N(30)bull ptovta N(40)bull nro N(80)bull
Tabla Detallesdbf Detalles del item
tiporeg N(10)bull umtx N(100)bull codmtx C(30)bull codigo C(30)bull qty N(153)bull umed N(30)bull precio N(153)bull bonif N(153)bull ivaid N(30)bull impiva N(152)bull impsubtota N(152)bull ds Mbull
Factura electroacutenica exportacioacuten (WSFEXv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Encabezado (encabezadbf)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtenro N(80)bull Campo tipoexpo N(10)bull Campo permisoexi C(1)bull Campo paisdstcmp N(30)bull
Factura electroacutenica mercado interno matrix (WSMTXCA) 80
Campo nombreclie C(200)bull Campo cuitpaiscl N(110)bull Campo domicilioc Mbull Campo idimpositi C(50)bull Campo imptotal N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo obscomerci Mbull Campo obsgeneral Mbull Campo formapago C(50)bull Campo incoterms C(3)bull Campo incotermsd C(20)bull Campo idiomacbte C(1)bull Campo cae N(140)bull Campo fechavto C(8)bull Campo resultado C(1)bull Campo reproceso C(1)bull Campo motivosobs Mbull Campo id N(150)bull Campo fchvenccae C(8)bull Campo excepcion C(100)bull Campo errcode C(100)bull Campo errmsg Mbull
Detalle (detalledbf)
Campo tiporeg N(10)bull Campo codigo C(50)bull Campo qty N(122)bull Campo umed N(20)bull Campo precio N(122)bull Campo importe N(132)bull Campo bonif N(122)bull Campo ds Mbull
Permiso (permisodbf)
Campo tiporeg N(10)bull Campo idpermiso C(16)bull Campo dstmerc N(30)bull
Comprobante Asociado (comprobadbf)
Campo tiporeg N(10)bull Campo cbtetipo N(30)bull Campo cbtepuntov N(40)bull Campo cbtenro N(80)bull Campo cbtecuit N(110)bull
Encabezado (encabezadbf) 81
Formato JSON
Factura electroacutenica mercado interno (WSFEv1)
Para lenguajes modernos (PHP JAVA JavaScript etc) se pueden utilizar archivos de intercambio en formatoJSON
Ejecutar rece1exe json
Ejemplo archivo de entrada faactura_electronicajson
[ tipo_cbte 3 punto_vta 4002 cbt_desde 447 cbt_hasta 447 fecha_cbte 20190511 tipo_doc 80 nro_doc 30500010912
concepto 1 fecha_venc_pago null fecha_vto 20190521
imp_neto 10000 imp_iva 2100 imp_op_ex 000 imp_tot_conc 000 imp_trib 100 imp_total 12200
moneda_id PES moneda_ctz 1000
ivas [ iva_id 5 base_imp 100 importe 21 ] tributos [ tributo_id 99 alic 1 base_imp 100 importe 1 desc Impuesto Municipal Matanza ] cbtes_asoc [ nro 1234 pto_vta 2 tipo 1 ] opcionales [] compradores [] ]
La resupuesta del webservice de AFIP es agregada al mismo formato (ejemplo editado)
[ resultado A cae 69193742426586 fch_venc_cae 20190521 emision_tipo CAE motivos_obs err_code err_msg
Formato JSON 82
reproceso ]
Forma de uso
Llamar al ejecutable RECEEXE (factura electroacutenica normal WSFE) RECEBEXE (factura electroacutenicaBienes de Capital WSBFE) RECEXEXE (factura electroacutenica Exportacioacuten) RECE1EXE (facturaelectroacutenica mercado interno WSFE versioacuten 1) en la carpeta de la intefase (CPYAFIPWS)
En caso de ejecucioacuten correcta informara por pantalla los ID y CAE obtenidos y el coacutedigo de retorno es 0
ID 1000200000063 CAE 59033567692234 Motivo 00 Reproceso NID 1000200000064 CAE 59033693441244 Motivo 00 Reproceso NID 1000200000065 CAE 59033880026543 Motivo 00 Reproceso N
El CAE obtenido fecha de vencimiento y demaacutes valores devueltos por WSFE (resultado reproceso motivode rechazo u observacioacuten) son escritos en el archivo de salida con la misma informacioacuten de la factura que enel archivo de entrada
En el caso de error informa por pantalla el motivo y el coacutedigo de retorno es distinto de 0
ns1coenotAuthorized Computador no autorizado a acceder los servicio de AFIP
1000 FERecuperaLastCMPRequestSRV_RA Usuario no autorizado a realizar esta operacionValidacionDeToken No aparecioacute CUIT en lista de relaciones 30000000000
Paraacutemetros
RECEEXE RECEBEXE RECEXEXE RECE1EXE y RECEMEXE reciben los siguientes argumentospor liacutenea de comando
ayuda lista los paraacutemetros habilitadosbull prueba Teniendo los certificados instalados se puede realizar una prueba donde la interface generaraacuteun archivo de entrada para las tres proacuteximas facturas obteniendo los uacuteltimos nuacutemeros de transaccioacuteny comprobante
bull
ult Solicita Tipo de comprobante y Punto de Venta y devuelve el uacuteltimo numero de comprobanteregistrado
bull
dummy consulta estado de servidores (deberiacutean ser OK los 3 servidores)bull ptosventa devuelve los puntos de venta habilitados para emitir facturas electroacutenicas (soloWSFEv1RECE1)
bull
debug modo depuracioacuten (detalla y confirma las operaciones)bull formato muestra el formato de los archivos de entradasalidabull get recupera datos de un comprobante autorizado previamente (verificacioacuten solo para RECEXRECE1 y RECEM)
bull
xml almacena los requerimientos y respuestas XML (uacutetil para depuracioacuten y registro)bull dbf modo de trabajo con tablas Dbase IIIFoxPro o similares (solo RECE1 y RECEM)bull json modo de trabajo con formato JSON (JavaScript PHP Java) (solo RECE1)bull
Se puede especificar como primer paraacutemetro un nombre de archivo RECEINI alternativo para cargardistintas configuraciones por ej
Factura electroacutenica mercado interno (WSFEv1) 83
RECE1EXE rece-empresaxini
Si no se especifica accion por defecto se enviacutea la informacioacuten del archivo de intercambio para autorizar laemisioacuten de factura electroacutenica devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) y demaacutes datos queresponde AFIP
Para CAEA (CAE Anticipado) aplican las siguientes opciones (RECEMRECE1)
solicitarcaea obtiene un CAEA y su respectivo periacuteodo de vigencia (fecha de validez desde y fechade validez hasta)
bull
consultarcaea consulta la informacioacuten correspondiente a un CAEA previamente otorgado (recibeperiacuteodoorden o CAEA)
bull
informarcaeanoutilizado informarcaeanoutilizadoptovta registra en AFIP un CAEA no utilizadobull informarcaea enviacutea la informacioacuten del comprobante emitido y asociado a un CAEAbull
Ejemplo RECE1 para autorizar una factura electroacutenica
Al ejecutar la herramienta sin paraacutemetros se autoriza la factura en el archivo de entrada guardando elresultado de AFIP en el archivo de salida
CPYAFIPWSgt RECE1EXE
Procesando FAC A 4002 00002067 00002067 CUIT 30628789661 $ 12200 IVA $ 2100NRO 2067 Resultado A CAE 65253261906700 Obs Err Reproceso S
Ante cualquier dificultad agregar los paraacutemetros --trace debug para ver los mensajes de depuracioacuten y xmldetallados
Ejemplo RECE1 consulta ultimo comprobante
Ejemplo para obtener el uacuteltimo nuacutemero de factura emitida
CPYAFIPWSgt RECE1EXE ultConsultar ultimo numeroTipo de comprobante 19Punto de venta 2Ultimo numero 62
Si se pasa el tipo de comprobante y punto de venta por linea de comando (luego de ult) en el archivo desalida guardaraacute el dato devuelto por AFIP
CPYAFIPWSgt RECE1EXE ult 1 4001Consultar ultimo numeroUltimo numero 222
Ejemplo RECE1 consulta de comprobante
Es posible recuperar los datos de un comprobante indicando get y tipo de comprobante punto de venta ynuacutemero de comprobante
CPYAFIPWSgt RECE1EXE get 1 5 478Recuperar comprobanteFechaCbte = 20150703
Paraacutemetros 84
CbteNro = 478PuntoVenta = 5TipoDoc = 80NroDoc = 27269434894ImpTotal = 226875CAE = 65273821773505Vencimiento = 20150713EmisionTipo = CAE
Es posible agregar xml yo --trace para ver el mensaje enviado y recibido desde AFIP con datos completosLos datos del comprobante recuperado tambieacuten se guardaraacuten en el archivo de intercambio (salida)
Ejemplo RECE1 consulta puntos de venta
Ejemplo para consultar los puntos de venta habilitados por AFIP
CPYAFIPWSgt RECE1EXE ptosventa
=== Puntos de Venta ===3|EmisionTipoCAE|BloqueadoN|FchBajaNULL4|EmisionTipoCAE|BloqueadoN|FchBajaNULL
Ejemplo RECEX1 consulta monedas con cotizacioacuten
Retorna la cotizacioacuten a la fecha consultada de la base de datos aduanera de todas las monedas que poseancotizacioacuten a la fecha indicada
CPYAFIPWSgt RECEX1EXE monctz Fecha (AAAAMMDD) |024|1757370|2202019||030|10991355|2202019||034|2833349|2202019||009|39777268|2202019||012|10663978|2202019||028|21977839|2202019||014|6073274|2202019||023|0012042|2202019||018|30185896|2202019||019|0358860|2202019||032|0012749|2202019||DOL|3967|2202019||016|4295104|2202019||026|28471159|2202019||033|0060760|2202019||035|11955998|2202019||063|27265191|2202019||015|4659463|2202019||060|451564|2202019||062|0605559|2202019||010|2068376|2202019||029|0006557|2202019||011|1214078|2202019||021|520470|2202019||025|0381832|2202019||031|5761801|2202019||061|5902659|2202019|0 OK
Ejemplo RECE1 consulta de comprobante 85
Entorno
Algunas versiones de COBOL cambian el directorio u otras variables del entorno (codificacioacuten zona horariaetc) En este caso se recomienda armar un archivo RECEBAT
ECHO OFFREM limpiar la zona horaria y cambiar al directorio de la interfaseSET TZ=CD CPYAFIPWSRECEEXE
PyFEPDF generador de PDF de facturas electroacutenicas
La herramienta PyFEPDF permite generar archivos PDF con el contenido de las Facturas Electroacutenicas paraponerlos a disposicioacuten de los clientes o ser enviados electroacutenicamente viacutea email con cualquier servicio decorreos o por web
Utiliza un enfoque similar a las interfaces para webservices por lo que su uso es muy simple totalmenteautomatizado (sin intervencioacuten del usuario) y no necesita herramientas externas (ni impresoras PDF nitipografiacuteas para el coacutedigo de barras)
Cubre toda la operatoria de Factura Electroacutenica seguacuten AFIP dada la Resolicioacuten General 24852006 ynormativa relacionada (RG141503 y RG1361) aplicable a
merado interno (WSFEv1 y WSMTXCA incluyendo importacioacuten con y sin detalle)bull exportacioacuten (WSFEX)bull bono fiscal electroacutenico (WSBFE)bull
Ver muestra baacutesica en facturapdf
La interfaz maneja automaacuteticamente
Logotipos e informacioacuten particular de cada empresabull Disentildeo en PDF libre modificable (incluye disentildeador visual faacutecil e intuitivo)bull Paginado y transporte con muacuteltiples copias (Original Duplicado etc)bull Textos ilimitados (detalles observaciones etc)bull IVA discriminado (subtotales facturas A)bull Coacutedigo de barras Interleaved 2 of 7 con diacutegito verificador (reemplazado por coacutedigo QR)bull Coacutedigo QR (Obligatorio a partir de Marzo 2021 - ver cronograma de implementacioacuten)bull Metadatos en las propiedades del PDF para buacutesquedas y archivamientobull Impresioacuten directa sin intervencioacuten del usuariobull
Nota algunas caracteriacutesticas pueden no estar disponible dado limitaciones del lenguaje de programacioacuten yosistema operativo
De manera similar a las otras interfaces y herramientas el instalador de PyFEPDF para homologacioacuten(evaluacioacuten y pruebas) estaacute disponible en la seccioacuten Descargas
Importante PyFEPDF es una herramienta adicional independiente del resto de los webservices yherramientas y los costos del soporte comercial variacutean dependiendo de las necesidades para implementarlaVer Costos y Condiciones
Entorno 86
Aclaraciones PDF
Coacutedigo de Barras es recomendable generarlo especialmente si se imprime (dependiendo del casoseriacutea obligatorio) Este componente contempla internamente la generacioacuten directa de la imaacutegen demanera vectorial (escalable en cualquier resolucioacuten) seguacuten el formato que requiere AFIP (Interleaved2 of 5) y no es necesario utilizar ninguna tipografia ni cuestioacuten adicional Simplemente debecompletarse el CUIT emisor punto de venta tipo de comprobante CAE y fecha de vencimiento delCAE (esta uacuteltima en formato AFIP AAAAMMDD) El componente contempla tambieacuten el caacutelculo deldiacutegito verificador De no estar todos los datos correctos no se generaraacute el coacutedigo de barras Parainformacioacuten general ver nuestro componente auxiliar PyI25
bull
Observaciones AFIP Si esta presente motivos_obs (respuesta de AFIP en WSFEv1Obs osimilar) deberiacutea agregarse la leyenda El IVA discriminado no puede computarse como CreacuteditoFiscal (RG248508 Art 27) -esto estaacute contemplado internamente en el componente- Por ej unmensaje de observacioacuten de AFIP seriacutea Factura individual DocTipo 80 DocNro 30000000007 nose encuentra registrado en los padrones de AFIP Anteriormente AFIP solo informaba el coacutedigo (09en este caso) para maacutes informacioacuten ver WSFE F136
bull
Discriminacioacuten de IVA el programador es responsable de enviar los datos correctos seguacuten lasdiferentes normativas de AFIP Generalmente el importe de IVA solo se debe discriminar parafacturas clase A o M En las facturas clase B por lo general solo se muestra la tasa pero no el neto niIVA liquidado En las facturas clase C y E generalmente no se muestra la columna de IVA ni NETOEsta loacutegica esta contemplada internamente pero es responsabilidad de la aplicacioacuten que utilice elcomponente el revisar por la consistencia de los datos Salvo en la Factura A para el resto se debeindicar el precio unitario IVA Incluido (de corresponder) y el importe total de cada artiacuteculo tambieacutendeberiacutea ser IVA Incluido en todos los casos (de manera similar a como se emiten los comprobantespor el sitio de clave fiscal de AFIP) Recomendamos utilizar el campo imp_subtotal para evitardiferencias de calculo y redondeo (deberiacutea ser la suma del neto + importes no gravado y exento paracomprobantes clase A e incluir el importe de IVA para los comprobantes clase B)
bull
Descuentos si bien se provee un campo descuento para los importes generales es recomendableque se utilice un artiacuteculo de bonificacioacuten general en el detalle con coacutedigo de unidad de medidaumed=99 y el importe en negativo para un correcto caacutelculo de los subtotales (especialmente si lafactura se extiende por varias paacuteginas) y contemplar la normativa de almacenamientoinformacioacuten yformatos de otros webservices como WSMTXCA WSBFEv1 y WSFEXv1
bull
Logotipo AFIP en las uacuteltimas actualizaciones (107q) se incluye el logotipo de AFIP (similar al quese incluye en las facturas emitidas por clave fiscal) Para que muestre la leyenda ComprobanteAutorizado debe establecerse el campo resultado = A y no debe ser un instalador dehomologacioacuten Proacuteximamente se agregaraacuten maacutes validaciones en este sentido (la constatacioacuten delcomprobante es responsabilidad de la aplicacioacuten que utilice el componente ver WSCDC) Verejemplos y formatos a continuacioacuten para mayor informacioacuten
bull
Requisitos formato de Facturaver httpwwwafipgovarafip259IIcap1bhtmbull
Interfaz COM PyFEPDFDLL
PyFEPDFDLL es una interfaz COM (AutomatizacionActiveX) similar a un Control OCX pero que nonecesita un formulario visual por lo que se puede usar desde desde cualquier lenguaje compatible enWindows (VB VFP Delphi etc) Tambieacuten puede utilizarce desde aplicaciones como MS Excel MS Accessetc
Aclaraciones PDF 87
Objeto COM PyFEPDF propiedades y meacutetodos
El objeto COM se crea invocando a CreateObject(PyFEPDF)
Las propiedades del objeto son
CUIT cuit del emisorbull Version versioacuten de la herramienta (ej 101b)bull InstallDir directorio de instalacioacutenbull
Los meacutetodos generales del objeto para crear una factura son los siguientes (ver ejemplo en VB a continuacioacutenpara maacutes detalles)
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbte_nro imp_total imp_tot_conc imp_neto imp_iva imp_tribimp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz cae fecha_vto_caeid_impositivo nombre_cliente domicilio_cliente pais_dst_cmpobs_comerciales obs_generales forma_pago incoterms idioma_cbtemotivos_obs) recibe toda la informacioacuten del encabezado de una factura seguacuten la legislacioacutenvigente
bull
AgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed preciobonif iva_id imp_iva importe despacho) agrega un item de detalle de artiacuteculoAdicionalmente puede pasarse los paraacutemetros dato_a dato_b dato_c dato_d dato_edespacho tambieacuten es opcional
bull
AgregarIva(iva_id base_imp importe) agrega un subtotal de iva (por cada aliacutecuota)bull AgregarTributo(tributo_id Desc base_imp alic importe) agrega otrosimpuestos (uno por cada ingresos brutos retenciones y percepciones etc)
bull
AgregarCmpAsoc(tipo pto_vta nro) agrega un comprobante asociado a la facturabull
Una vez creada la factura con todos los items se debe especificar el formato mediante los siguientes meacutetodos(ver ejemplo en VB a continuacioacuten para maacutes detalles)
CargarFormato(archivo_csv) crea todos los campos del disentildeo de la factura (layout)leyendolos desde el archivo especificado
bull
AgregarCampo(nombre tipo x1 y1 x2 y2 font size bold italicunderline foreground background align text priority) agrega uncampo manualmente al disentildeo de la factura (layout)
bull
AgregarDato(campo valor pagina) con campo = nombre usado en plantilla el valorpara cada hoja y en pagina el nro de paacutegina o T todas P primera U ultima
bull
Luego se debe crear la plantilla que seraacute rellenada con los datos de la factura y por uacuteltimo se generaraacute ymostraraacute el PDF (ver ejemplo en VB a continuacioacuten para maacutes detalles)
CrearPlantilla(papel orientacion) crea una plantilla con el papel (A4 legal o letter)y orientacioacuten (portrait landscape)
bull
ProcesarPlantilla(num_copias lineas_max qty_pos) procesa los datos de lafactura dentro de la plantilla indicando la cantidad de copioas (1 original 2 duplicado 3triplicado)la cantidad de liacuteneas maacuteximas por paacutegina
bull
GenerarPDF(salida) genera el archivo PDF terminado con el nombre dado en salidabull
Objeto COM PyFEPDF propiedades y meacutetodos 88
MostrarPDF(salida imprimir) muestra el contenido del PDF generado (usando AdobeAcrobat Reader o similar) y opcionalmente lo enviacutea directo a la impresora
bull
AtributosPropiedades especiacuteficos de configuracioacuten
CUIT cuit del emisor (para generar el coacutedigo de barras)bull FmtCantidad formato numeacuterico para cantidades por ej 04 (4 decimales)bull FmtPrecio formato numeacuterico para precios unitarios por ej 02 (2 decimales)bull Locale configuracioacuten regional a utilizar para formatear importes y fechas por ejSpanish_Argentina1252 (Windows) es_ARutf8 (Linux)
bull
Atributos geneacutericos (similares a otros componentes)
Version versioacuten de la interfase (ej 107q)bull InstallDir directorio de instalacioacuten (ej CArchivos de ProgramaPyAfipWs)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Ver Formato de Intercambio PDF y los otros componentes a los webservices para informacioacuten adicional sobrecada campo
Ejemplo PyFEPDF en VB
A modo de demostracioacuten a continuacioacuten se detalla un ejemplo simple (lenguaje Visual Basic) comentando elfuncionamiento baacutesico de la interfaz para generacioacuten de Facturas Electroacutenicas en formato PDF
Crear objeto interface para generacioacuten de FE en PDFSet PyFEPDF = CreateObject(PyFEPDF)DebugPrint PyFEPDFVersionDebugPrint PyFEPDFInstallDir
CUIT del emisorPyFEPDFCUIT = 33693450239
establezco formatos (cantidad de decimales)PyFEPDFFmtCantidad = 04PyFEPDFFmtPrecio = 02
Datos del encabezado de la facturatipo_cbte = 1 Factura Apunto_vta = 40000 prefijocbte_nro = 12345678 nuacutemero de facturafecha = 20110327concepto = 3 datos del clientetipo_doc = 80 nro_doc = 30000000007nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16 coacutedigo para exportacioacutenid_impositivo = PJ54482221-l totales del comprobanteimp_total = 12200 imp_tot_conc = 000imp_neto = 10000 imp_iva = 2100imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000
Ejemplo PyFEPDF en VB 89
fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturadofecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libremoneda_id = 012moneda_ctz = 05forma_pago = 30 diasincoterms = FOB termino de comercio exterior para exportacioacutenidioma_cbte = 1 idioma para exportacioacuten (no usado por el momento)motivos_obs = 11 motivo de observacioacuten (F136 y otros)
Coacutedigo de Autorizacioacuten Electroacutenica y fecha de vencimiento (para facturas tradicionales no imprimir el CAE ni coacutedigo de barras)cae = 61123022925855fecha_vto_cae = 20110320
Creo la factura (internamente en la interfaz)ok = PyFEPDFCrearFactura( _ concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fecha_vto_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivos_obs)
Parametros adicionales del encabezado
ok = PyFEPDFEstablecerParametro(localidad_cliente Hurlingham)ok = PyFEPDFEstablecerParametro(provincia_cliente Buenos Aires)
Leyenda Comprobante Autorizado (verificar previamente con WSCDC o similar)
ok = PyFEPDFEstablecerParametro(resultado A)
Agregar comprobantes asociados (si es una NCND)tipo = 19pto_vta = 2nro = 1234pyfepdfAgregarCmpAsoc(tipo pto_vta nro)
Agrego subtotales de IVA (uno por alicuota)iva_id = 5 coacutedigo para aliacutecuota del 21base_imp = 100 importe neto sujeto a esta aliacutecuotaimporte = 21 importe liquidado de ivaok = PyFEPDFAgregarIva(iva_id base_imp importe)
Agregar cada impuesto (por ej IIBB retenciones percepciones etc)tributo_id = 99 codigo para 99-otros tributosDesc = Impuesto Municipal Matanzabase_imp = 10000 importe sujeto a este tributoalic = 100 alicuota (porcentaje) de este tributoimporte = 100 importe liquidado de este tributook = PyFEPDFAgregarTributo(tributo_id Desc base_imp alic importe)
Agrego detalles de cada item de la facturau_mtx = 123456 unidadescod_mtx = 1234567890123 coacutedigo de barrascodigo = P0001 codigo interno a imprimir (ej articulo)
Ejemplo PyFEPDF en VB 90
ds = Descripcion del producto P0001qty = 2 cantidadumed = 7 coacutedigo de unidad de medida (ej 7 para unidades)precio = 100 precio neto (A) o iva incluido (B)bonif = 0 importe de descuentosiva_id = 5 coacutedigo para aliacutecuota del 21imp_iva = 42 importe liquidado de ivaimporte = 242 importe total del itemdespacho = Nordm 123456 numero de despacho de importacioacutenok = PyFEPDFAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
ds = Descuento generalumed = 99precio = -100imp_iva = -21importe = -121ok = PyFEPDFAgregarDetalleItem( ds 0 umed _ precio 0 iva_id imp_iva importe)
Agrego datos adicionales fijosok = PyFEPDFAgregarDato(logo PyFEPDFInstallDir + fpdfpng)ok = PyFEPDFAgregarDato(EMPRESA Empresa de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE1 Direccion de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE2 Capital Federal)ok = PyFEPDFAgregarDato(ObservacionesGenerales1 Nota al pie1)
Cargo el formato desde el archivo CSV (opcional) (carga todos los campos a utilizar desde la planilla)ok = PyFEPDFCargarFormato(PyFEPDFInstallDir + facturacsv)
Agrego campos manualmente (opcional)nombre = prueba tipo = T T texto L lineas I imagen etcX1 = 50 Y1 = 150 X2 = 150 Y2 = 255 coordenadas (en milimetros)Font = Arial Size = 20 Bold = 1 Italic = 1 Underline = 1 tipo de letraforeground = 000000 background = FFFFFF colores de frente y fondoAlign = C Alineacioacuten Centrado Izquierda Derechaprioridad = 2 Orden Z menor prioridad se dibuja primero (para superposiciones)Text = iexclpruebaok = PyFEPDFAgregarCampo(nombre tipo X1 Y1 X2 Y2 _ Font Size Bold Italic Underline _ foreground background _ Align Text priority)
completo campos personalizados de la plantillaok = PyFEPDFAgregarDato(custom-nro-cli Cod123)ok = PyFEPDFAgregarDato(custom-pedido 1234)ok = PyFEPDFAgregarDato(custom-remito 12345)ok = PyFEPDFAgregarDato(custom-transporte Camiones Ej SRL)
Creo plantilla para esta factura (papel A4 vertical)papel = A4 o letter para carta legal para oficioorientacion = portrait o landscape (apaisado)ok = PyFEPDFCrearPlantilla(papel orientacion)num_copias = 3 original duplicado y triplicadolineas_max = 24 cantidad de linas de items por paacuteginaqty_pos = izq (cantidad a la izquierda de la descripcioacuten del artiacuteculo) Proceso la plantillaok = PyFEPDFProcesarPlantilla(num_copias lineas_max qty_pos) Genero el PDF de salida seguacuten la plantilla procesadasalida = facturapdfok = PyFEPDFGenerarPDF(salida)
Ejemplo PyFEPDF en VB 91
Abro el visor de PDF y muestro lo generado (es necesario tener instalado Acrobat Reader o similar)imprimir = False cambiar a True para que lo envie directo a la impresoraok = PyFEPDFMostrarPDF(salida imprimir)
Ver pyfepdfbas (ejemplo completo)
Herramienta PyFEPDFEXE por liacutenea de comando (consola)
La herramienta dispone de un programa PyFEPDFEXE que puede ser utilizado desde la consola y generarfacturas en formato PDF dado archivos de entada en texto o DBF
Los paraacutemetros son
--ayuda este mensajebull --licencia muestra la licencia del programabull --debug modo depuracioacuten (detalla y confirma las operaciones)bull --formato muestra el formato de los archivos de entradasalidabull --prueba genera y autoriza una factura de prueba (no usar en produccioacuten)bull --cargar carga un archivo de entrada (txt o dbf) con los datos del comprobantebull --grabar graba un archivo de salida (txt o dbf) con los datos de los comprobantesbull --pdf genera la imaacutegen de factura en PDFbull --dbf utiliza tablas DBF en lugar del archivo de entrada TXTbull
Ver receini para paraacutemetros de configuracioacuten
Ejemplos
Ver el formato de archivos de entrada
PYFEPDFEXE --formato
1
Realizar una prueba (genera facturatxt y facturapdf)
PYFEPDFEXE --prueba --mostrar --grabar
2
Realizar una prueba de DBF (genera encabezadbf detallesdbf ivadbfpermisodbf tributodbf cbteasocdbf datodbf y facturapdf)
PYFEPDFEXE --prueba --dbf --mostrar --grabar
3
Cargar archivo de entrada (leer facturatxt y generar facturapdf) mostrando la factura
PYFEPDFEXE --cargar --mostrar
4
Cargar tablas DBF (leer encabezadbf detallesdbf ivadbf permisodbftributodbf cbteasocdbf datodbf y generar facturapdf) imprimiendo la factura
PYFEPDFEXE --cargar --dbf --mostrar --imprimir
5
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYFEPDF_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico
Herramienta PyFEPDFEXE por liacutenea de comando (consola) 92
PYFEPDFEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Formato de Intercambio PDF
Para lenguajes donde no es posible utilizar objetos COM como en algunas versiones de COBOL sedesarrolloacute una interfase de texto para poder generar PDF con esta herramienta Adicionalmente laherramienta para generacioacuten de PDF soporta manejo por tablas DBF Estas tablas pueden ser generadas concualquier libreriacutea o aplicacioacuten compatible (dBase FoxPro Clipper incluso pueden ser abiertas con planillasde caacutelculo)
Los nombres de los campos y funcionamiento son los mismos entre los meacutetodos y archivos de texto perorecortados por compatibilidad con DBF
En este caso se puede utilizar un uacutenico archivo de texto (facturatxt) o varias tablas DBF (ver meacutetodorelacionado a la interfaz COM para maacutes informacioacuten) Los tipos de registros son
0 para encabezado (encabezadbf) - meacutetodo CrearFactura y EstablecerParametrobull 1 para detalles (detalle dbf) - meacutetodo AgregarDetalleItembull 2 para permisos (permisosdbf) - meacutetodo AgregarPermisobull 3 para comprobantes asociados (comprobadbf) - meacutetodo AgregarCmpAsocbull 4 para iva (ivadbf) - meacutetodo AgregarIvabull 5 para tributos (tributodbf) - meacutetodo AgregarTributobull 6 para datos opcionales (AFIP) -no utilizado-bull 9 para datos adicionales (datosdbf) -soacutelo PDF- - meacutetodo AgregarDatobull
A continuacioacuten se detalla el formato de cada registro y una breve descripcioacuten
Encabezado PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 1 tiporeg N(10) valor 0 (encabezado)
webservice Alfanumerico 6 2 webserviceC(6) wsfe wsbfe wsfex etc
fecha_cbte Alfanumerico 8 8 fechacbteC(8) ej 20100308
tipo_cbte Numerico 2 16 tipocbteN(20)
ej 1 para Facturas A (seguacuten tabla deparaacutemetros de AFIP Mercado Interno Exportacioacuten)
punto_vta Numerico 5 18 puntovtaN(40) ej 0001
cbte_nro Numerico 8 23 cbtenroN(80) ej 00000001
tipo_expo Numerico 1 31 tipoexpoN(10)
tipo de exportacioacuten (1 bienes 2 servicios 3otros)
permiso_existente Alfanumerico 1 32 permisoexiC(1) permiso de exportaioacuten S o N o nulo
pais_dst_cmp Numerico 3 33
Formato de Intercambio PDF 93
paisdstcmpN(30)
coacutedigo de paiacutes seguacuten tabla de paraacutemetros deAFIP (200 ARGENTINA 203 BRASIL212 ESTADOS UNIDOS etc)
nombre_cliente Alfanumerico 200 36 nombreclieC(200)
tipo_doc Numerico 2 236 tipodocN(20)
coacutedigo de tipo de documento seguacuten tablaAFIP WSFEv1 (80 CUIT)
nro_doc Numerico 11 238 nrodocN(110)
nuacutemero de documento (DNI CUIT etc) -ocorresponde a cuit_pais_cliente enexportacioacuten-
domicilio_cliente Alfanumerico 300 249 domicilioc M
id_impositivo Alfanumerico 50 549 idimpositiC(50)
categoriacutea frente al IVA (Resp InscriptoMonotributo etc) o identificacioacutenimpositiva en paiacutes destino (por ej CNJPRUC VAT ID etc)
imp_total Importe 153 599 imptotalN(153) importe total (con hasta 3 decimales)
imp_tot_conc Importe 153 614 imptotconcN(153)
importe conceptos no gravados (con hasta 3decimales)
imp_neto Importe 153 629 impnetoN(153)
importe neto sujeto a caacutelculo de IVA (conhasta 3 decimales)
impto_liq Importe 153 644 imptoliqN(153)
importe de IVA liquidado (con hasta 3decimales)
impto_liq_nri Importe 153 659 imptoliqnrN(153)
importe de IVA liquidado a RNI (con hasta 3decimales) -obsoleto-
imp_op_ex Importe 153 674 impopexN(153)
importe de operaciones exentas de IVA (conhasta 3 decimales)
impto_perc Importe 15 689 imptopercN(152)
importe de percepciones (con hasta 3decimales) -obsoleto ver tributos-
imp_iibb Importe 153 704 impiibbN(153)
mporte de ingresos brutos (con hasta 3decimales) -obsoleto ver tributos-
impto_perc_mun Importe 153 719 imptopercmN(153)
importe de percepciones municipales (conhasta 3 decimales) -obsoleto ver tributos-
imp_internos Importe 153 734 impinternoN(153)
importe de impuestos internos (con hasta 3decimales) -obsoleto ver tributos-
imp_trib Importe 153 749 imptribN(153)
importe total de impuestos y tributos (noincluye IVA)
moneda_id Alfanumerico 3 764 monedaidC(3)
coacutedigo de moneda seguacuten tabla de paraacutemetrosde AFIP (PES peso DOL doacutelares etc)
moneda_ctz Importe 106 767 monedactzN(106)
cotizacioacuten de la moneda (con hasta 6decimales)
obs_comerciales Alfanumerico 1000 777 obscomerci M observaciones comercialesobs_generales Alfanumerico 1000 1777 obsgeneral M observaciones generales
forma_pago Alfanumerico 50 2777 formapagoC(50)
descripcioacuten de la forma de pago (ejEfectivo)
incoterms Alfanumerico 3 2827 teacutermino de comercio exterior (ej FOB)
Encabezado PDF 94
incotermsC(3)
incoterms_ds Alfanumerico 20 2830 incotermsdC(20)
descripcioacuten de termino de comercio exterior(Free on board)
idioma_cbte Alfanumerico 1 2850 idiomacbteC(1)
idioma del comprobante seguacuten tabla deparaacutemetros de AFIP (1 espantildeol etc)
zona Alfanumerico 5 2851 zona C(5) -no utilizado-
fecha_venc_pago Alfanumerico 8 2856 fechavencpC(8)
fecha de vencimiento del pago (soloservicios)
presta_serv Numerico 1 2864 prestaservN(10) prestacioacuten de servicio (S o N)
fecha_serv_desde Alfanumerico 8 2865 fechaservdC(8) fecha de inicio del servicio facturado
fecha_serv_hasta Alfanumerico 8 2873 fechaservhC(8) fecha de finalizacioacuten del servicio facturado
cae Alfanumerico 14 2881 cae C(14) Coacutedigo de Autorizacioacuten Electroacutenicootorgado por AFIP
fecha_vto Alfanumerico 8 2895 fechavto C(8) fecha de vencimiento del CAE otorgado porAFIP
resultado Alfanumerico 1 2903 resultado C(1) resultado A aceptado R rechazado(respuesta AFIP)
reproceso Alfanumerico 1 2904 reprocesoC(1)
S si hubo reprocesamiento N si esprocesamiento original (respuesta AFIP)
motivos_obs Alfanumerico 1000 2905 motivosobs M
coacutedigo o descripcioacuten del motivo de rechazo uobservacioacuten del comprobante ej 11 -numeracioacuten 02 cuit no autorizada (respuestaAFIP)
id Numerico 15 3905 id N(150) identificador secuencial de la factura (usar 0)
telefono_cliente Alfanumerico 50 3920 telefonoclC(50)
localidad_cliente Alfanumerico 50 3970 localidadcC(50)
provincia_cliente Alfanumerico 50 4020 provinciacC(50)
formato_id Numerico 10 4070 formatoidN(100) -no utilizado-
email Alfanumerico 100 4080 email C(100) destinatario del PDFpdf Alfanumerico 100 4180 pdf C(100) ruta y nombre de archivo PDF a generar
err_code Alfanumerico 6 4280 errcode C(6) coacutedigo de error informado por AFIP (EjfexerrorErrCode=505)
err_msg Alfanumerico 1000 4286 errmsg M mensaje de error informado por AFIP (EjfexerrorErrMsg=Error de Lockeo)
Dato_adicional1 Alfanumerico 30 5286 datoadic01C(30) datos extra optativos
Dato_adicional2 Alfanumerico 30 5316 datoadic02C(30) datos extra optativos
Encabezado PDF 95
Dato_adicional3 Alfanumerico 30 5346 datoadic03C(30) datos extra optativos
Dato_adicional4 Alfanumerico 30 5376 datoadic04C(30) datos extra optativos
Campos extra (por compatibilidad con otras herramientas y formatos)
Nombre Tipo Long Pos DBF Descripcioacuten
descuento Importe 153 5405 descuentoN(153)
importe general de descuento (no recomendadousar descuento por itemdetalle)
cbt_desde Numerico 8 5420 cbtdesdeN(80)
nuacutemero de comprobante inicial del lote (usarcbte_nro)
cbt_hasta Numerico 8 5428 cbthastaN(80)
nuacutemero de comprobante final del lote (usarcbte_nro)
concepto Numerico 1 5436 conceptoN(10)
1 productos 2 servicios 3 productos + servicios(ver presta_serv)
no_usar Importe 153 5437 nousarN(153) -reservado-
imp_iva Importe 153 5452 impivaN(153) iacutedem impto_liq
emision_tipo Alfanumerico 4 5467 emisiontipC(4) CAE o CAEA
imp_subtotal Importe 153 5471 impsubtotaN(153)
se calcula internamente si no es pasado imp_neto+ imp_tot_conc + imp_op_ex - descuento(subtotal sin IVA ni otros tributos)
cat_iva Numerico 2 5486 cativa N(20) -reservado-NOTA estos campos pueden no utilizarse o tener el mismo valor que los campos originales estaacuten paracontemplar casos especiales y en general no deben utilizarse
Detalle Item PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 1
codigo Alfanumerico 30 2 codigoC(30) coacutedigo del artiacuteculo
qty Importe 122 32 qty N(122) cantidad (con 2 decimales)
umed Numerico 2 44 umed N(20) coacutedigo de unidad de medida seguacuten tabla de paraacutemetrosAFIP WSMTXCA (ej 1 - kg)
precio Importe 123 46 precioN(123) importe unitario (con hasta 3 decimales)
importe Importe 143 58 importeN(143) importe subtotal (con hasta 3 decimales)
iva_id Numerico 5 72 ivaid N(50) coacutedigo de aliacutecuota de IVA seguacuten tabla de paraacutemetrosAFIP WSFEv1 WSMTXCA (ej 5 - IVA RI Tasa
Detalle Item PDF 96
General 21 )
ds Alfanumerico 4000 77 ds M descripcioacuten del artiacuteculo (usar ltbrgt para salto delinea)
ncm Alfanumerico 15 4077 ncm C(15) coacutedigo habilitado del Nomenclador Comuacuten deMercosur -soacutelo WSBFEv1-
sec Alfanumerico 15 4092 sec C(15) coacutedigo habilitado de la Secretariacutea de Comercio-reservado-
bonif Importe 15 4107 bonifN(152)
importe de descuento (con 2 decimales) para estearticulo
imp_iva Importe 15 4122 impivaN(152) importe liquidado de IVA para este articulo
despacho Alfanumerico 20 4137 despachoC(20) -soacutelo importacioacuten-
u_mtx Numerico 10 4157 umtxN(100) unidades MTX
cod_mtx Alfanumerico 30 4167 codmtxC(30) coacutedigo de barras MTX
dato_a Alfanumerico 15 4197 datoa C(15) dato extra optativodato_b Alfanumerico 15 4212 datob C(15) dato extra optativodato_c Alfanumerico 15 4227 datoc C(15) dato extra optativodato_d Alfanumerico 15 4242 datod C(15) dato extra optativodato_e Alfanumerico 15 4257 datoe C(15) dato extra optativoNota en los campos numeacutericos (archivo de texto) para usar maacutes de los decimales especificados de manerapredeterminada indicar el punto explicitamente por ej cantidad = 0123456 para 6 decimales encantidad En la estructura del DBF cada programa puede cambiar la cantidadad de decimales
Importante para Facturas B de manera similar a las facturas tradicionales el IVA no debe estardiscriminado (enviar el precio unitario y subtotal final IVA incluido) y se debe enviar NULL en imp_iva
IVA PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 4
iva_id Numerico 5 2 ivaid N(50) tipo de aliacutecuota (ver tablas de paraacutemetros deWSFEv1 por ej 5 para 21)
base_imp Importe 153 7 baseimpN(153)
base imponible (neto gravado) para estaaliacutecuota
importe Importe 153 22 importe N(153) importe IVA liquidado para esta aliacutecuotaTributo PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 valor 5
IVA PDF 97
tiporegN(10)
tributo_id Numerico 5 2 tributoidN(50)
tipo de tributo (ver tablas de paraacutemetros de WSFEv1por ej 2 para impuestos provinciales)
desc Alfanumerico 100 7 desc C(100) descripcioacuten (por ej IIBB prov de BsAs)
base_imp Importe 153 107 baseimpN(153) base imponible para este impuesto (pude ser 0 nulo)
alic Importe 15 122 alic N(152) aliacutecuota (porcentaje por ej 3)
importe Importe 153 137 importeN(153) importe liquidado para este impuesto
Comprobante Asociado PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 3cbte_tipo Numerico 3 2 cbtetipo N(30) tipo de comprobante asociado (iacutedem encabezado)
cbte_punto_vta Numerico 4 5 cbtepuntovN(40) punto de venta
cbte_nro Numerico 8 9 cbtenro N(80) nuacutemero de comprobantePermisos PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea)- usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 2
id_permiso Alfanumerico 16 2 idpermisoC(16)
identificador del permiso de exportacioacuten ej99999AAXX999999A
dst_merc Numerico 3 18 dstmercN(30) coacutedigo de paiacutes de destino seguacuten tabla de AFIP
Datos PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 16 tiporeg N(10) valor 9campo Alfanumerico 30 17 campo C(30) nombre del campo en la plantilla PDFvalor Alfanumerico 1000 47 valor M contenido para el campo en la plantilla PDFpagina Alfanumerico 3 1047 pagina C(3) P primera U ultima T todasEste tipo de registro es opcional resultados similares se pueden lograr con el archivo de configuracioacuten(receini seccioacuten [PDF]) meacutetodo del Componente AgregarDato o directamente con el disentildeador visual(modificando la plantilla facturacsv)
Configuracioacuten PyFEPDF RECEINI
De manera similar a las otras herramientas PyFEPDF puede configurarse por el archivo de configuracioacutenRECEINI con las siguientes opciones predeterminadas
Tributo PDF 98
[FACTURA]ARCHIVO=tipoletranumeroFORMATO=facturacsvDIRECTORIO=PAPEL=letterORIENTACION=portraitDIRECTORIO=SUBDIRECTORIO=LOCALE=Spanish_Argentina1252FMT_CANTIDAD=06FMT_PRECIO=03CANT_POS=izqENTRADA=facturatxtSALIDA=facturapdf
[PDF]LOGO=fpdfpngEMPRESA=Empresa de PruebaMEMBRETE1=Direccion de PruebaMEMBRETE2=Capital FederalCUIT=CUIT 30-00000000-0IIBB=IIBB 30-00000000-0IVA=IVA Responsable InscriptoINICIO=Inicio de Actividad 01042006
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalle = detallesdbfPermiso = permisodbfDato = datodbf
Seccioacuten [FACTURA]
Controla la generacioacuten del PDF (si no se especifica campo PDF en tabla encabezado)
ARCHIVO nombre de archivo PDF a generar por ej incluyendo tipoletranumerobull FORMATO formato del PDF a generar por ej en planilla facturacsvbull DIRECTORIO directorio donde almacenar los archivos PDFbull SUBDIRECTORIO nombre de la carpeta a generar (una por diacutea de manera predeterminada)bull LINEAS_MAX cantidad de lineas para el detalle (artiacuteculos) por defecto 24bull PAPEL legal A4 letterbull ORIENTACION portrait landscape (apaisada)bull LOCALE configuracioacuten regional (Spanish_Argentina1252 en Windows es_ARutf8 en Linux)bull FMT_CANTIDAD formato de cantidad (04 para 4 decimales)bull FMT_PRECIO formato de precio unitario (03 para 3 decimales)bull CANT_POS posicioacuten de la columna cantidad (izq o der)bull ENTRADA nombre del archivo de intercambio (facturatxt)bull SALIDA nombre del archivo a generar (dejar en blanco para generar uno distinto seguacuten laconfiguracioacuten ARCHIVO)
bull
COPIAS cantidad de copias en el PDF (Original Duplicado Triplicado etc)bull
Configuracioacuten PyFEPDF RECEINI 99
Seccioacuten [PDF]
Controla campos del PDF a personalizar (si no se especifican los campo texto en tabla formato del PDF)
LOGO archivo con imagen logotipo por ej serpientepngbull EMPRESA ej Empresa de Pruebabull MEMBRETE1 ej Direccion de Pruebabull MEMBRETE2 ej Capital Federalbull CUIT CUIT 20-26756539-3bull IIBB IIBB 20-26756539-3bull IVA IVA Responsable Inscriptobull INICIO Inicio de Actividad 01042006bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull Dato = datodbfbull
Campo Subtotal
Dado que en general la columna importe deberiacutea mostrar Subtotal cIVA por similitud con el PDF quegenera AFIP por comprobantes en linea por disentildeo (actualizacioacuten 108b)
Si es A o M se imprime el subtotal SIN IVAbull Si es B o C se imprime el subtotal CON IVAbull
En el caso de factura A debe sumar los items sin el IVA ya que en la ultima hoja se le suma el IVA alsubtotal
Igualmente el campo subtotal podriacutea sobre-escribirse utilizando el meacutetodo AgregarDato(campovalor pagina) o el tipo de registro para datos adicionales En campo = subtotal el valor a imprimiren cada hoja y pagina el nro de paacutegina (T todas P primera U ultima) Se podriacutea agregar el dato paratodas las paginas vacio y para la uacuteltima con el valor que sea necesario (en ese orden)
Disentildeador Visual PyFEPDF
La herramienta incluye el progama designerexe para modificar visualmente los disentildeos de factura
Los archivos de entrada estaacuten son planillas CSV describiendo el disentildeo Al abrilos el disentildeador muestra laplantilla con los elementos donde se ubicaraacuten los futuros valores de cada factura
La barra de herramientas cuenta con botones para
Abrir guardar e imprimir (vista previa) las plantillasbull
Seccioacuten [PDF] 100
Agregar eliminar y duplicar elementosbull Buscar elementos por nombre o por textobull
Sobre un elemento con doble click izquierdo se abre un dialogo para editar el texto y con click derecho seabre un dialogo con la ventana de propiedades Es posible seleccionar muacuteltiples elementos manteniendopresionado shift y click izquierdo Para mover los elementos se puede usar las teclas de flechas o arrastrar loselementos
Ver a continuacioacuten los tipos de elementos y su definicioacuten
A modo de ejemplo se muestra un pantallazo del Disentildeador Visual con el elemento logo seleccionadoeditando sus propiedades
Para ejecutarlo simplemente ir al directorio de la interfaz y correr designerexe
Tipos de elementos para PyFEPDF
Para el disentildeo del PDF es posible establecer los siguientes tipos de campo (elementos graacuteficos)
Texto (T) con tipo de letra (fuente) tamantildeo formato (italico negrita subrayado) tamantildeo yalineacioacuten
bull
Liacuteneas (L) y Cuadros (B)bull Imaacutegenes (I) en formato PNG o JPGbull Coacutedigo de Barras (CB) en formato Entrelazado 2 de 5bull Codigo QR (I) (Requerido por AFIP a partir del 01032021 ver cronograma)bull
Definicioacuten de elementos para PyFEPDF
Las columnas de la planilla (facturacsv) o estructura de la tabla formato para definir los elementos graacuteficoses
name (alfanumeacuterico) nombre del campobull type (alfanumeacuterico) tipo del campo T L I B CBbull x1 (numeacuterico) coordenada horizontal izquierda (en mm)bull y1 (numeacuterico) coordenada vertical superior (en mm)bull x2 (numeacuterico) coordenada horizontal derecha (en mm)bull y2 (numeacuterico) coordenada vertical inferior (en mm)bull font (alfanumeacuterico) nombre de la tipografiacutea (fuente)bull size (numeacuterico) tamantildeo en puntos del textobull bold (verdaderofalso) estilo negrita para el texto (1 o 0)bull italic (verdaderofalso) estilo cursiva (itaacutelica) para el texto (1 o 0)bull underline (verdaderofalso) estilo subrayado para el texto (1 o 0)bull foreground (numeacuterico) color RGB de dibujobull backgroud (numeacuterico) color RGB de relleno del fondo (si aplica al elemento)bull align (alfanumeacuterico) alineacioacuten I izquierda D derecha C centradobull text (alfanumeacuterico) texto estaacutetico o foacutermulabull priority (numeacuterico) orden z en el que se dibujan los elementos (a menor prioridad se dibuja primero)bull
Estilos HTML Adicionalmente los estilos negrita itaacutelica y subrayado pueden establecerse en tiempo deejecucioacuten encerrando todo el texto con el tag html correspondiente (en el orden indicado) Ej
Disentildeador Visual PyFEPDF 101
ltBgttexto en negritaltBgtbull ltIgttexto en cursivaltIgtbull ltUgttexto subrayadoltUgtbull ltBgtltIgtltUgttexto en negrita cursiva y subrayadoltUgtltIgtltBgtbull
PyI25 Generador de Coacutedigos de Barras
Utilitario PYI25EXE (py25py) para generar los coacutedigos de barras Interleaved 2 of 5 (Entrelazado 2 de 5)seguacuten Resolucioacuten General 170204
Ver Descargas para descargar el instalador
Los datos a consignar son (ver RG170204 Art 1 Anexo 1)
Clave Unica de Identificacioacuten Tributaria (CUIT) del emisor de la factura (11 caracteres)bull Coacutedigo de tipo de comprobante (3 caracteres)bull Punto de venta (5 caracteres)bull Coacutedigo de Autorizacioacuten de Electroacutenica (CAE) o Coacutedigo de Autorizacioacuten de Impresioacuten (CAI) (14caracteres)
bull
Fecha de vencimiento del CAE CAI (8 caracteres)bull Diacutegito verificador (1 caraacutecter) ver rutinabull
El utilitario genera una imaacutegen en formato PNG o JPG funciona tanto de liacutenea de comando consola (DOS)como por interfaz COM (automatizacioacuten DLL similar a OCX) y es uacutetil para facturas electroacutenicas otradicionales (autoimpresores o imprentas)
Imaacutegen de Ejemplo de Coacutedigo de Barras para CAE
Importante De generar imaacutegenes para imprimir es recomendado respetar la resolucioacuten de la impresora (Laacutesero Chorro de tinta no pueden usarse matriz de punto) por ej con una resolucioacuten por lo menos tres vecesmayor que la utilizada en pantalla
Nota Nuestro generador de PDF ya contempla generar los coacutedigos de barra para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PYI25EXE (utilitario por linea de comando)
Opciones
--barras a continuacioacuten se indica el coacutedigo de barras en formato numeacutericobull --noverificador deshabilitar caacutelculo de digito verificadorbull --archivo a continuacioacuten se indica el nombre del archivo de salidabull
Ejemplo de uso (generar el archivo pruebapng)
PYI25EXE --barras 202675653930240016120303473904220110528 --mostrar --archivo pruebapng
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYI25_cliEXE queesta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primer como
Definicioacuten de elementos para PyFEPDF 102
segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and is startedautomatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico PYI25EXEpuede estar compilado para ser registrado en Windows (componente para VBVFP y similares)
Objeto PYI25 (interfaz COM)
Objeto PyI25 (registrar PYI25DLL)
Meacutetodos
DigitoVerificadorModulo10(codigo) recibe el codigo de barras en formato numeacutericodevuelve el diacutegito verificador en base 10
bull
GenerarImagen(codigo archivo anchobase ancho alto extension )recibe el codigo de barras en formato numeacuterico nombre de archivo de salida tamantildeos y formato deimagen (PNG o JPEG) y genera el codigo de barras especificado
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyI25 As Object
Set PyI25 = CreateObject(PyI25)
cuit tipo_cbte punto_vta cae fch_venc_caebarras = 202675653930240016120303473904220110529 calculo digito verificadorbarras = barras + PyI25DigitoVerificadorModulo10(barras)
genero imagen en png aspecto 1x para ver en pantalla o por mailok = PyI25GenerarImagen(barras Cbarraspng)
formato en jpg aspecto 3x maacutes ancho para imprimir o incrustarok = PyI25GenerarImagen(barras cbarrasjpg 9 0 90 JPEG)
PyQR Generador de Coacutedigos QR
Utilitario PYQREXE (pyqrpy) para generar los coacutedigos QR seguacuten RG48922020
Cronograma de Implementacioacuten
Para responsables inscriptos en el impuesto al valor agregado que hayan efectuado operaciones (gravadasexentas y no gravadas) declaradas en el impuesto durante el antildeo calendario 2020 por un importe total neto deimpuestos y tasas
11 Superior a PESOS DIEZ MILLONES ($10000000-) desde el 1 de marzo de 2021
12 Superior a PESOS DOS MILLONES ($2000000-) e inferior o igual a PESOS DIEZ MILLONES ($10000000-) desde el 1 de abril de 2021
13 Superior a PESOS QUINIENTOS MIL ($500000-) e inferior o igual a PESOS DOS MILLONES ($2000000-) desde el 1 de mayo de 2021
PYI25EXE (utilitario por linea de comando) 103
2 Para el resto de los responsables inscriptos en el impuesto al valor agregado sujetos exentos ante dichogravamen y pequentildeos contribuyentes inscriptos en el Reacutegimen Simplificado (Monotributo) a partir del 1junio de 2021
Los datos a consignar son (ver QR especificaciones)
Fecha de emisioacutenbull CUIT del emisorbull Punto de ventabull Tipo de Comprobantesbull Nuacutemero de Comprobantebull Importe totalbull Monedabull Cotizacioacutenbull Tipo Documento Receptor (de corresponder)bull Nuacutemero de Documento de Receptor (de corresponder)bull Coacutedigo del Tipo de Autorizacioacutenbull Coacutedigo de Autorizacioacutenbull
Ejemplo Visual Basic script pyafipwsblobdevelopejemplospyqrpyqrvbs
Ejemplo Visual Basic claacutesico
Dim pyqr As Object
Set pyqr = CreateObject(PyQR)
Establecer tipo de imagen (PNG o JPEG)PyQRExtension = JPEG
Generar un nombre de archivo temporal para la imagenarchivo = pyqrCrearArchivo
Alternativo Especificar ubicacioacuten y extensioacutenpyqrarchivo = CQRgeneradopyqrjpg
DebugPrint archivo
ver = 1fecha = 2020-10-13cuit = 30000000007pto_vta = 10tipo_cmp = 1nro_cmp = 94importe = 12100moneda = DOLctz = 65tipo_doc_rec = 80nro_doc_rec = 20000000001tipo_cod_aut = Ecod_aut = 70417054367476
genero imagen en png con el codigo qr
url = pyqrGenerarImagen(ver fecha cuit pto_vta tipo_cmp nro_cmp _ importe moneda ctz tipo_doc_rec nro_doc_rec _ tipo_cod_aut cod_aut)
PyQR Generador de Coacutedigos QR 104
DebugPrint url
Paraacutemetros por liacutenea de comandos
--datos recibe los datos a procesar version fecha cuit pto_vta tipo_cmp nro_cmp importemoneda ctz tipo_doc_rec nro_doc_rec tipo_cod_aut cod_aut
bull
--prueba genera un QR de muestrabull --archivo permite especificar una ruta (de lo contrario usa un archivo temporal)bull --mostrar abre el archivo para visualizar la imagenbull
Ejemplo por liacutenea de comando
Linux
python pyqrpy --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
Windows
pyqrexe --archivo qrjpg --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
En windows usar pyqrexe en vez de python pyqrpy
Imaacutegen de Ejemplo de Coacutedigo QR
PyQR Generador de Coacutedigos QR 105
Nota Nuestro generador de PDF ya contempla generar los coacutedigos QR para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PyEmail Envio de correo electroacutenico
Herramienta para enviar correos electroacutenicos incluyendo por ej adjunto PDF de con factura electroacutenica
Soporta servidores SMTP con y sin autenticacioacuten
Proacuteximamente soporte para correos con contenido HTML e imagenes de factura embebida
PyEmail Envio de correo electroacutenico 106
PYEMAILEXE utilitario de correo
Para utilizar esta herramienta debe tener configurado la seccioacuten [EMAIL] en el receini
Ejemplo desde linea de comando
PYEMAILEXE motivo reingartgmailcom mensaje FacturaA0002-00117826pdf
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYEMAIL_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacutericoPYEMAILEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Objeto PyEmail (interfaz COM)
Objeto PyEmail (registrar PyEmailDLL)
Meacutetodos
Conectar(servidor usuario clave) recibe el nombre del servidor a conectarse usuario y contrasentildea(opcional)
bull
Enviar(remitente motivo destinatario mensaje archivo) envia el correo electroacutenico con los datosproporcionados
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyEmail As Object
Set PyEmail = CreateObject(PyEmail)
Primer paso conexioacuten al servidor (por unica vez)servidor = mailsistemasagilescomarusuario = norespondernsiscomarclave = 1238478puerto = 465ok = PyEmailConectar(servidor usuario clave)
Envio el o los correos (repetir por cada FE)remitente = norespondersistemasagilescomardestinatario = marianosistemasagilescomarmensaje = Se envia factura electronica adjuntaarchivo = CFACTURAPDF
ok = PyEmailEnviar(remitente motivo destinatario mensaje archivo)
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361)
Con la interfaz se provee un utilitario para generar los archivos requeridos por el aplicativo SIRED (SIAP) dela Resolucioacuten General 136102 referente al almacenamiento digital de los comprobantes emitidos (Libro
PYEMAILEXE utilitario de correo 107
Ventas Detalle y Cabeceras de Factura)
El formato de entrada es una planilla csv similar al PyRece respetando los tipos de datos y coacutedigos requeridospor los webservices con las siguientes columnas tipo_cbte punto_vta cbt_numero fecha_cbte tipo_docnro_doc imp_neto impto_liq imp_total cae fecha_vto nombre
Ejemplo de uso
CD CPYAFIPWSRG1361EXE planillacsv
Generaraacute los archivos
VENTAS_200902txtbull CABECERA_200902txtbull DETALLE_200902txtbull
Para maacutes informacioacuten ver RG136102 de AFIP
Disentildeo de registro (archivos de texto)bull Guia Temaacuteticabull
Ejemplo
Ejemplo en Visual Basic claacutesico
sired = CreateObject(SIRED)
creo una factura de ejemplotipo_cbte = 2punto_vta = 4000fecha = 20150721concepto = 3tipo_doc = 80nro_doc = 30000000007cbte_nro = 12345678imp_total = 12200imp_tot_conc = 300imp_neto = 10000imp_iva = 2100imp_trib = 100imp_op_ex = 200imp_subtotal = 10000fecha_cbte = fechafecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fechafecha_serv_hasta = fechamoneda_id = PESmoneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libre
nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361) 108
id_impositivo = Responsable Inscriptoforma_pago = 30 diasincoterms = FOBidioma_cbte = 1motivo = 11
cae = nullfch_venc_cae = null
siredCrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fch_venc_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivo)
agrego comprobantes asociado
tipo = 91pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)tipo = 5pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)
tributo_id = 99desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100siredAgregarTributo(tributo_id desc base_imp alic importe)
iva_id = 5 21base_imp = 100importe = 21siredAgregarIva(iva_id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890123codigo = P0001ds = Descripcion del producto P0001qty = 100umed = 7precio = 10000bonif = 000iva_id = 5imp_iva = 2100importe = 12100despacho = uNordm 123456siredAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
siredAgregarDato(prueba 1234)
id_factura = siredGuardarFactura()
siredEstablecerParametro(cae 61123022925855)siredEstablecerParametro(fch_venc_cae 20110320)
Ejemplo 109
siredEstablecerParametro(motivo_obs )ok = siredActualizarFactura(id_factura)
Otros Servicios WEB y herramientas similares de AFIP
Constatacioacuten de Comprobantes
WSCDC es la Interfaz para los Servicios Web para verificar en forma dinaacutemica si los comprobantes recibidosse encuentran autorizados por la AFIP Ver manual especiacutefico en ConstatacionComprobantes
Padroacuten de Contribuyentes
Herramienta para consultar el archivo completo de la condicioacuten tributaria de los contribuyentes y responsables(RG1817) Ver manual especiacutefico en PadronContribuyentesAFIP
Coacutedigo de Trazabilidad de Granos
WSCTGv2 es la Interfaz para generar Coacutedigo de Trazabilidad de Granos AFIP (RG2806 RG3113 RG3493)Ver manual especiacutefico en CodigoTrazabilidadGranos
Liquidacioacuten Primaria de Granos
WSLPG es la Interfaz para autorizar y ajustar Liquidaciones Primarias de Granos (RG34192012) Vermanual especiacutefico en LiquidacionPrimariaGranos
Consulta de Operaciones Cambiarias
WSCOC es la Interfaz para Consultas de Operaciones (moneda extranjera) Ver manual enConsultaOperacionesCambiarias
wDigDepFiel Depositario Fiel
Servicio Web de AFIP para Aviso de Recepcioacuten y Aceptacioacuten de la Digitalizacioacuten de Documentos por partede los Prestadores de Servicios de Archivos y Digitalizacioacuten (PSAD) y Aviso de Digitalizacion deDocumentos por parte de los Despachantes o de los Prestadores de Servicios de Archivos y Digitalizacioacuten(PSAD) -
Sujetos Alcanzados ver Resolucioacuten General 25702009
Actualmente la interfaz expone las funcionalidades de este webservice
Aviso de Digitalizacioacutenbull Aviso de Recepcioacuten y Aceptacioacutenbull Meacutetodo Dummy para verificacioacuten de funcionamientobull
Ejemplo Interfaz COM wDigDepFiel
De igual manera que el resto de los servicios web el web service de depositario fiel puede ser invocado desdelenguajes visuales y no visuales (en windows) utilizando la interfaz COM
Otros Servicios WEB y herramientas similares de AFIP 110
Ejemplo en Visual Basic (similar para Visual FoxPro Delphi etc)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet wDigDepFiel = CreateObject(wDigDepFiel) Setear tocken y sing de autorizacioacuten (pasos previos)wDigDepFieltoken = WSAAtokenwDigDepFielsign = WSAAsign
CUIT del emisor (debe estar registrado en la AFIP)wDigDepFielcuit = 20267565393
Conectar al Servicio Web de Depositario Fiel (homologacioacuten)ok = wDigDepFielConectar(httpstestdiaafipgovarDiaWswDigDepFielwDigDepFielasmx)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)wDigDepFielDummyDebugPrint appserver status wDigDepFielAppServerStatusDebugPrint dbserver status wDigDepFielDbServerStatusDebugPrint authserver status wDigDepFielAuthServerStatus
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393codigo = 000 carpeta completa 001 carpeta adicional FechaHora en formato ISO 2010-06-07T002351750000fecha_hora_acept = Format(Now() yyyy-MM-dd) amp T amp _ Format(Now() hhmmss) amp 000000ticket = 1234errCode = wDigDepFielAvisoRecepAcept(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie _ codigo fecha_hora_acept ticket)DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoRecepAcept Coacutedigo Error amp wDigDepFielCodError
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000 1234567890123456cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393cuit_ata = 20267565393codigo = 000 carpeta completa 001 carpeta adicionalticket = 1234url = httpwwwexamplecomhashing = db1491eda47d78532cdfca19c62875aade941dc2
inicializo aviso limpio datos (familias)wDigDepFielIniciarAvisocodigo = 02cantidad = 1wDigDepFielAgregarFamilia codigo cantidadcodigo = 03cantidad = 3wDigDepFielAgregarFamilia codigo cantidad
cantidad_total = 4
Ejemplo Interfaz COM wDigDepFiel 111
errCode = wDigDepFielAvisoDigit(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie cuit_ata _ codigo url ticket hashing cantidad_total)
DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoDigit Coacutedigo amp wDigDepFielCodError
Otros Servicios Web relacionados de otros organismos
Remito Electroacutenico (COT ARBA)
Interfaz para Servicio Web Coacutedigo de Operaciones de Traslado (COT) Remito Electronico correspondienteal articulo 41 del Coacutedigo Fiscal que establece la obligacioacuten de amparar el traslado o transporte de bienes en elterritorio de la provincia de Bs As Ver manual especiacutefico en RemitoElectronicoCotArba
Trazabilidad de Medicamentos (ANMAT)
Interfaz para Servicio Web Coacutedigo de Trazabilidad de Medicamentos (SOAP) correspondiente a laResolucioacuten 4352011 del Ministerio de Salud y Disposicioacuten 36832011 de ANMAT Sistema Nacional deTrazabilidad de Medicamentos que deberaacuten implementar las personas fiacutesicas o juriacutedicas que intervengan en lacadena de comercializacioacuten distribucioacuten y dispensacioacuten de especialidades medicinales incluidas en elRegistro de Especialidades Medicinales SNT Especificacioacuten Teacutecnica V2 Ver manual especiacutefico enTrazabilidadMedicamentos
Trazabilidad de Precursores Quiacutemicos (SEDRONAR)
Interfaz para Servicio Web Trazabilidad de Precursores Quiacutemicos TrazaMedSDRN (SOAP) para informarmovimientos de Sustancias Quiacutemicas Controladas Decreto 109596 modificado por Decreto 116100Sistema Nacional de Trazabilidad modulo de Precursores Quiacutemicos (RENPRE SEDRONAR PAMI INSSJP)que deberaacuten implementar el operador de precursores quiacutemicos obtencioacuten de nuacutemero de CUFE (Coacutedigo deUbicacioacuten Fiacutesica de Establecimiento) Entrenamiento y Alineacioacuten de Datos Resolucioacuten 90012 RENPREVer manual especiacutefico en TrazabilidadPrecursoresQuimicos
Certificados
Generacioacuten
Para poder utilizar la interfase se deben tramitar y asociar los certificados de homologacioacutenproduccioacuten en laAFIP Para mas informacioacuten ver Paacutegina principal de Factura Electroacutenica (AFIP)
Crear Pedido CSR con WSAA
A partir de la revisoacuten 1632 (ver Actualizaciones Factura Electroacutenica moacutedulo WSAApy versioacuten 110b) esposible generar el pedido de certificado automaacuteticamente utilizando la opcioacuten --crear_pedido_cert)La herramienta solicitaraacute el CUIT buscaraacute la denominacioacuten del contribuyente en el padroacuten de AFIP ygeneraraacute los archivos necesarios (clave privada y pedido de certificado)
Ejemplo
Otros Servicios Web relacionados de otros organismos 112
CPyAfipWsgt WSAA-cliexe --crear_pedido_certreingartS55t-B~pyafipws$ python wsaapy --crear_pedido_certIngrese un CUIT 20267565393Denominacioacuten seguacuten AFIP REINGART MARIANO ALEJANDROLongitud clave 2048 (bits)Se crearon los archivosclave_privada_20267565393_201609105952keypedido_cert_20267565393_201609105952csr
Tambieacuten pueden especificarse esos datos por linea de comando (CUIT nombrealias empresa y longitud de laclave -2048 bits predeterminados-) ejecutando
WSAA-cliexe --crear_pedido_cert 20267565393 PyAfipWS SHA-2 REINGART MARIANO ALEJANDRO 2048
Nota desde el coacutedigo fuente ejecutar python wsaapyTambieacuten es posible realizar el procedimiento por programa (automatizadamente) llamando a los meacutetodoswsaaCrearClavePrivada(clave_privada) y wsaaCrearPedidoCertificado(cuitempresa nombre pedido_cert)
La herramienta deja listos los archivos respectivos pudiendo subir el pedido de certificado CSR a AFIP (tantoen homologacioacuten como en produccioacuten)
WSASS
Video Explicativo completo (incluyendo WSASS autogestioacuten de certificados en homologacioacuten AFIP) httpswwwyoutubecomwatchv=ietDXvUzVIQ
OpenSSL
Pasos para crear el certificado (maacutes informacioacuten en Instructivo AFIP)
Bajar e instalar OpenSSL para Windows 098i (historico) o 102k o superior (recomendado) Encaso de inconvenientes instalar Redistribuible de Visual C++
bull
Ingresar por liacutenea de comando al directorio de OpenSSL COpenSSLbingtbull Generar la clave privada
openssl genrsa -out empresakey 2048
bull
Generar el pedido (CSR certificate signing request) por liacutenea de comando
openssl req -new -key empresakey -subj C=ARO=[empresa]CN=[nombre]serialNumber=CUIT [nro_cuit] -out empresacsr
Reemplazar [empresa] por el nombre de su empresa Ej Nombre de la empresa tal cualfigura en la consulta de inscripcioacuten ej Empresa S A
diams
Reemplazar [nombre] por su nombre o server hostname Nombre del servicio aplicacioacuten uunidad operativa ej Interfaz PyAfipWs
diams
Reemplazar [nro_cuit] por la CUIT sin guiones de la empresa o programador Ej CUITxxxxxxxxxxx
diams
bull
Enviar el empresacsr a la AFIP para que lo firmen y devuelvan el certificado empresacrtbull
Ejemplo concreto
Crear Pedido CSR con WSAA 113
openssl req -new -key empresakey -subj C=ARO=Mariano ReingartCN=PyAfipWsserialNumber=CUIT 20267565393 -out empresacsr
Generar Certificado CRT
Una vez generado el pedido de certificado CSR (ver puntos anteriores) el traacutemite es
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Nuevo Certificado en el WSASSdiams Nombre simboacutelico del DN un alias del computador fiscal (nombre de fantasiacutea ej PC1)diams Solicitud de certificado en formato PKCS10 abrir con un editor de texto el CSR y copiaraqui el contenido
diams
Presionar Crear DN y obtener certificadodiams Abrir un archivo nuevo y copiar el campo Resultado (este es el certificado usar extensioacutenCRT)
diams
bull
Produccioacuten Ingresar por clave fiscal al servicio online Administracioacuten de Certificados DigitalesIr a Agregar Alias escribir el alias (nombre relacionado al certificado)diams Subir el archivo CSR presionar Agregardiams Luego buscar y descargar el certificado CRTdiams
bull
Con esta interfase no es necesario convertir el certificado en formato pkcs12 ni importarlo alrepositorio de Windows
bull
Para maacutes informacioacuten ver instructivo oficial AFIP
Asociacioacuten
Para poder usar los servicios web se debe asociar el certificado al webservice y CUIT (empresa) que loutilizaraacute
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Crear autorizacioacuten a servicio en el WSASSdiams Seleecionar el Nombre simboacutelico del DN a autorizar (igual que en el paso anterior)diams Revisar el CUIT representado y quien genera la autorizacioacutendiams Seleccionar el Servicio al que desea acceder (por ej wsfe factura electroacutenica)diams Presionar Crear autorizacioacuten de Acceso y revisar el resultadodiams
bull
Produccioacuten en el sitio de AFIP ingresar por clave fiscalEntrar en Administrador de Relaciones de Clave Fiscaldiams Elegir Nueva Relacioacutendiams Presionar BUSCAR para seleccionar el webservice de AFIP por ej ws - FacturacioacutenElectroacutenica
diams
Presionar BUSCAR para seleccionar el Representante seleccionar el nombre del alias delComputador Fiscal (ver seccioacuten anterior)
diams
Confirmardiams
bull
Anteriormente en produccioacuten debiacutea realizarse utilizando el servicio de clave fiscal ARFE - GestionarRelaciones yendo a Realizar una nueva Asociacioacuten completando Empresa Servicio y computador-certificado- que utilizara los webservices
OpenSSL 114
Para maacutes informacioacuten en produccioacuten ver instructivos oficiales de la AFIP
obtener certificado AFIPbull asociar certificado AFIPbull
Es el mismo traacutemite para la renovacioacuten (ns1cmscertexpired Certificado expirado) debesubirse el arcihvo CSR (pedido de certificado) y descargar el nuevo CRT Recordamos que los certificadostienen una vigencia de 2 antildeos en produccioacuten y 1 antildeo en homologacioacuten
Pre-requisitos para Produccioacuten (RECE)
Para poder usar Factura Electroacutenica en Produccioacuten (modo definitivo) ademaacutes de los puntos mencionadosanteriormente dentro de Clave Fiscal servicio online Regimenes de facturacioacuten y registracioacuten(REARRECERFI) es necesario
Adherirse al reacutegimen (realizarlo con anterioridad este traacutemite puede demorar varias semanas)Importante en el Rubro I C) RECE RCEL (Factura Electroacutenica y Factura Electroacutenica en Linea)especificar RECE (no RCEL que es para Comprobantes en linea y Facturador Plus nocontemplados por los webservices)
bull
Dar de alta los nuevos puntos de ventas (uno por cada webservice a utilizar factura nacionalexportacioacuten bono fiscal etc)
bull
Para maacutes informacioacuten ver demo interactiva oficial empadronamiento AFIP
Descargas
OpenSSL para windowsbull Redistribuibe VC++bull
Comprobacioacuten de Autenticacioacuten (WSAA)
Para descartar problemas teacutecnicos de acceso en produccioacuten u homologacioacuten (y verificar la validez delcertificado generado) se puede utilizar la herramienta WSAAEXE WSAA-cliEXE en modo depuracioacuten(sin necesidad de autorizar una factura solo solicitar acceso) yo el mensaje XML devuelto porWSAACallWSAA()
CPYAFIPWSgtWSAA-cliEXE reingartcrt reingartkey wsfe 2400 httpswsaaafipgovarwsservicesLoginCms --trace
Usando CERT=reingartcrt PRIVATEKEY=reingartkey URL=httpswsaaafipgovarwsservicesLoginCms SERVICE=wsfex TTL=2400Creando TRA------------------------------------------------------------------------------ltxml version=10 encoding=UTF-8gtltloginTicketRequest version=10gt ltheadergt ltuniqueIdgt1279058341ltuniqueIdgt ltgenerationTimegt2010-07-13T181901ltgenerationTimegt ltexpirationTimegt2010-07-13T193901ltexpirationTimegt ltheadergt ltservicegtwsfexltservicegtltloginTicketRequestgt------------------------------------------------------------------------------
Asociacioacuten 115
Frimando TRALlamando WSAA--------------------------------------------------------------------------------POST httpswsaaafipgovarwsservicesLoginCmsSOAPAction httpargovafipdiffacturaelectronicaloginCmsContent-length 3369Content-type textxml charset=UTF-8
================================================================================El archivo TAxml se ha generado correctamente
Nota Cambiar WSAAEXE por WSAA-CLIEXE o viceversa dependiendo del paquete de instalacioacuten o comoeste compilado (si aparece el mensaje This program host a COM object an is started automatically) Parausarlo desde el coacutedigo fuente utilizar en su lugar python wsaapy
Para descartar cualquier problema teacutecnico se puede utilizar la salida que es la traza de depuracioacuten de lacomunicacioacuten con AFIP a la mesa de ayuda (requerimiento y respuesta xml)
Si se estariacutea conectando correctamente a produccioacuten el certificado y las URL son correctas etc se deberiacuteaconstatar que
El ticket de requerimiento de acceso (TRA) correctamente solicita servicio correcto (wsfex)ltservicegtwsfexltservicegt
bull
Se estaacute solicitando acceso a los servidores del ambiente correcto (wsaa_url) POSThttpswsaaafipgovarwsservicesLoginCms (produccioacuten) o POSThttpwsaahomoafipgovarwsservicesLoginCms (homologacioacuten)
bull
El equipo que responde seriacutea del ambiente correcto perezaafipgovarenvidiaafipgovar iraafipgovar (produccioacuten) o avariciaafipgovar(homologacioacuten) Nota los nombres de los servidores pueden cambiar y solo se informan en caso deerror
bull
Si la autenticacioacuten es exitosa (El archivo TAxml se ha generado correctamente en elmensaje XML contenido en dicho archivo se puede verificar los siguientes datos
Fuente AFIP produccioacuten (ltsourcegtCN=wsaa O=AFIP C=AR SERIALNUMBER=CUIT33693450239ltsourcegt) sinoacute diriacutea CN=wsaahomo O=AFIP C=ARSERIALNUMBER=CUIT 33693450239
bull
Destino datos del certificado de produccioacutenhomologacioacuten (C=ar O=pyafipws-sistemasagiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart)
bull
Si el ambiente es el correcto (produccioacutenhomologacioacuten) y sigue devolviendo acceso denegadons1coenotAuthorized Computador no autorizado a acceder al servicio(govafipdeseindvadacsuaviewwsaaLoginFault) revisar el certificado ARFE(asociacioacuten de servicio) RECEREARRFI sobre reacutegimen habilitado puntos de venta y demaacutes traacutemites anteAFIP Si aparece error 600 ValidacionDeToken Error al verificar hashVerificacionDeHash No valida la firma digital se estaacute usando un sign y token en elambiente incorrecto (de produccioacuten en homologacioacuten y viceversa)
Comprobacioacuten de Autenticacioacuten (WSAA) 116
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)
De manera similar a lo expuesto anteriormente se provee una aplicacioacuten visual a modo de ejemplo paracomprobar el funcionamiento de la interfaz y los certificados tramitados desde AFIP
El instalador para este aplicacioacuten puede descargarse de
instalar-ej-wsaa-202zip (archivado en 1GoogleCode)bull
Por defecto se instala en CArchivos de Programawsaaej-wsaaexe
Importante Es necesario configurar correctamente el certificado y clave privada con la ruta completa a dichosarchivos
Para pruebas en produccioacuten cambiar la URL ahttpswsaaafipgovarwsservicesLoginCms y configurar los certificados
La version de la interfaz no debe decir Homologacioacuten y debe permitir cambiar la URL sino deben reinstalarlos instaladores para produccioacuten eliminando cualquier archivo anterior
Importante generalmente solo debe correr el ejemplo no instalar ni actualizar el componente WSAA si tieneuna versioacuten superior (o incluida con otro webservice como WSFEv1 o WSLPG) o esta usando el instaladorpara produccioacuten Si no lo tiene instalado puede usar instalador-WSAA-202cexe o superior
Errores Frecuentes
Los siguientes son posibles interpretaciones y soluciones a los errores que enviacutean los servidores de AFIP
Fallas SOAP
Falla SOAP ns1coenotAuthorized o ns1cmscertuntrusted
En WSAA descartando que se este usando el certificado del ambiente incorrecto (certificado dehomologacioacuten en produccioacuten y viceversa) es necesario que el certificado y CUIT esteacuten habilitados paraacceder al servicio web especificado (wsfe wsfex wsbfe wsctg wDigDepFiel etc) No es suficiente generarel certificado (en homologacioacuten o en produccioacuten) hay que solicitar explicitamente acceso al serviciorequerido ver Asociacioacuten de Certificado
Los servicios no relacionados a factura electroacutenica en produccioacuten tienen otros meacutetodos para asociar loscertificados
Ver Comprobacioacuten de Autenticacioacuten WSAA con informacioacuten para determinar o depurar el problema deacceso
Mensajes de Error Original
Computador no autorizado a acceder los servicios de AFIP (ns1coenotAuthorized)bull Certificado no emitido por AC de confianza (ns1cmscertuntrusted)bull
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA) 117
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso alWSN solicitado
Este error es reportado por AFIP cuando se esta solicitan varios tickets de acceso para el mismo certificado yservicio
Ver Reutilizacioacuten de Ticket de Acceso
Falla SOAP Server was unable to read request ---gt There is an error in XML document (41339) ---gt Input string was not in a correct format
Este error correponde al protocolo de intercambio de datos (ver Errores por Tipos de Datos) y puede significarque
Un campo obligatorio no fue completadobull Se completoacute un campo con un tipo de datos invaacutelido (float en lugar de int coma en vez de punto etc)bull Se especificoacute un valor no esperado por el web servicebull
En cualquier caso se puede revisar el mensaje XML de requermiento (atributos xml_request o XmlRequest) ybuscar la etiqueta con datos incorrectos en la liacutenea y caracter donde se informa el error (por ej en este casoliacutenea 4 cerca del caracter 1339) Ver maacutes informacioacuten y rutinas en Manejo de Excepciones
Otras fallas SOAP
WSAA y otros webservices pueden devolver errores no documentados o capturados por AFIP por ej
Server was unable to process request ---ampgt This OracleTransactionhas completed it is no longer usable
bull
SoapFault soapenvServer Could not initialize classorghibernatetransformTransformers
bull
Nuestra interfaz no utiliza Java ni Hibernate por lo que este tipo de problemas son cuestiones internas deAFIP Los errores Oracle u ORA son un problema interno de la base de datos de AFIP
Puede ocurrir en homologacioacuten y se debe esperar a que AFIP solucione el problema
En estos casos para produccioacuten se puede consultar con la mesa de ayuda sriafipgovar (seguramente es untema que lo resolveraacuten en el diacutea y no requiera una intervencioacuten de programacioacuten o configuracioacuten especial)
Errores generales AFIP
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token
Posiblemente haya un problema interno en AFIP (frecuentemente se soluciona automaacuteticamente ya que puedeser un problema de los servidores de AFIP ver abajo) o se este enviando incorrectamente el WSAAToken(por ej el lenguaje de programacioacuten o la base de datos recortoacute el string) Revisar que dicho dato se esteacutecopiando tal cual al webservice de negocio (WSFEv1Token WSMTXCAToken etc) o utilizar los nuevosmeacutetodos como WSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado118
En python se puede analizar el sign ejecutando
import base64print base64b64decode(wsaaToken)
Que deberiacutea mostrar un XML (token del ticket de acceso) como el siguiente
ltxml version=10 encoding=UTF-8 standalone=yesgtltsso version=20gt ltid unique_id=788962471 src=CN=wsaahomo O=AFIP C=AR SERIALNUMBER=CUIT 33693450239 gen_time=1401116887 exp_time=1401160147 dst=CN=wsfe O=AFIP C=ARgt ltoperation value=granted type=logingt ltlogin uid=C=ar O=pyafipws-sistemas agiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart service=wsfe regmethod=22 entity=33693450239 authmethod=cmsgt ltrelationsgt ltrelation reltype=4 key=20267565393gt ltrelationsgt ltlogingt ltoperationgtltssogt
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 a la firma
Posiblemente se este enviando incorrectamente el WSAASign (por ej el lenguaje de programacioacuten o la basede datos recortoacute el string) Revisar que dicho dato se esteacute copiando tal cual al webservice de negocio(WSFEv1Sign WSMTXCASign etc) o utilizar los nuevos meacutetodos comoWSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
600 ValidacionDeToken Error al verificar hash VerificacionDeHash No valid la firmadigital
Este error es reportado por AFIP cuando no se estaacute enviando al webservice de negocio (WSFEv1WSMTXCA WSFEXv1 etc) el Token y Sign obtenido con WSAA (o se lo enviacutea vaciacuteo)
Esto puede deberse porque no se esteacute validando correctamente el ticket de requerimiento de acceso(certificado invaacutelido fecha invaacutelida ambiente de produccioacuten homologacioacuten incorrecto ticket de acceso yaotorgado etc) Revisar que la URL de cada webservice sea correcta (homologacioacuten o produccioacuten tanto deWSAA como del servicio web de negocio WSFEv1 WSMTXCA etc) y que el certificado corresponda alambiente correcto
Ver Manejos de excepciones para detectar el inconveniente en WSAA
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC
No estaacuten sincronizados la fecha y hora del equipo con los servidores de AFIP
En linux se actualiza con
sudo ntpdate timeafipgovar
En windows se actualiza yendo a Propiedades del Reloj Hora de Internet introduciendotimeafipgovar
Otros mensajes similares
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token119
Token vencido fecha y hora de vencimiento del token enviado - fecha y hora actual del servidorbull Validaciondetoken No validaron las fechas del token Gen Time Exp Time Now Utcbull WSAA xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid Eltiempo de generacioacutenexpiracioacuten es invaacutelido generationTime posee formato o dato invaacutelido (ej en elfuturo o maacutes de 24 hs de antiguedad)
bull
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken No aparece CUITen lista de relaciones
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesovaacutelido pero se intenta operar con un CUIT incorrecto yo que no se corresponde al certificado Revisar que elCUIT sea correcto y que esteacute asociado al servicio y certificado (ver ARFE en punto anterior)
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken Error al verificarhash VerificacionDeHash No valid la firma digital
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el ambiente requerido (por ej ticket de acceso de homologacioacuten usado en produccioacuten) o no seenvioacute correctamente el tocken y sign
Usuario no autorizado para realizar esta operacioacuten Validacionde Token No valido idSistema wsfex (Id Sistema de token es wsfe)
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el servicio web requerido (por ej ticket de acceso de factura nacional -wsfe- usado enexportacioacuten -wsfex-)
Se debe revisar el valor del servicio al crear el requerimiento de acceso (CreateTRA)
Problemas con los certificados
Error inesperado no existe el archivo o directorio de certificadoclave privada
Este error corresponde a que la interfaz no encuentra los archivos del certificadoclave privada o la ruta notiene alguacuten directorio Revisar la ruta completa y reintentar
Mensaje de Error Original (certificado)
Unexpected Python Error lttype exceptionsIOErrorgt [Errno 2] No such file or directoryreingartcrt
Mensaje de Error Original (clave privada)
Unexpected Python Error 936error02001002system libraryfopenNo such file ordirectorycryptobiobss_filec122fopen(reingartkeyr) 936error2006D080BIOroutinesBIO_new_fileno such filecryptobiobss_filec125 None
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC 120
Error inesperado La clave privada no coincide con el certificado
Este error corresponde a que el certificado no fue creado con la clave privada dada por lo que no se puederealizar la encriptacioacuten necesaria Revisar que la clave privada sea con la que se creoacute el pedido de certificadooriginal (CSR) y reintentar Si no se cuenta con la clave privada original es imposible utilizar el certificadopor lo que es necesario generar y asociar uno nuevo
Mensaje de Error Original
Unexpected Python Error ltclass M2CryptoSMIMESMIME_Errorgt936error0B080074x509 certificate routinesX509_check_private_keykey valuesmismatchcryptox509x509_cmpc399 936error2107407FPKCS7routinesPKCS7_signprivate key does not match certificatecryptopkcs7pk7_smimec76
Error Inesperado La clave privada es invaacutelida
Mensaje de Error Original
Unexpected Python Error 936error0906D06CPEM routinesPEM_read_biono startlinecryptopempem_libc647Expecting ANY PRIVATE KEY
Este error corresponde a que la clave privada no estaacute en el formato correcto (texto plano PEM) seguramenteel archivo se encuentra en PKCS12 (binario certificado x509 + clave privada con extensioacuten p12 o pfx)lo que no es necesario para esta interfaz
Para convertir de pkcs12 a pem utilizar
openssl pkcs12 -in empresap12 -out empresapem -nodes
Eso generaraacute el archivo empresapem donde
La clave privada (key) se encuentra entre -----BEGIN RSA PRIVATE KEY----- y-----END RSA PRIVATE KEY-----
bull
El certificado (crt) se encuentra entre -----BEGIN CERTIFICATE----- y -----ENDCERTIFICATE-----
bull
Copiar dichas lineas en archivos separados Los archivos deben incluir el encabezado (-----BEGIN ) ypie (-----END ) para ser vaacutelidos
En caso de ser necesario para recorrer el camino inverso generar archivo PKCS12 desde PEM (no necesariopor esta interfaz) realizar
openssl pkcs12 -export -inkey empresakey -in empresacrt -out empresap12
Error inesperado Mala Desencriptacioacuten
Este error corresponde a que el certificado fue creado usando una frase de seguridad (passphrase) por lo queen tiempo de ejecucioacuten solicita entrada dicha contrasentildea (bloqueandose si no se proporciona)
Mensaje de Error Original
Error inesperado La clave privada no coincide con el certificado 121
M2CryptoEVPEVPError 3079395008error06065064digital enveloperoutinesEVP_DecryptFinal_exbaddecryptevp_encc3303079395008error0906A065PEM routinesPEM_do_headerbaddecryptpem_libc428
Para remover la passphrase (contrasentildea) por ej del archivo privadapem y grabarlo en privadakeyejecutar el siguiente comando
openssl rsa -in privadapem -out privadakey
Error inesperado Esperando certificado
El certificado proporcionado es invaacutelido
Es posible leer los datos de un certificado utilizando el comando openssl
openssl x509 -in reingartcrt -noout -text
Deberiacutea mostrar la informacioacuten completa del certificado
Certificate Data Version 3 (0x2) Serial Number 0791000000000000 Signature Algorithm sha1WithRSAEncryption Issuer CN=AFIP-Autoridad Certificante Homologacion C=AR ST=Capital Federal L=Ciudad Autonoma de Buenos Aires O=Administracion Federal de Ingresos Publicos OU=Subdireccion General de Sistemas y TelecomunicacionesemailAddress=ac_homoafipgovarserialNumber=CUIT 33693450239 Validity Not Before Feb 1 174604 2010 GMT Not After Feb 1 174604 2011 GMT Subject CN=Mariano ReingartserialNumber=CUIT 20267565393 O=PyAfipWs-Sistemas Agiles C=AR
Si no lo muestra posiblemente el certificado esteacute en otro formato (ver como convertir desde pk7 en puntosanteriores)
Mensaje de Error Original
M2CryptoX509X509Error 3078817472error0906D06CPEM routinesPEM_read_bionostart linepem_libc650Expecting CERTIFICATE
Error al dar de alta computador
A partir de Agosto de 2016 aparentemente AFIP estaacute solicitando claves maacutes largas pudiendose presentar elsiguiente error al tratar de generar un certificado por WSASS Autoservicio de Acceso a WebServices(TESTINGHOMOLOGACIOacuteN)
ERROR clsCrearComputador (CUIT=20267565393 ALIAS=test_1024) createComputer Error al dar de alta al computador (CUIT=20267565393 ALIAS=test_1024) La longitud de clave puacuteblica debe ser estar comprendida entre 2048 y 8192 bits
En este caso de debe generar la clave con mayor cantidad de bits por ej indicando el paraacutemetro 2048 aInstructivo OpenSSL
Error inesperado Mala Desencriptacioacuten 122
La herramienta WSAA 110g ya crea de manera predeterminada claves de 4096 bits ver Crear Pedido CSR
Se estima que estas cuestiones afectaraacuten en PRODUCCIOacuteN cuando venzan la mayoriacutea de los certificados paraese entorno el 21 de Febrero de 2016 Es posible con este componente revisar el vencimiento de cada crtcon los Metodos para Certificados
Excepcioacuten SSLError X509_load_cert_crl_file
No se puede cargar el archivo afip_ca_infocrt de la lista de autoridades de certificacioacuten de confiaza(CACERT) necesario para verificar el canal seguro como solicita AFIP
Ese archivo en las ultimas actualizaciones se encuentra en la carpeta conf o puede ser descargado desde el el repositorio
El archivo debe ser copiado a la carpeta principal donde esteacute el programa WSAA o configurar el paraacutemetroCACERT con la ruta a la ubicacioacuten completa
Mensaje de Error Original
[Errno 185090050] _sslc345 error0B084002x509 certificateroutinesX509_load_cert_crl_filesystem lib
Falla SOAP WSAA (SoapFault)
En ciertas ocaciones WSAA puede denegar el acceso con los siguientes mensajes
ns1cmscertexpired Certificado expiradobull ns1xmlbad No se ha podido interpretar el XML contra el SCHEMAbull cmscertuntrusted Certificado NO emitido por un AC de confianzabull cmssigninvalid cmsbad y cmsbadbase64 no se esta informando correctamente el mensajecriptograacutefico firmado (Firma invaacutelida o algoriacutetmo no soportado)
bull
Generalmente se esta tratando de usar un certificado invaacutelido o expirado se estaacute pasando mal alguacuten paraacutemetro(servicio o tiempo de vida) o se estaacute tratando de acceder al ambiente equivocado (el cerificado es deproduccioacuten y el servidor de homologacioacuten o viceversa)
Ver consulta tema anterior para revisar el certificado Modo Homologacioacuten Produccioacuten y Comprobacioacuten deAutenticacioacuten WSAA
Errores de Conectividad
Antes las fallas de conexioacuten sobrecarga caiacutedas de internet u otros problemas de comunicacioacuten la interfazpuede devolver los siguientes errores (en su mayoriacutea del lenguaje de programacioacuten Python o sistemaoperativo)
AttributeError NoneType object has no attribute makefile no sepuede establecer el canal de comunicacioacuten (socket) puede que internet no este funcionando en elcliente
bull
socketgaierror [Errno -2] Name or service not known no se puede resolverel nombre del equipo revise los servidores DNS asignados a su conexioacuten de internet
bull
Error al dar de alta computador 123
socketerror [Errno 104] Connection reset by peer la conexioacuten fue cerradapor la contraparte (servidor AFIP) posiblemente por sobrecarga
bull
lturlopen (11001 getaddrinfo failed)gt no se puede resolver el nombre de archivorevise los DNS y si estaacute utiliando alguacuten servidor intermedio (proxy)
bull
ExpatError Not well formed token el servidor posiblemente no esta devolviendo XMLcorrecto debido a un error interno
bull
BadStatusLine ResponseNotReady significa que los servidores de AFIP no contestan algocoherente (compatible con el protocolo HTTP)
bull
AttributeError Tag not Found Body (no elements found) significa que losservidores de AFIP no contestan un XML vaacutelido seguacuten el protocolo de webservices SOAP
bull
SSLError The read operation timed out la conexioacuten SSLTLS supero el tiempo deespera posiblemente es un error de conectividad de Internet o los servidores de AFIP estaacuten caiacutedos
bull
Service Unavailable El servidor de AFIP no estaacute disponible y no devuelve un mensaje XMLcorrecto
bull
ServerNotFoundError Unable to find the server atservicios1afipgovar no estaacute resolviendo el nombre del Servidor de AFIP a la direccioacutenIP revisar la configuracioacuten DNS con su proveedor de Internet
bull
error [Errno 111] Connection refused error [Errno 10061] No sepuede establecer una conexioacuten ya que el equipo de destino denegoacuteexpresamente dicha conexioacuten revisar que no esteacute mal configurado el servidor proxy(comentar o no enviar parametro si no corresponde)
bull
En todos estos casos se recomienda reintentar la operatoria luego de unos instantes despueacutes de verificar laconexioacuten de internet Se puede probar ingresando a la URL del webserice (por ej[ httpsservicios1afipgovarwsfev1serviceasmxWSDL
WSFEv1]) con un navegador y ver si les abre correctamente la paacutegina
Tambieacuten puede haber un tema de antivirus o proxy que esteacute bloqueando la conexioacuten saliente En ese caso(servidor intermedio para poder salir a internet) se debe consultar con los administradores de la red yposiblemente se necesite configurar
El paraacutemetro proxy en el meacutetodo Conectar formato usuarioclaveservidorpuerto (verejemplo)
bull
o seccioacuten [PROXY] en el archivo receini (ver ejemplo)bull
Ver la siguiente seccioacuten si el problema persiste Recordar que a veces funciona o no dependiendo del lugardesde donde se conecta el cliente ya que AFIP tiene una granja de servidores pueden probar reconectandosea internet desde otra IP para ver si los deriva a un servidor que funcione (o esperar a que baje la demanda yover si lo solucionan)
Errores de Protocolo SSL
AFIP estaacute desafectando los protocolos de seguridad obsoletos (SSLv3 requiriendo TLSv1+) por lo que ensistemas operativos antiguos o desactualizados (por ej Windows XP) puede existir una incompatibilidad conque imposibilite la comunicacioacuten segura es recomendable actualizar el sistema operativo lenguaje deprogramacioacuten y componentes
SSLEOFError EOF occurred in violation of protocol (_sslc590)bull SSLHandshakeError [SSL SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alertbull
Errores de Conectividad 124
handshake failure (_sslc581)[Errno 1] _sslc490 error14094410SSLroutinesSSL3_READ_BYTESsslv3 alert handshake failure
bull
Como mitigacioacuten puede utilizare un transporte alternativo basado en la biblioteca CURL que en general tienemejor cobertura para este tipo de cuestiones en Windows
Para ello establecer paraacutemetro wrapper=pycurl en el meacutetodo Conectar si se utilizan loscomponentes
wrapper = pycurlok = WSFEv1Conectar(cache wsdl proxy wrapper)
Si se utilizan las herramientas por linea de comando configurar en el receini
[WSFEv1]wrapper = pycurl
Errores AFIP CUIT Emisor
En caso de problemas con el CUIT emisor y no superar una de las siguientes validaciones excluyentes(verificacioacuten de datos registrales inscripcioacuten en el reacutegimen autorizacioacuten de emisioacuten de comprobantesdomicilio fiscal etc) AFIP devolveraacute un Coacutedigo de Error 10000 con los mensajes posibles
01 LA CUIT INFORMADA NO CORRESPONDE A UN RESPONSABLE INSCRIPTO EN ELIVA ACTIVO
bull
02 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESELECTRONICOS ORIGINALES O EL PERIODO DE INICIO AUTORIZADO ES POSTERIORAL DE LA GENERACION DE LA SOLICITUD
bull
03 LA CUIT INFORMADA REGISTRA INCONVENIENTES CON EL DOMICILIO FISCALbull 04 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESCLASE A
bull
05 EL CUIT INFORMADO COMO EMISOR NO SE ENCUENTRA REGISTRADO DE FORMAACTIVA EN LAS BASES DE LA ADMINISTRACIOacuteN
bull
06 DEBE POSEER AL MENOS UNA ACTIVAD ACTIVAbull
En estos casos debe contactar la mesa de ayuda de AFIP para solucionar el inconveniente que esteacute bloqueandola emisioacuten de facturas electroacutenicas (generalmente no es un tema teacutecnico sino un traacutemite administrativo)
Errores AFIP Punto de Venta
Otros errores relacionados a la emisioacuten de facturas electroacutenicas pueden ser
1501 El Punto de Venta debe ser del tipo habilitado para el reacutegimen CAE Codificacioacuten de Productos- Web Services o del reacutegimen CAEA
bull
Errores de Protocolo SSL 125
En este caso se debe revisar que el tipo de punto de venta dado de alta coincida con el servicio web aconsumir (campo sistema de facturacioacuten asociado)
RECE para aplicativo y web services (CAE WSFEv1 factura electroacutenica mercado interno tradicionalsin detalle)
bull
RECE para aplicativo y web services EXPORTACION (CAE WSFEXv1 factura electroacutenicaexportacioacuten con detalle)
bull
Codificacioacuten de Productos Web Services (CAE WSMTXCA factura electroacutenica mercado interno condetalle)
bull
CAEA - Codificacioacuten de Productos (CAE anticipado WSMTXCA factura electroacutenica mercado internocon detalle)
bull
No debe figurar Factura en Linea porque ese punto de venta solo permite operar por Clave Fiscal serviciointeractivo de Comprobantes en Liacutenea
Errores de tipos de datos
Se recuerda que este componente es dinaacutemico y generalmente no realiza conversioacuten ni ajustes en los tipos dedatos por lo que la aplicacioacuten que lo utilice debe revisarlos y verificar que sean correctos para ser enviadosrespetando las especificaciones y validaciones de AFIP
Debido a que los distintos lenguajes de programacioacuten pueden almacenar y pasar los valores de formasdiferentes (eventualmente en registros recordsets campos fields o similares) es recomendable que seconviertan todos los datos a string (cadenas de caracteres) para evitar errores de conversioacuten y redondeoTambieacuten se pueden usar otros tipos de datos baacutesicos como enteros (integer) flotantes (float)numeacutericomoneda (currencydecimal) que son los que en definitiva reconoce AFIP Las fechas deben pasarseen formato string seguacuten el formato de cada webservice Los importes deben pasarse con punto decimal (nocoma y sin separadores de miles ni signo pesos)
En VB se pueden convertir los valores con CStr (string) CLng (long) CCur (currency) etc o incluso lasfunciones str o val en ciertos casos ejemplo
tipo_cbte = CInt(rstipo_cbte)
Para un ejemplo concreto ver la implentacioacuten completa de referencia factura_electronicamdb (Access 2k osuperior)
En caso de enviar los tipos de datos incorrectos en Traceback (ver Manejo de Excepciones) podraacuteencontrarse algunos de los mensajes frecuentes
AttributeError PyIDispatch object has no attribute strip se envioacuteun dato que no puede convertirse a string
bull
PyIDispatch at 0x10531678 with obj at 0x0C997832 se usoacute un tipo de datos noconvertidosoportado ver Mensajes XML
bull
TypeError int() argument must be a string or a number notNoneType se envioacute un nulo en un campo que necesitaba un nuacutemero
bull
ValueError invalid literal for int() with base 10 A se envioacute un stringen un campo que necesitaba un nuacutemero
bull
Errores AFIP Punto de Venta 126
Errores internos de AFIP
Ocasionalmente pueden producirse errores no documentados en las especificaciones teacutecnicas de AFIP Por ejcuando se intenta utilizar la URL de un webservice obsoleto como WSBFE en vez de WSBFEv1 el servidorde AFIP ha devuelto el siguiente error
soapServer Server was unable to process request ---ampgt Object reference not set to an instance ofan object
bull
Otros problemas internos de los servidores de AFIP que los resuelve dicho organismo automaacuteticamente (sinintervencioacuten necesaria generalmente en el transcurso del diacutea) son
500 Error general DB (InsertandAuthorize - fex_pckprc_ins_rcel_comprobantes OEX ) - (1654) -ORA-01654 unable to extend index MIGRARCEL_CMP_UNC_INDEX by 4 in tablespaceFISCO_DATOS ORA-06512 at MIGRAFEX_PCK line 353 ORA-06512 at line 1
bull
500 Error interno DB - fex_Rece_Pckget_ctzbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
500 Error general DB (InsertandAuthorize - prc_ws_ins_cab) BFEErrorbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-12535 TNSoperationtimed out
bull
500 Error interno de aplicacioacuten - Metodo FECAESolicitar - Index was outside the bounds of thearray
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-00257 archiver error Connect internalonly until freed ORA-02063 preceding line from GHOST ORA-06512 at ORARECE_V1_PCKline 1651 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-28000 the account is lockedORA-02063 preceding line from E15K_PADR ORA-06512 at ORARECE_V1_PCK line 1806ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLEinitialization or shutdown in progress
bull
501 Error interno de base de datos - CAECabInsert ORA-02068 following severe error fromCONTRIB ORA-03113 end-of-file communication channel ORA-06512 atORARECE_V1_PCK
bull
501_ Error interno de base de datos - CAECabInsert ORA-01001 invalid cursor ORA-06512 atORARECE_V1_PCK line 580 ORA-06512 at ORARECE_V1_PCK line 1070 ORA-06512 atline 1
bull
501 Error interno de base de datos - CAEDetInsert ORA-03233 unable to extend tableORAF136_DETALLES_FACTE subpartition F136_DET_2011_CLAVE_08 by 128 in tablespaceUSERS
bull
501 Error interno de base de datos - CAESequenceGenerarORA-01502 indexORAF136_DET_CAE_UK or partition of such index is in unusable state ORA-06512 atORARECE_V1_PCK line 1477 ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace FISCO_DATOS ORA-06512 at ORARECE_V1_PCK line1168 ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLE initializationor shutdown in progress
bull
501 Error interno de base de datos - AlicIvaCAEInsertORA-14400 inserted partition key does notbull
Errores internos de AFIP 127
map to any partition ORA-06512 at ORARECE_V1_PCK line 1308 ORA-06512 at line 1501 Error interno de base de datos - CuitsEnPadronSet ORA-12541 TNSno listener ORA-06512 atORARECE_V1_PCK line 1831 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-04031 unable to allocate 20528 bytesof shared memory (shared poolunknown objectsga heap(10)KTI SGA freeable small pool)ORA-02062 preceding line from SEFI ORA-06512 at ORARECE_V1_PCK line 1898ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace USERS at ORARECE_V1_PCK line 1202
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-12505 TNSlistener could notresolve SID given in connect descriptor
bull
501 Error interno de base de datos - CAECompConsultarORA-01502 indexORAIX_F136_DETALLES_TPN or partition of such index is in unusable state
bull
501 Error interno de base de datos - CAECabInsert ORA-01502 index ORAF136_CAB_CUIT_IDor partition of such index is in unusable state
bull
501 DataBase - Resultado inesperadobull 501 Error interno de base de datos - CAESequenceGenerarORA-01654 unable to extend indexORAF136_DET_CAE_UK by 1024 in tablespace FISCO_FE ORA-06512 atORARECE_V1_PCK line 1781 ORA-06512 at line 1
bull
502 Error interno de base de datos - Autorizador CAE - Transaccioacuten Activabull Error interno de aplicacioacuten - Metodo FECompConsultarORA-01034 ORACLE not availableORA-27101 shared memory realm does not exist
bull
Error interno de aplicacioacuten - Metodo FECompConsultarORA-01035 ORACLE only available tousers with RESTRICTED SESSION privilege
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-28000 the account is lockedbull soapenvServer Error de conexin DB [Cd A001]bull soapenvClient Error de acceso a la base de datosbull soapenvClient business0010bull soapenvClient orgapacheaxis2databindingADBExeption unexpected subelementconsultarCTGDatos
bull
Tambieacuten pueden ocurrir Errores de Conectividad a nivel de sistema operativo socket error ioerror timeout connection refused ssl handshake server not found etc (verarriba) especialmente cuando los servidores de AFIP se saturan por cambios y actualizaciones
Realizar la consulta con la mesa de ayuda de AFIP sriafipgovar (produccioacuten) y webservicesafipgovar(homologacoacuten) para dejar constancia del problema y si corresponde ver de utilizar los meacutetodos tradicionalespara emitir comprobantes seguacuten RG248508 Artiacuteculo 33
En el caso de inoperatividad del sistema se deberaacute emitir y entregar el comprobanterespectivo utilizando el controlador fiscal o los comprobantes manuales seguacuten correspondahasta tanto esta Administracioacuten Federal apruebe otro procedimiento alternativo de respaldo
Importante en general es obligatorio informar los comprobantes emitidos manualemente por formulariomultinota en dependencia de AFIP a traveacutes de servicios en linea o como AFIP disponga en casos particularesConsultar con el contador la normativa y legislacioacuten vigente
Errores internos de AFIP 128
Errores de Permisos
Dependiendo de las poliacuteticas de seguridad puede ser necesario dar permisos de acceso a la carpeta cache(archivos temporales) o aquellas donde se almacenen los archivos de intercambio (entrada salida PDF oXML)
IMPORTANTE los certificados y claves privadas no deben ser expuestas en una carpeta puacuteblica delservidor web o similar Utilizar passphrase (ver Meacutetodos WSAA) para mayor proteccioacuten y seguridad
Linux
En GNULinux generalmente es necesario que el usuario del servidor web (www-data o similar) puedaacceder a la carpeta
Por ejemplo se podriacutea utilizar los siguientes comandos
chown www-data -R optpyafipwschmod a+xr -R optpyafipwschmod a+xwrt -R optpyafipwscache
Revisar los permisos con su administrador de sistemas
Windows
Acceso Denegado (Archivos)
Error IOError [Errno 13] Permission denied cArchivos deProgramaPyAfipWSCacheTAXML
En general es recomendable utilizar una carpeta con permisos de escritura para la aplicacioacuten
Si esto no es posible se puede configurar los permisos de acceso
Explorador de Archivosbull Buscar carpeta de instalacioacuten (CArchivos de ProgramaPyAfipWS)bull Propiedades (click derecho)bull Solapa Seguridadbull Seleccionar Usuarios que ejecutan la aplicacioacutenbull Editarbull Modificar (habilitar)bull Aceptarbull
Ejemplo
Acceso Denegado (CreateObjectCreateInstance)
En ciertos servidores (Windows 7 o superior) dependiendo de la configuracioacuten debe permitir inicio yactivacioacuten de los componentes
Errores de Permisos 129
Error al llamar a CreateObject CreateInstance o similar Acceso Denegado(HRESULT0x80070005 E_ACCESSDENIED
Solucioacuten
Inicio buscar Servicios de Componentes (o via el Panel de Control HerramientasAdministrativas)
bull
Equipos Mi PC Configuracioacuten DCOMbull Buscar WSAA WSFEv1 o el componente que desee configurarbull Propiedades (Click Derecho)bull Solapa Seguridadbull Permisos de inicio y activacioacuten Personalizado Editarbull Agregar los usuarios que deben tener permisos necesariosbull Aceptarbull
Repetir para Permisos de Acceso y Configuracioacuten de ser necesario
Ejemplo
Acceso Denegado (CreateObjectCreateInstance) 130
Si bien los ejemplos (incluyendo los oficiales) utilizan generalmente el uacuteltimo ID + 1 esto es solo para ilustrarel meacutetodo en general no es recomendable su uso en produccioacuten ademaacutes de requerir comunicacioacuten extra (noes obligatorio llamar al meacutetodo uacuteltimo ID) ya que puede generar inconvenientes en caso de muacuteltiples equipossolicitando autorizacioacuten simultaacuteneamente fallas de comunicacioacuten o problemas de almacenamiento Seriacutearecomendable por ej que el ID sea un campo autonumeacuterico autoincremental o serial secuencial queacompantildee a la factura
El ID es arbitrario y no tiene relacioacuten con el nordm de factura La uacutenica condicioacuten es que debe ser uacutenico pero noes necesario que sea creciente o secuencial
Validez de Comprobantes Electronicos emitidos
El uso incorrecto de los servicios web (no respetando el funcionamiento de los campos en especial el IDreproceso motivos de observacioacuten y errores) puede ocasionar comportamientos erraacuteticos (facturas noautorizadas o autorizadas con otros datos) Se recomienda revisar el funcionamiento general de su sistema enproduccioacuten utilizando las validaciones que prevee la AFIP
Consulta interactiva de CAE httpsservicioswebafipgobargenericoscomprobantescaeaspxbull Consulta interactiva de CAE Anticipado httpsservicioswebafipgobargenericoscomprobantescaeaaspx
bull
Por Clave Fiscal servicio Verificacioacuten de validez de comprobantes emitidos (solo receptores)bull Por servicio web para Facturas E A y B (Bono Fiscal) Meacutetodo Recuperar comprobante (para facturasde exportacioacuten solo emisores)
bull
Para maacutes informacioacuten y automatizacioacuten del proceso ver servicio web Constatacioacuten de ComprobantesWSCDC
Mensajes XML
Los mensajes XML contienen la comunicacioacuten transmitida entre el sistema y la AFIP en el formato deintercambio de los servicios web
Atributo XmlRequest (requerimientoxml) incluye credenciales de acceso y la solicitud remota(meacutetodo a utilizar paraacutemetros etc)
bull
Atributo XmlResponse (respuestaxml) incluye los datos devueltos por el proceso remotoincluyendo mensajes de error (si corresponde)
bull
Almacenar estos archivos es de vital importancia para el registro de las operaciones realizadas por webservicey su eventual verificacioacuten depuracioacuten o solucioacuten de inconvenientes La informacioacuten contenida en estosarchivos es solo relevante a los desarrolladores no es necesario que sean enviados al usuario final
Dependiendo de la interfaz se pueden recuperar estos mensajes en forma de cadenas de texto para su posterioralmacenamiento o generar los archivos correspondientes
Para maacutes informacioacuten ver atributos XmlRequest y XmlResponse o paraacutemetros xml --trace
Guardar WSFEv1XmlRequest y WSFEv1XmlResponse (ver Manejo de Excepciones para unarutina completa)
bull
RECE1EXE xml --trace generaraacute los archivos con la extensioacuten xml en el directorio de laherramienta (ver Paraacutemetros para maacutes informacioacuten)
bull
Validez de Comprobantes Electronicos emitidos 6
Nota de Seguridad los mensajes pueden incluir datos sensibles (credenciales de acceso a AFIP token ysign) que pueden ser vaacutelidos por varias horas auacuten despueacutes de efectuada la comunicacioacuten En caso compartirestos archivos (por ej en el foro puacuteblico de consultas) se deberiacutean tomar las medidas necesarias para evitarinconvenientes (recortar el campo sign es suficiente para que no se puedan reutilizar las credenciales deacceso)
Importante En ciertos casos para determinados webservices AFIP solicita tag vacios (por ejpermiso_existente en WSFEXv1) por lo que se ha ajustado en la biblioteca de comunicacioacuten SOAP(versioacuten 127 y superiores) para manejar tres escenarios
Enviar un dato por ej permiso_existente = Sltpermiso_existentegtSltpermiso_existentegt
bull
Enviar un tag vacio completando con string vacio por ej permiso_existente = ltpermiso_existentegtltpermiso_existentegt
bull
No enviar un tag (valor NULL NIL None Void etc) por ej permiso_existente = NULL(no genera XML)
bull
En caso de no seguir las especificaciones de AFIP el webservice retornaraacute un mensaje de error del tipoServer was unable to read request ---gt There is an gt error in XMLdocument (5 1353) ---gt Input string was not in a correct format dondeindica revisar el XmlRequest liacutenea 5 columna 1353 (en este caso puntual) para corregir el dato enviado
Documentacioacuten Oficial AFIP
Recomendamos revisar y seguir los lineamientos y normativa de AFIP
httpwwwafipgovarfebull httpwwwafipgovarwsbull
Recordamos que la interfaz y bibliotecas (PyAfipWs) no realizan ninguacuten tipo de chequeo o validacioacutenadicional (ya que esta tarea la realizan los servidores de AFIP) y tampoco convierte entre distintos tipos dedatos (salvo conversioacuten trivial a cadenas -strings- para ser enviadas por XML) por lo que es responsabilidadde la aplicacioacuten principal cumplir con las especificaciones y legislacioacuten vigente referidas a los servicios webde AFIP proporcionando los datos correctos que correspondan
Modos Homologacioacuten y Produccioacuten
Por disentildeo el instalador para Windows publicado de la interfaz COM (pyafipwspy) y herramientas por liacuteneade comando (recepy recexpy recebpy rece1py) funcionaraacute inicialmente solo en modo homologacioacuten(testing) ya que su objetivo es simplemente facilitar las pruebas para que los usuarios que no concen Pythonpuedan evaluar el producto antes de interiorizarse en el lenguaje yo contratar el soporte comercial
Con los instaladores de evaluacioacuten en modo de homologacioacuten (pruebas) se ignoraraacute las URLsproporcionadas a CallWSAA Conectar o especificadas en receini En ese caso para activar modo produccioacuten(definitivo) es necesario ajustar el coacutedigo fuente ver instrucciones de Instalacioacuten desde Coacutedigo Fuente( video explicativo) Ofrecemos soporte comercial contemplando el acceso al instalador compilado ampajustado para produccioacuten para los clientes que asiacute lo requieran Ver Costos y Condiciones
Mensajes XML 7
Configuracioacuten para Produccioacuten
Para entrar en el ambiente de produccioacuten de AFIP ademaacutes de utilizar el instalador correcto (no el deevaluacioacuten ver arriba) se debe usar las URLWSDL correspondientes para cada webservice (modohomologacioacuten deshabilitado)
WSAA httpswsaaafipgovarwsservicesLoginCmswsdlbull WSFE httpsservicios1afipgovarwsfeserviceasmx -obsoleto desde 2011 por AFIP-bull WSFEv1 httpsservicios1afipgovarwsfev1serviceasmxWSDLbull WSFEXv1 httpsservicios1afipgovarwsfexv1serviceasmxWSDLbull WSMTXCA httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAServicewsdlbull WSBFEv1 httpsservicios1afipgovarwsbfev1serviceasmxWSDLbull
Ejemplo en el receini
[WSAA]CERT=reingartcrtPRIVATEKEY=reingartkeyURL=httpswsaaafipgovarwsservicesLoginCmsCACERT=confafip_ca_infocrt
[WSFEv1]CUIT=20267565393ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
Ejemplo en Visual Basic o similar (segundo paraacutemetro del meacutetodo Conectar)
Certificado = reingartcrt certificado de produccioacutenClavePrivada = reingartkey clave privada de produccioacutencms = WSAASignTRA(WSAACreateTRA(wsfe) Certificado ClavePrivada)
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlok = WSAAConectar(cache wsaa_url)ta = WSAALoginCMS(cms)
wsfev1_url = httpsservicios1afipgovarwsfev1serviceasmxWSDLok = WSFEv1Conectar(cache wsfev1_wsdl)
WSFEv1Cuit = 20267565393 CUIT del emisor (segun certificado)
Luego de configurar las opciones para produccioacuten se puede verificar el correcto funcionamiento de lascredenciales y URL utilizando los meacutetodos auxiliares por ej consultando los puntos de venta habilitados
parametros RECE1 ptosventabull meacutetodo ParamGetPtosVentabull
Aclaracioacuten No es obligatorio usar el instalador ni realizar compilacioacuten se puede bajar revisar modificar yejecutar directamente el coacutedigo fuente Python publicado en modo homologacioacuten o produccioacuten
Configuracioacuten para Produccioacuten 8
Importante Los CAE obtenidos en modo homologacioacuten no tienen validez fiscal
Advertencia Teoacutericamente no deberiacutea ser posible conectarse a produccioacuten con certificados de homologacioacuten(y viceversa) pero en la praacutectica han sucedido casos (obteniendo CAE de homologacioacuten sin validez fiscal)por lo que recomendamos extremar las medidas de seguridad y control (verificando certificados yconfiguracioacuten de URL de servidores) para generar las facturas en el ambiente correcto Ver Verificar ValidezCAE y Comprobacioacuten WSAA
Manejo de Excepciones
Las versiones recientes de WSAA (202) WSFEv1 (110) WSMTXCA (101) y WSFEX (126123) incluyenmejoras y unificaciograven en el manejo de excepcioneserrores (atributos LanzarExcepciones Excepciony Traceback) permitiendo un control maacutes simple de los Unexpected Python Error (errores noesperados que informa Python el lenguaje de programacioacuten de la interfaz generalmente por problemas deconexioacuten o tipos de datos invaacutelidos) sobre todo para lenguajes que no soportar mensajes de Error COM(previniendo mensajes por errores no controlados como Error fatal coacutedigo de excepcion=C0000005 y elcierre del programa)
Dependiendo de cada caso (en especial para lenguajes de programacioacuten legados) es conveniente deshabilitarlos errores no manejados (LanzarExcepciones = False) y controlar manualmente las excepciones y el valorretornado luego de llamar a cada meacutetodo
Ejemplo para Visual Basic
Dim ta as Variant
WSAALanzarExcepciones = Falseta = WSAALoginCMS(cms)If WSAAExcepcion ltgt Then
muestro al usuario solo el mensaje de error no la traza MsgBox WSAAExcepcion vbCritical Excepcioacuten
Exit SubEnd If
Mismo ejemplo para Visual Fox Pro
WSAALanzarExcepciones = Fta = WSAALoginCMS(cms)IF LEN(WSAAExcepcion) gt 0 THEN WSAATraceback MESSAGEBOX(WSAAExcepcion 5 + 48 Excepcion) CANCELENDIF
Tambieacuten se puede verificar que la respuesta del meacutetodo (en este caso en la variable ta notar que es del tipoVariant) no sea nula en ese caso se ha producido una excepcioacuten y el mensaje deberiacutea estar en el atributoExcepcion con su traza en Traceback
Nota dependiendo de la version los atributos Excepcion y Traceback pueden estar disponibles solo luego deocurrido el error (utilizar las ulitmas versiones para poder consultar estos atributos en cualquier momento)
Es recomendable que se muestre al usuario solo la Excepcioacuten (la traza es informacioacuten teacutecnica que no tieneutilizad para el operador) y para facilitar la depuracioacuten en todos los casos es uacutetil guardar los Mensajes XML
Manejo de Excepciones 9
y excepcioacuten ya que a veces los lenguajes de programacioacuten cortan el mensaje y se dificulta saber el motivo delerror Ademaacutes es recomendable siempre verificar que los objetos hayan sido creados (para no generar nuevoserrores) y que estos sean compatibles con la versioacuten que manejamos (si tenemos varias instalaciones distintaspara no solicitar atributos inexistentes)
Por ej para VB (cambiar WSAA por el webservice que corresponda)
verifico que el objeto haya sido creadoIf Not WSAA Is Nothing Then
verifico que la versioacuten del objeto sea compatibleIf WSAAVersion gt= 102a Then creo el archivo guardo alliacute todos los atributos para depuracioacuten
fd = FreeFile Open cerrortxt For Append As fd Print fd WSAAExcepcion Print fd WSAATraceback Print fd WSAAXmlRequest Print fd WSAAXmlResponse Close fd
End IfEnd If
Ejemplo para VFP (cambiar WSAA por el webservice que corresponda)
-- Depuracioacuten (grabar a un archivo los datos de prueba)gnErrFile = FCREATE(cerrortxt) =FWRITE(gnErrFile WSAAToken + CHR(13))=FWRITE(gnErrFile WSAASign + CHR(13)) =FWRITE(gnErrFile WSAAXmlRequest + CHR(13))=FWRITE(gnErrFile WSAAXmlResponse + CHR(13))=FWRITE(gnErrFile WSAAExcepcion + CHR(13))=FWRITE(gnErrFile WSAATraceback + CHR(13))=FCLOSE(gnErrFile)
Error Handler
Importante este meacutetodo no es estrictamente necesario si su programa ya tiene incorporado el manejo deerrores seguacuten el lenguaje de programacioacuten que utilicie (especialmente si utiliza el control de excepcionesmencionado en la seccioacuten anterior)
Todas estas consideraciones no quitan que se deba tener previsto el controlador de errores habitual dellenguaje para capturar los errores graves (por ej al no poder crear el objeto enviar un tipo de dato incorrectoo llamar un meacutetodoatributo inexistente) ya sea utilizando
Visual Basic ON ERROR GOTO bull Visual Fox Pro ON ERROR DO bull o bloques TRY EXCEPT CATCH o similaresbull
Lo mismo aplica a WSFEv1 WSMTXCA y WSFEX Para maacutes informacioacuten ver los ejemplos actualizados
Para VB
On Error GoTo ManejoError
Crear objeto interface (WSAA WSFEv1 etc)
Error Handler 10
Set WSAA = CreateObject(WSAA) llamar a los meacutetodos de WSAA
Exit Sub
ManejoError
Si hubo error (tradicional no controlado)
Mostrar mensajes de Depuracioacuten en ventana de inmediatoIf Not WSAA Is Nothing Then
If WSAAVersion gt= 102a Then DebugPrint WSAAExcepcion DebugPrint WSAATraceback DebugPrint WSAAXmlRequest DebugPrint WSAAXmlResponse
End IfEnd IfIf Not WSFEv1 Is Nothing Then
If WSFEv1Version gt= 110a Then DebugPrint WSFEv1Excepcion DebugPrint WSFEv1Traceback DebugPrint WSFEv1XmlRequest DebugPrint WSFEv1XmlResponse DebugPrint WSFEv1DebugLog()
End IfEnd If
Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipSelect Case MsgBox(ErrDescription vbCritical + vbRetryCancel Error amp ErrNumber - vbObjectError amp en amp ErrSource)
Case vbRetry DebugAssert False
ResumeCase vbCancel
DebugPrint ErrDescriptionEnd Select
Para VFP (con procedimiento para captura de errores automaacutetica)
ON ERROR DO errhand2-- Crear objeto interface Web Service de Factura ElectroacutenicaWSFE = CREATEOBJECT(WSFEv1) -- llamar a los meacutetodos de WSFE
-- Procedimiento para manejar errores WSFEPROCEDURE errhand2 --PARAMETER merror mess mess1 mprog mlineno
-- Depuracioacuten (mostrar los mensajes de error en la ventana principal)
WSFEv1XmlRequest WSFEv1XmlResponse WSFEv1Excepcion WSFEv1Traceback
Error number + LTRIM(STR(ERROR()))
Error Handler 11
Error message + MESSAGE() Line of code with error + MESSAGE(1) Line number of error + LTRIM(STR(LINENO())) Program with error + PROGRAM()
-- Preguntar Aceptar o cancelar ch = MESSAGEBOX(WSFEExcepcion 5 + 48 Error) IF ch = 2 ampamp Cancelar ON ERROR CLEAR EVENTS CLOSE ALL RELEASE ALL CLEAR ALL CANCEL ENDIF ENDPROC
Es posible seguir utilizando para las versiones anteriores o por compatibilidad hacia atraacutes LanzarExcepciones= Verdadero (predeterminado) en dicho caso se generaraacute un Error COM que deberaacute ser capturado por laaplicacioacuten y el mensaje estaraacute en ErrDescription (para VB) o MESSAGE() (para VFP)
Time-Out
En casos de falla de los servidores de AFIP la respuesta se puede demorar por lo que se puede configurar elparametro timeout (tiempo de espera) en el meacutetodo Conectar(cache wsdl proxy wrappercacert timeout) para controlar el periacuteodo y minimizar los bloqueos
De manera predeterminada el tiempo de espera en las uacuteltimas versiones es de 30 segundos pero se puedenpasar otros valores como 300 para que espere hasta 5 minutos (si los servidores de AFIP estaacuten muycongestionados) o reducir a 15 o 10 para esperar un tiempo maacutes reducido y dar una respuesta raacutepida alusuario (ver en ese caso Reproceso Automaacutetico para reintentarconsultar en caso de fallas en AFIP)
Es recomendable establecer la propiedad LanzarExcepciones a Falso y comprobar el valor deExcepcion (ver arriba) que generalmente informaraacute el error del sistema operativo por timeout Varioswebservices de AFIP tienen un meacutetodo Dummy que se pueden combinar con el timeout para detectar si elservidor de AFIP esta funcionando correctamente o no (justamente ese meacutetodo tambieacuten puede fallar desdeAFIP y es necesario controlar el tiempo de espera para un chequeo raacutepido)
Ver Errores de Conectividad y Errores internos de AFIP para mayor informacioacuten sobre los problemasfrecuentes con la comunicacioacuten hacia los servidores de AFIP
Importante Si no se utiliza los paraacutemetros cache proxy wrapper y cacert deberiacutean ser pasados como stringvacio (no saltear) Para poder utilizar estos paraacutemetros se deberiacutea usar una versioacuten actualizada de loscomponentes (2015)
Verificacioacuten del Canal de Comunicacioacuten Seguro
Por nueva Especificacioacuten Teacutecnica WSAA 122(Requerimientos de canal seguro comunicacioacuten para los CEE WSAA y WSN) se debe verificar la identidaddel servidor de AFIP (transformando lo que antes era una sugerencia (no documentada) en una verificacioacutenobligatoria de comprobar el certificado y URL del servidor)
Time-Out 12
Para ello los meacutetodos Conectar reciben dos paraacutemetros adicionales (actualmente solo para uacuteltimasversiones de desarrollo de WSAA 204 y WSFEv1 112 o superiror)
wrapper libreriacutea http con soporte avanzado de ssl (por el momento pycurl)bull cacert ruta al certificado de la autoridad certificante a verificar geotrustcrt ocomodocrt Puede utilizar el archivo con ambos certificados afip_ca_infocrt que lomantenemos actualizado con todos los certificados requeridos
bull
IMPORTANTE es recomendable empezar a utilizar el archivo geneacuterico de entidades certificantes pasandocacert=True o cacert=default De este modo si AFIP cambia el certificado o se vence algunaCA es probable que el nuevo certificado esteacute en el archivo generico por lo que no habriacutea que modificar elcoacutedigo y agregarlo manualmente (siempre que se este utilizando una versioacuten actualizada del proyecto)
Como solucioacuten provisoria se pueden descargar cacertpem desde el siguiente link httpscurlhaxxsedocscaextracthtml Esos son los certificados de Firefox (Mozilla) que contiene todos loscertificados existentes Se deberiacutea reemplazar por el archivo afip_ca_infocrt
Ejemplo en Visual Basic
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlwrapper = pycurl para situaciones especiales o versiones anteriores (instalador lt 27)proxy = formato usuarioclaveservidorpuertocacert = WSAAInstallDir + confafip_ca_infocrt Indicar ruta completa (directorio conf instalador gt 27)WSAAConectar(cache wsaa_url proxy wrapper cacert)
Ejemplo en RECEINI (solo se agrega los paraacutemetros de configuracioacuten CACERT y WRAPPER el resto seusa normalmente)
[WSAA]URL=httpswsaaafipgovarwsservicesLoginCmswsdlCACERT=confafip_ca_infocrtWRAPPER=pycurl
Nota De realizar la verificacioacuten debe agregar los paraacutemetros a todas las secciones que se conecten con loswebservices [WSAA] [WSFEv1] [WSLPG] etc y usar un instalador actualizado
Para verificar la Autoridad Certificante (CACERT) se recomienda probar el uacuteltimo ejemplo interactivo(cambiando httplib2 por pycurl para validar el nuevo certificado de wsaa) Para maacutes informacioacuten ver EjemploInteractivo de Autenticacioacuten (requiere instalacioacuten)
De encontrarse alguna inconsistencia el meacutetodo Conectar devolveraacute falso y en Excepcioacuten estaraacute el motivo deerror
No verifica el certificado (60 SSL certificate problem verify that the CAcert is OK Details error14090086SSLroutinesSSL3_GET_SERVER_CERTIFICATEcertificate verify failed)
bull
No verifica URL (51 SSL certificate subject namewsaahomoafipgovar does not match target host namewsaahomoafipgobar)
bull
El archivo de autoridades certificantes (paraacutemetro cacert) es incorrecto SSLError [Errno185090050] _sslc344 error0B084002x509 certificate
bull
Verificacioacuten del Canal de Comunicacioacuten Seguro 13
routinesX509_load_cert_crl_filesystem lib error (77 )SSLHandshakeError [ SSL CERTIFICATE_VERIFY_FAILED ] certifiacutecateverify failed (_sslc581 ) o WindowsError [Error 2] El sistema nopuede encontrar el archivo especificado IOError [Errno 2] No suchfile or directory (usar alternativamente confafip_ca_infocrt)
Se utiliza una libreriacutea de transporte distinta (pycurl) y posiblemente sea reemplazada en el futuro por lo querecomendamos dejar parametrizado este tema para evitar inconvenientes (pudiendo usar cualquier libreriacutea httpyo deshabilitar la comprobacioacuten de autoridad certificante al no pasarle los nuevos paraacutemetros a Conectarpara mantener compatibilidad con versiones anteriores yo en caso de que AFIP instale un certificadoincompatible en sus servidores)
Tabla comparativa Webservices
A continuacioacuten se presenta un resumen de webservices herramientas atributos y meacutetodos soportados
Caracteriacutestica WSFE v0 WSFE v1 v11 v2 v26 WSBFE v0 y v1 WSFEX v0 y v1 WSMTXCA
Normativa AFIP RG2485RG2485 RG2926 RG2959RG2975 RG3067 RG3571RG3668 RG3749 RG3779
RG2557 RG2758 RG3066RG3689 RG2904 RG2926 RG3536
Reacutegimen Mercado Internooriginal
Mercado interno (sin informardetalle)
Bono Fiscal - Bienes deCapital Exportacioacuten Mercado Interno (informar detalle
codificacioacuten de artiacuteculos)Clases de Facturas A B C M A B C M A B E A B
Sujetos comprendidos RI (obsoleto desde172011)
Responsables InscriptosExentos y MonotributoReacutegimen General
ResponsablesInscriptos inscriptos enla Secretariacutea deComercio
Exportadores inscriptosen los RegistrosEspeciales Aduaneros(V1 obligatorio desde31122011)
Responsables Inscriptos Notificadospor Juez Administrativo AFIP
Objeto COM(Windows) WSFE WSFEv1 WSBFE o WSBFEv1 WSFEX o WSFEXv1 WSMTXCA
Biblioteca COM(Windows) wsfedll wsfev1dll pyafipwsdll o
wsbfev1dllpyafipwsdll owsfexv1dll wsmtxdll
Modulo Python(Linux) wsfepy wsfev1py wsbfepy o wsbfev1py wsfexpy o wsfexv1py wsmtxpy
Herramienta siacutemilSIAPRECE(WindowsLinux)
receexe recepy rece1exe rece1py recebexe recebpy recexexe recexpy recemexe recempy
Informacioacuten General PyAfipWs Proyecto Version 1 Bonos FiscalesElectroacutenicos
Factura ElectroacutenicaExportacioacuten Proyecto Matrix
DocumentacioacutenTeacutecnica (Manual) WSFE WSFEv1 WSBFE WSFEX WSMTXCA
Nombre de servicioparaWSAACreateTRA
wsfe wsfe wsbfe wsfex wsmtxca
Meacutetodo Solicitud deAutorizacioacuten CAE oinformacioacuten deCAEA
Aut (CAE) CAESolicitar CAEARegInformativo
Authorize (CAE) Authorize (CAE) AutorizarComprobante InformarComprobanteCAEA
Tabla comparativa Webservices 14
Meacutetodos para CAEA(anticipado)
CAEASolicitarCAEAConsultar
SolicitarCAEAConsultarCAEAEntreFechasConsultarCAEA (emulado)
Campo ID(identificador uacutenico) en Aut en Authorize en Authorize
Reproceso siacute (realizado por AFIP) automaacutetico (emulado en lainterfaz) siacute (realizado por AFIP) siacute (realizado por AFIP) automaacutetico (emulado en la interfaz)
Campoproductosservicios presta_serv=SN concepto=123 tipo_expo=123 concepto=123
Campomonedacotizacioacuten moneda_id moneda_ctz imp_moneda_id
imp_moneda_ctz moneda_id moneda_ctz moneda_id moneda_ctz
MeacutetodoCrearFactura oAut
id presta_servtipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_totalimp_tot_concimp_neto impto_liqimpto_liq_rniimp_op_exfecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta
concepto tipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_total imp_tot_concimp_neto imp_iva imp_tribimp_op_ex fecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz
tipo_doc nro_doczona tipo_cbtepunto_vta cbte_nrofecha_cbte imp_totalimp_neto impto_liqimp_tot_concimpto_liq_rniimp_op_ex imp_percimp_iibbimp_perc_munimp_internosimp_moneda_idImp_moneda_ctz
tipo_cbte punto_vtacbte_nro fecha_cbteimp_total tipo_expopermiso_existentedst_cmp clientecuit_pais_clientedomicilio_clienteid_impositivomoneda_id moneda_ctzobs_comerciales obsforma_pago incotermsidioma_cbteincoterms_dsfecha_pago)
concepto tipo_doc nro_doctipo_cbte punto_vta cbt_desdecbt_hasta imp_total imp_tot_concimp_neto imp_subtotal imp_tribimp_op_ex fecha_cbtefecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz obs
MeacutetodoAgregarItem(detalle de artiacuteculo)
ncm sec ds qtyumed precio bonifiva_id imp_total
codigo ds qty umedprecio imp_total bonif
u_mtx cod_mtx codigo ds qtyumed precio bonif cod_ivaimp_iva imp_subtotal
MeacutetodoAgregarCbteAsoc(comprobantesasociados)
tipo_cbte pto_vta nro_cbteCUIT fecha
tipo_cbte pto_vtanro_cbte cuit_cbte tipo_cbte pto_vta nro_cbte fecha
MeacutetodoAgregarPermiso(permisos deembarque)
permiso_id pais_dst
MeacutetodoAgregarIVA(subtotales de aliacutecuotade iva)
iva_id base_imp importe iva_id base_imp importe
MeacutetodoAgregarTributo(otros impuestos)
tributo_id ds base_imp alicimporte tributo_id ds base_imp alic importe
Meacutetodo para consultarpuntos de ventahabilitados
ParamGetPtosVentaConsultarPuntosVentaCAEConsultarPuntosVentaCAEA
Meacutetodo pararecuperar un
CompConsultar GetCMP GetCMP ConsultarComprobante
Tabla comparativa Webservices 15
comprobanteMeacutetodo para obteneruacutetlimo nordmcomprobante
RecuperaLastCMP CompUltimoAutorizado GetLastCMP GetLastCMP CompUltimoAutorizado
Meacutetodos para obtenertablas de paraacutemetros
ParamGetTiposCbteParamGetTiposConceptoParamGetTiposDocParamGetTiposIvaParamGetTiposMonedasParamGetTiposOpcionalParamGetTiposTributosParamGetCotizacionParamGetPtosVenta
GetParamMonGetParamTipoCbteGetParamUMedGetParamTipoIVAGetParamNCM
GetParamMonGetParamTipoCbteGetParamTipoExpoGetParamIdiomasGetParamUMedGetParamIncotermsGetParamDstPaisGetParamDstCUITGetParamCtz
ConsultarComprobanteConsultarTiposComprobanteConsultarTiposDocumentoConsultarAlicuotasIVAConsultarCondicionesIVAConsultarMonedasConsultarUnidadesMedidaConsultarTiposTributoConsultarCotizacionMoneda
SEUO
Notas Generales
Convencioacuten de nombres si bien por transparencia se tratoacute de utilizar los nombres de los meacutetodosdefinidos en las especificaciones teacutecnicas se han cambiado los nombres de paraacutemetros y meacutetodosauxiliares para simplificar y unificar las interfaces manteniendo cierta coherencia entre los distintoswebservices por lo que algunas denominaciones internas pueden variar respecto a lasespecificaciones teacutecnicas de AFIP
bull
Esta tabla contiene un resumen de las consideraciones generales revisar la normativa vigenteespecificaciones y documentacioacuten teacutecnica actualizada para contemplar los casos particulares Ademaacutesse respetan las descripciones de servicios (WSDL) por ej si bien AFIP publica la especificacioacutenteacutecnica RG 2485 - Manual para el desarrollador V25 el webservice sigue siendo WSFEv1 ver RG 2485 - WSFEV1 - Manual para el desarrollador V26 RG 2904 - WSMTXCA - Manual para elDesarrollador - V02 RG 2758 - wsfex - Manual del desarrollador - V011 WSBFEV1 BonosFiscales Electroacutenicos Manual para el desarrollador V11
bull
Todas las facturas generadas en PDF o formatos similares pueden incluir el detalle de las operaciones(artiacuteculos coacutedigos descripcioacuten precio unitario etc) independientemente de lo que obligue ainformar AFIP en cada webservice No se podriacutea optar por utilizar el WSMTXCA (con detalleRG2904) si no ha recibido notificacioacuten por juez administrativo de AFIP en general corresponde elWSFEv1 (sin detalle RG2485 etal) para la mayoriacutea de los contribuyentes Para emitir facturas conCAEA (coacutedigo de autorizacioacuten electroacutenico anticipado) se deben cumplir ciertas condiciones(cantidad miacutenima de facturas por mes) en general solo aplicable a Auto-Impresores y GrandesContribuyentes
bull
La numeracioacuten de los comprobantes comienza de 1 por cada punto de venta y tipo de comprobante(no se comparten talonarios como con la facturacioacuten tradicional) Incluso cada webservicegeneralmente requiere dar de alta un punto de venta exclusivo No se puede continuar la numeracioacutenprevia ni de otro webservice
bull
La fecha de los comprobantes no puede ser anterior al uacuteltimo emitido pero generalmente se puedeautorizar facturas con fecha entre 5 a 10 diacuteas en el pasado o en el futuro por contingencias(dependiendo del webservice y si es servicios o productos) Ver meacutetodo de consultas y recupero decomprobantes No se podraacute emitir comprobantes antes de la fecha indicada en el formulario deEmpadronamiento (por ej si se eligioacute el inicio en Julio2015 no se pueden emitir facturas con fechade junio)
bull
En caso de inoperatividad del servidor de AFIP se deberiacutea emitir facturas tradicionales y presentar unformulario multinota en la agencia indicando las facturas realizadas manualmente y dejandoconstancia del motivo Para maacutes informacioacuten ver RG2485 Art 33
bull
Notas Generales 16
Se debe confirmar los temas de normativaslegislacioacuten con un Contador Puacuteblico Nacional debidamentehabilitado y con experiencia en el tema
Disclaimer - Aviso Legal
Toda informacioacuten es proporcionada a Titulo Informativo El programa es software libre liberado bajo licenciaGPLv3 y se entrega como estaacute sin garantiacuteas expliacutecitas ni implicitas de ninguacuten tipo incluyendo sin limitacioacutenpeacuterdida de ganancias interrupcioacuten de negocios peacuterdida de programas u otros datos en sistemas decomputacioacuten o cualquier otro reclamo Al usarlo acepta hacerlo bajo su propia responsabilidad conociendo lanormativa y reglamentaciones existentes
Instalacioacuten
Descargas
Bajar y Ejecutar el instalador
Importante ver Actualizaciones para novedades importantes instaladores y cambios recientes
Recomendado Instalador unificado (conteniendo la interfaz para todos los servicios web para homologacioacuten-solo evaluacioacutenpruebas-)
Windows 32 bits
PyAfipWs-272171-32bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSFEv1 WSMTXCAWSFEXv1WSBFEv1 WSCT WSFECred WSCDC WSCOC PyFEPDF PYI25 y PYEMAILWS_SR_Padron COT IIBB Arba Granos -WSLPG y WSCTG- Pecuarios- WSLSP WSLUMWSLTV Trazabilidad Medicamentos Trazabilidad de Productos Meacutedicos Trazabilidad dePrecursores Quiacutenicos Trazabilidad de Productos Agroquiacutemicos Fitosanitarios Trazabilidad deProductos Veterinarios) Recomendado para desarrolloevaluacioacuten
bull
PyAfipWs-271949-32bit+wsaa_211c+wsfev1_119a-typelibexe Instalador de desarrolloactualizado -para referenciar viacutea libreriacutea de tipos- (TypeLib) Soacutelo incluye WSAA y WSFEv1
bull
Windows 64 bits
PyAfipWs-271872-64bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSBFE WSFEv1 WSFEXv1WSMTXCA PyFEPDF PYI25 y PYEMAIL Granos -WSLPG y WSCTGv3- COT IIBB ArbaTrazabilidad Medicamentos y Agroquimicos) Recomendado para desarrolloevaluacioacuten
bull
Consultar por otros webservices y sistemas operativos
IMPORTANTE Los instaladores publicados son solo para evaluacioacuten por lo que pueden no estaractualizados con los uacuteltimos ajustes en los servidores yo ejemplos Ver instructivo Instalacioacuten Codigo Fuente( video explicativo) o consultar por soporte comercial
Los ejemplos completos del uso de la interfase en Visual Basic Visual Foxpro y otros lenguajes se puededescargar desde
Disclaimer - Aviso Legal 17
GitHub (repositorio actualizado) o Google Code (histoacuterico)bull
Para guias iniciales ver base de datos con ejemplos completos de WSFEv1 y WSFEX (implementacioacuten dereferencia)
factura_electronicamdb MS Access 2000 o sup programado en VBAbull pyafipwsmdb MS Access 97 programado en VBA (nuevo con FCE)bull pyafipws2kmdb MS Access 2000 o sup programado en VBA (versioacuten anterior)bull
IMPORTANTE las uacuteltimas versiones incorporan nuevas funcionalidades y deben ser testeadas con susistema antes de ser instaladas en produccioacuten De encontrar problemas de instalacioacuten (por causas del sistemaoperativo o similar) que impidan crear el objeto o conectarse al webservice se recomienda utilizar lasversiones anteriores o registrar manualmente los componentes de forma autoacutenoma con --register VerInstalacioacuten Manual para maacutes detalles Recordamos que este tipo de incidentes pueden ser consultados con elsoporte comercial o soporte comunitario ver Maacutes Informacioacuten
Incidencias Conocidas Dado que existen varias versiones dependiendo de que sistema operativo se utiliceen general no deberiacutea haber problemas de instalacioacuten pero puede haber cuestiones de permisos de acceso poliacuteticas de seguridad en algunos entornos Windows (por ej Permission Denied) En esos casosrecomendamos instalarlo como Administrador o darle permisos de modificacioacuten (Propiedades Solapa deSeguridad) al usuario del sistema operativo en la carpeta del componente (generalmente CArchivos deprogramaPyAfipWs o Program Files) Ver Permisos en Windows para mayor informacioacuten
Se recomienda desinstalar cualquier versioacuten anterior y borrar la carpeta de instalacioacuten para evitar archivostemporales residentes o temas similares
Instalacioacuten Manual Avanzada
Para la interfaz COM cada webservice tiene su DLL o EXE que puede ser instalado manualmente (norecomendado en general ya que no verifica si el archivo esta en uso no desinstala automaacuteticamente la versioacutenanterior entre otros temas que pudieran surgir)
Instalacioacuten manual pyafipwsexe --register o utlizar regsvr32 pyafipwsdllbull Desinstalacioacuten manual pyafipwsexe --unregister o utlizar regsvr32 upyafipwsdll
bull
El proceso es similar para instalar la interfaz a otros webservices (cambiando pyafipws por wsfev1wsfexv1 etc seguacuten corresponda por ej wsfexv1exe --register) Tambieacuten se puede registrardirectamente con python python wsaapy --register
Ambos comandos de instalacioacuten son similares pero instalan la interfaz de manera distinta
Embebida (InProcServer) registrando la biblioteca DLL con regsvr32 cuando se invoque a lainterfaz se carga en el mismo proceso del programa principal
bull
Independiente (LocalServer) ejecutando el programa EXE con --register cuando se invoque a lainterfaz se crea un nuevo proceso externo al programa principal (se veraacute el ejecutable por ej en eladministrador de tareas)
bull
NOTA solo es necesario registrar el EXE o la DLL (no ambas) En general es conveniente registrar las DLLpara que se cargue como una libreriacutea compartida embebida (InProcServer) y evitar temas de
Descargas 18
permisosfirewall ya que el EXE registra un proceso independiente (LocalServer) con sus implicancias(pueden surgir temas de permisosfirewall en ciertos sistemas operativos pero se ejecuta independientementeeliminando inconvenientes de dependencias y errores de carga)
Instalacioacuten Silenciosa (Desatendida)
Si bien el instalador muestra un asistente para la instalacioacuten (seleccioacuten del idioma licencia y directorioprogreso) es posible instalarlo sin intervencioacuten del usuario en segundo plano sin mostrar pantalla algunacon
instalador-PyAfipWs-125c-homoexe S D=CPyAfipWS
Las opciones son
S indica instalacioacuten silenciosabull D indica el directorio de instalacioacutenbull
Guiacutea de Instalacioacuten
La interfase se instala automaacuteticamente en CArchivos de Programa en el directorio elegido en elsegundo paso de instalacioacuten como se describe a continuacioacuten
Firma Digital (Editor Comprobado)
Como paso previo de seguridad al ejecutar el instalador verificar que el mismo haya sido firmado pornosotros debiendo aparecer
Editor Comprobado Sistemas Agiles (Mariano Reingart)bull
Consultar en caso de no comprobarse (o mencionar Editor Desconocido) ya que no seriacutea un instaladorcompilado originalmente por nosotros sin alteraciones
Paso 1 Seleccionar idioma
Idiomas disponibles I
Spanish espantildeol (predeterminado)bull English ingleacutesbull
Paso 2 Licencia
Para utilizar el software debe leer y aceptar la licencia
Paso 3 Direcorio de instalacioacuten
De manera predeterminada la interfaz se instalaraacute en una carpeta bajo el directorio estaacutendard de windows (porej CArchivos de Programa o CProgram Files) Se recomienda instalarla directamente en
Instalacioacuten Manual Avanzada 19
el directorio raiz (por ejCPYAFIPWS) para simplificar el acceso a las herramientas por linea de comandos
Paso 3 Finalizar instalacioacuten
Por uacuteltimo el instalador realizaraacute la instalacioacuten
Desinstalar versiones anterioresbull Crear el directorio de destinobull Extraer y copiar los archivosbull Crear desinstaladorbull Copiar configuracioacuten (RECEINI si corresponde)bull Registrar DLLbull
Puede ver el avance y estado final presionando el botoacuten Ver Detalles
Referenciar TypeLib
Ciertos instaladores (-typelib) incluyen una libreriacutea de tipos que es posible referenciar por ej en VB
Importante En general no es necesario referenciar el componente Invocando CreateObject deberiacuteafuncionar y devolveriacutea el objeto dinaacutemico en la mayoriacutea de los lenguajes de programacioacuten (VB VFP etc)
Maacutes informacioacuten
Soporte Comercial (asesoramiento inicial sin cargo de cortesiacutea -limitado y sin compromisos-)Web httpwwwsistemasagilescomartracwikiPyAfipWsdiams Por email facturaelectronicasistemasagilescomardiams Telefoacutenicamente (011) 4450-0716 y (011) 15-3048-921diams
bull
Soporte comunitario (gratuito)Sitio del proyecto httpwwwpyafipwscomardiams Grupo de noticiasdiscusiones httpgroupsgooglecomgrouppyafipwsdiams Coacutedigo Fuente httpsgithubcomreingartpyafipws (actual) y httpcodegooglecomppyafipws (histoacuterico)
diams
Incidencias httpsgithubcomreingartpyafipwsissuesdiams
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA)
Este servicio es necesario para acceder al resto de los servicios de negocios (ej Factura Electroacutenica) ofrecidospor la AFIP
Se debe generar un Ticket de Requerimiento de Acceso (TRA) firmarlo criptograacuteficamente (generando unmensaje CMS) que es enviacutea al servicio web para obtener un Ticket de Acceso (TA)
Esta interfase crea el mensaje en XML lo firma criptograacuteficamente y lo codifica en base-64 como lo requierela AFIP por lo que en general no es necesario realizar ninguno de estos pasos
Paso 3 Direcorio de instalacioacuten 20
Para maacutes informacioacuten oficial ver especificaciones teacutecnicas del WSAA y Arquitectura WS en el sitio de laAFIP
Importante es requerido tramitar los certificados para poder operar este webservice Para maacutes informacioacutenver Instructivos sobre Certificados
Objeto
El objeto COM se crea invocando a CreateObject(WSAA)bull
Meacutetodos
CreateTRA(service ttl) recibe el nombre del servicio (wsfe wsbfe wsfex wsctg etc) y eltiempo de vida (en segundos por defecto 2400) y devuelve un ticket de requerimiento de acceso(string con formato xml) Se puede revisar o modificar el xml devuelto (en general no es necesario)
bull
SignTRA(tra certificado clave_ privada passphrase) recibe el ticket derequerimiento de acceso (string con formato xml creado previamente) y las ubicaciones delcertificado y clave privada (o el contenido de los mismos) Firma el ticket y devuelve el mensaje CMS(string con formato xml) Importante El paraacutemetro opcional passphrase permite protejer la claveprivada por contrasentildea (Disponible a partir de la versioacuten 208) Tambieacuten se puede pasar el contenidode los archivos (como string) en certificado y clave_ privada (pudiendo ser guardados enla base de datos u otro tipo de almacenamiento)
bull
CallWSAA(cms url_webservice) Recibe el mensaje CMS (string con formato xml) y laURL del webservice Se conecta con el servidor remoto ejecuta el meacutetodo remoto LoginCMS ydevuelve el Ticket de Acceso (TA string con formato xml) generado por la AFIP Si no se especifiacutecaurl se utiliza servidores de homologacioacuten
bull
Conectar(cache url_webservice_wsdl proxy wrapper cacert) Nuevo Establece la conexioacuten con el servidor remoto recibe el directorio de archivos temporales la URL delWSDL (descripcioacuten del webservice) y proxy en formato usuarioclaveservidorpuerto Si no seespecifiacuteca url se utiliza servidores de homologacioacuten Parametros adicionales optativos wrapper es lalibreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor (CA)
bull
LoginCMS(cms) Nuevo Recibe el mensaje CMS (string con formato xml) ejecuta el meacutetodoremoto LoginCMS y devuelve el Ticket de Acceso (TA string con formato xml) generado por laAFIP Debe conectarse previamente con Conectar Establece los atributos Token Sign
bull
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido por defecto el ticket deacceso)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Expirado(fecha) Nuevo recibe una fecha (por defecto la fecha de expiracioacuten del uacuteltimo ticketde acceso generado) y verifica contra el reloj del equipo si dicha fecha ha expirado (en cuyo casodevuelve verdadero)
bull
Autenticar(service crt key [wsdl proxy wrapper cacert cachedebug]) Nuevo Meacutetodo unificado para obtener el ticket de acceso Almacena temporalmente elticket de acceso en un archivo en el directorio cache (debe tener permisos de escritura en esedirectorio) y automaacuteticamente lo reutiliza o solicita uno nuevo en caso de que no haya vencidoDisponible a partir de la versioacuten 207
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA) 21
Se recomienda comenzar a utilizar Conectar y LoginCMS en reemplazo de CallWSAA ya que los nuevosmeacutetodos tienen mejor manejo de errores pueden reutilizar la conexioacuten etc
Meacutetodos para Certificados
Los meacutetodos adicionales para el manejo de certificado permiten automatizar el procesamiento y generarpedidos de certificado directamente con este componente sin necesidad de utilizar comandos externosNuevo Disponible a partir de la versioacuten 210
AnalizarCertificado(crt) Carga un certificado digital y extrae los campos maacutesimportantes (establece propiedades Identidad Caducidad Emisor)
bull
CrearClavePrivada(self filename=privadakey key_length=2048pub_exponent=0x10001 passphrase=) Crea una clave privada (private key) necesariapara generar un certificado Queda referenciada internamente para poder crear el CSR (ver siguientemeacutetodo) por lo que las dos operaciones deben hacerse en la misma instancia Puede utilizarse unacontrasentildea (passphrase) para mayor seguridad (especialmente si la clave privada va a alojarse enuna carpeta compartida)
bull
CrearPedidoCertificado(self cuit= empresa=nombre=pyafipwsfilename=empresacsr) Crear un certificate signing request(X509 CSR) - pedido de certificado a gestionar por Clave Fiscal de AFIP para obtener el crt Se debeindicar el CUIT del representante nombre de la empresa (tal cual aparece en la constancia deinscripcioacuten) nombre de fantasia alias del certificado (identificando punto de venta sistema defacturacioacuten etc) y nombre del archivo a generar (recomendable ruta absoluta a una carpeta conpermisos de escritura)
bull
wsaaAnalizarCertificado(reingartcrt)print wsaaIdentidadprint wsaaCaducidad (Fecha de vencimiento)print wsaaEmisorprint wsaaCertX509
Por linea de comando puede ejecutarse el moacutedulo wsaapy con el meacutetodo --analizar
WSAA_cliexe --analizar reingartcrt reingartkey
Atributos
Token el el coacutedigo de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Sign el la firma de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Version versioacuten de la interfase (ej 16)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Identidad Caducidad Emisor CertX509 Nuevo campos del certificado analizado(actualizacioacuten 210 o posterior)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Meacutetodos 22
Ejemplo
Dim WSAA As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA)service = wsfe servicio a accederttl = 2400 tiempo de vida en segundostra = WSAACreateTRA(service ttl) Especificar la ubicacion de los archivos certificado y clavesPath = CurDir() + Certificado = reingartcrt certificado es el firmado por la afipClavePrivada = reingartkey clave privada usada para crear el cert
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
WSAALanzarExcepciones = False revisar Excepcion para controlar errores
Llamar al web service para autenticar anteriormente ta = WSAACallWSAA(cms httpswsaaafipgovarwsservicesLoginCms) Hologacioacuten ahora cache = Directorio para archivos temporales (dejar en blanco para usar predeterminado)wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl homologacioacutenproxy = usar usuarioclaveservidorpuertook = WSAAConectar(cache wsdl proxy)ta = WSAALoginCMS(cms) otener ticket de acceso
If WSAAExcepcion ltgt Then MsgBox WSAAExcepcion vbCritical ExcepcioacutenEnd If
Obtener Token y Sign de autorizacioacutenToken = WSAATokenSign = WSAASign
El Ticket de Acceso contiene el Token (coacutedigo) y Sign (firma) son los elementos que se utilizan en los otrosservicios web para lograr acceso a los mismos
Estos datos se pueden usar por un periacuteodo de tiempo (40 minutos modificable ver Reutilizacioacuten de Ticket deAcceso) siendo necesario volver a invocar el WSAA solo al finalizar este periacuteodo para obtener nuevos Tokeny Sign
Errores
El WSAA informa errores alfanumeacutericos (ErrNumber vbObjectError = 0) debiendo verificar la descripcioacuten(ErrDescription) Entre ellos los maacutes comunes son
cmscertexpired cmscertinvalid cmscertuntrusted El certificado no fue firmado por la AFIPexpiroacute es invaacutelido no se confiacutea en su emisor o no coincide la fuente Se debe revisar o emitircorrectamente los certificados Ver traacutemite de Generacioacuten
bull
xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid El tiempo degeneracioacutenexpiracioacuten es invaacutelido Debe sincronizar relojes con el servidor de la AFIP En Windows
bull
Ejemplo 23
propiedades del reloj habilitar Hora de Internet ingresar timeafipgovarwsnunavailable wsaaunavailable servicio no disponible momentaacuteneamentebull coenotAuthorized Computador no autorizado a acceder los servicios de AFIP Ver traacutemite deAsociacioacuten
bull
cmscertuntrusted Certificado no emitido por AC de confianza Revisar URL para ambiente correcto(produccioacutenhomologacioacuten) y Comprobacioacuten de Autenticacioacuten
bull
wsnnotFound Servicio informado inexistente se debe crear el ticket para un servicio vaacutelido (wsfewsfex etc)
bull
coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (verreutilizacioacuten del ticket de acceso abajo)
bull
Para maacutes errores frecuentes ver Falla SOAP WSAA
Reutilizacioacuten de Ticket de Acceso
Ante problemas de timeout y java socket read failed al intentar solicitar ticket de acceso (WSAA) ons1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (en generalpor sobrecarga o limitacioacuten de AFIP) es posible mitigar el tema reusando un ticket de acceso (token y sign)por hasta 12 hs (40 minutos por defecto) estableciendo el tiempo de vida del ticket pasandolo en el segundoparaacutemetro de CreateTRA (ttl en segundos en este manual esta documentado en secciones previas)
Por ej para un tiempo de vida de 10 hs (103600 segundos valor recomendado para evitar problemas desincronizacioacuten de relojes)
tra = WSAACreateTRA(wsfe 36000)
Luego de solicitar el ticket de acceso el Token y Sign puede ser usado por el periacuteodo especificado (dichosvalores pueden almacenarse en memoria en un archivo o base de datos etc)
Importante se puede guardar WSAAToken y WSAASign en una variable global y luego reutilizarlocada vez que se genera una factura
luego de llamara WSAALoginCMS o WSAACallWSAA o WSAAAutenticar
token = WSAATokensign = WSAASign
guardar token y sign en la base de datos archivo o una variable global
antes de llamar a WSFEv1CAESolicitar WSFEXv1Authorize o similar
WSFEv1Token = tokenWSFEv1Sign = sign
En general no es necesario verificar la fecha del ticket de acceso ya que en general es vaacutelido por 12 horas
Igualmente desde las versiones actualizadas de WSAA (202 o superior) es posible llamar al meacutetodoWSAAExpirado() antes de utilizar el ticket de acceso y este devolveraacute Verdadero si el ticket de accesosigue siendo vaacutelido (dada la fecha del reloj del equipo) o Falso si ha vencido su plazo y debe solicitarse unnuevo ticket de acceso
Errores 24
Por ejemplo luego de obtener el Token y Sign (ya sea por CallWSAA o LoginCMS) obtener y guardar lafecha de expiracioacuten
expiracion = WSAAObtenerTagXml(expirationTime)
Luego antes de usar el Token y Sign (por ej antes de llamar a WSFEv1 WSFEX etc) preguntar si el TA esvaacutelido (no ha expirado)
expiro = WSAAExpirado(expiracion)
Si expiro es True se debe generar otro ticket de acceso porque ha vencido su validez (con este meacutetodo sepuede guardar y verificar independientemente la fecha de expiracioacuten por cada servicio a usar wsfe wsfexwsbfe wsmtxca etc)
Si se comparte el certificado entre distintas maacutequinas o programas debe compartirse el ticket de acceso (porej guardandolo en un archivo o base de datos) y realizar esta verificacioacuten en cada instancia
Ejemplo completo en
reusar_ticket_accesobas (VB) y reusar_ticket_acceso_avanzadoprg (VFP) maacutes avanzadoguardando el TA en un archivo (y poder compartirlo por red o entre varios programas)
bull
reusar_ticket_accesoprg (VFP) y reusar_ticket_acceso_simplebas (VB) simplificado usando el TAen memoria
bull
Nota No es necesario guardar el ticket de acceso completo en un archivo para reutilizarlo Este ejemplo esuacutetil si se debe compartir el ticket entre diferentes programas u equipos en una red Si se usa en un soloprograma y este permanece abierto se puede mantener el valor del Token y Sign directamente en memoria(por ej en una variable) y reusarlo por hasta 12 hs (generalmente solicitandolo al iniciar el programa ymanteniendolo por una jornada de trabajo completa) Tambieacuten se podriacutea almacenar el valor de Token ySign en una base de datos o similar
Ejemplo simple reutilizacioacuten de TA
Ejemplo completo de reuso (usando el ticket de acceso en memoria)
Function Autenticar(TA as String = ) as String Procedimiento para autenticar con AFIP y reutilizar el ticket de acceso Llamar antes de utilizar WSAAToken y WSAASign (WSAA debe estar definido a nivel de moacutedulo)Dim ok expiracion solicitar token sign
cargar ticket de acceso previo (si no se mantiene WSAA instanciado en memoria)If TA ltgt Then
ok = WSAAAnalizarXml(TA)End If
revisar si el ticket es vaacutelido y no ha expirado expiracion = WSAAObtenerTagXml(expirationTime) DebugPrint Fecha Expiracion ticket expiracion
If IsNull(expiracion) Then solicitar = True solicitud inicial
Else solicitar = WSAAExpirado(expiracion) chequear solicitud previa
End If
Reutilizacioacuten de Ticket de Acceso 25
If solicitar Then Generar un Ticket de Requerimiento de Acceso (TRA)
tra = WSAACreateTRA()
uso la ruta a la carpeta de instalaciograven con los certificados de prueba ruta = WSAAInstallDir + DebugPrint ruta ruta
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra ruta + reingartcrt ruta + reingartkey) Cert Demo
ok = WSAAConectar( httpswsaahomoafipgovarwsservicesLoginCms) Homologacion
Llamar al web service para autenticar TA = WSAALoginCMS(cms)
Else DebugPrint no expirado Reutilizando
End If DebugPrint WSAAObtenerTagXml(destination)
Obtener las credenciales del ticket de acceso (desde el XML por si no se conserva el objeto WSAA) token = WSAAObtenerTagXml(token) sign = WSAAObtenerTagXml(sign)
Al retornar se puede utilizar token y sign para WSFEv1 o similar Devuelvo el ticket de acceso (RETURN) para que el programa principal lo almacene si es necesario
Autenticar = TAEnd Function
Importante en este caso WSAA debe ser un objeto global y persistente (al menos por lo que dure elprograma en produccioacuten) no se debe instanciar por cada llamada a Autorizar de lo contrario se perderaacuten elToken y Sign no reutilizando el ticket de acceso Si esto no es posible se debe persistir el Ticket de Accesoen un archivo o base de datos compartida
Ejemplo avanzado reutilizacioacuten de TA
Ejemplo completo de reuso (almacenando el ticket de acceso en un archivo tambieacuten podriacutea usarse una tablaen base de datos sesioacuten u otro medio durable)
inicializo las variablesToken = Sign =
busco un ticket de acceso previamente almacenadoIf Dir(taxml) ltgt Then
leo el xml almacenado del archivo Open taxml For Input As 1 Line Input 1 ta_xml Close 1
analizo el ticket de acceso previo ok = WSAAAnalizarXml(ta_xml)
If Not WSAAExpirado() Then puedo reusar el ticket de acceso
Token = WSAAObtenerTagXml(token) Sign = WSAAObtenerTagXml(sign)
End IfEnd If
Si no reuso un ticket de acceso solicito uno nuevoIf Token = Or Sign = Then
Ejemplo simple reutilizacioacuten de TA 26
Generar un Ticket de Requerimiento de Acceso (TRA) tra = WSAACreateTRA(wsfe 43200) 360012hs
Especificar la ubicacion de los archivos certificado y clave privada cert = reingartcrt certificado de prueba clave = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra cert clave)
If cms ltgt Then Llamar al web service para autenticar (cambiar URL para produccion)
wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl ok = WSAAConectar( wsdl) ta_xml = WSAALoginCMS(cms)
If ta_xml ltgt Then guardo el ticket de acceso en el archivo
Open taxml For Output As 1 Print 1 ta_xml Close 1
End If Token = WSAAToken Sign = WSAASign
End If reviso que no haya errores
DebugPrint Excepcion WSAAExcepcionIf WSAAExcepcion ltgt Then
DebugPrint WSAATracebackEnd If
End If
Imprimir los datos del ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint Token + TokenDebugPrint Sign + Sign
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA
Importante A partir de la actualizacioacuten 207 es posible utilizar el meacutetodo unificado Autenticar (queautomaacuteticamente contempla el tema de reutilizacioacuten al guardar el Ticket de Acceso en un archivo temporal enel directorio cache) en conjuncioacuten con SetTicketAcceso
Crear la instancia (usar CreateObject en VB y similares)wsaa = WSAA()
servidor de AFIP para homologacioacuten (cambiar para produccioacuten)wsaa_url = httpswsaahomoafipgovarwsservicesLoginCmswsdl
parametros opcionalesproxy = solo usar si hay servidor intermediowrapper = httplib2 (default) pycurl (depende proxy)cacert = confafip_ca_infocrt autoridades certificantes (servidores)cache = directorio archivos temporales (verificar permisos)debug = False depuracioacuten interna (en VB es palabra reservada usar otro nombre)
obtener el TA para pruebasta = wsaaAutenticar(wsfe reingartcrt reingartkey wsaa_url proxy wrapper cacert cache debug)
utilizar las credencialesprint wsaaTokenprint wsaaSign
establecer Ticket de Acceso en un solo paso (Nuevo meacutetodo)wsfev1SetTicketAcceso(ta)
Ejemplo avanzado reutilizacioacuten de TA 27
Nota dependiendo del sistema operativo deberaacute conceder permisos de acceso de escritura en la carpeta cachepara poder almacenar el ticket de acceso Tambieacuten es posible pasar el 8vo paraacutemetro cache de Autenticar conotro directorio para los archivos temporales Ver Permisos en Windows para maacutes informacioacuten
Obtencioacuten de Atributos Avanzados WSAA
En versiones recientes (204a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosdel ticket de acceso (uacutetiles para depuracioacuten y solucioacuten de errores)
Origen (Source) WSAAObtenerTagXml(source)bull Destino (Destination) WSAAObtenerTagXml(destination)bull ID Uacutenico WSAAObtenerTagXml(uniqueId)bull Fecha de Generacioacuten WSAAObtenerTagXml(generationTime)bull Fecha de Expiracioacuten WSAAObtenerTagXml(expirationTime)bull
Si ha ocurrido error (llamar previamente a WSAAAnalizarXml(XmlResponse) para analizar larespuesta)
Codigo de Fallo WSAAObtenerTagXml(faultcode)bull Mensaje de Fallo WSAAObtenerTagXml(faultstring)bull Servidor WSAAObtenerTagXml(ns3hostname)bull
Estos datos son uacutetiles para determinar problemas con el certificado ver Comprobacioacuten de AutenticacioacutenWSAA
Servicio Web de Factura Electroacutenica (WSFE)
Este servicio es ofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFE en el sitio de la AFIP
httpwswhomoafipgovarfiscaldocsWSFEWSFE-ManualParaElDesarrollador-090317pdf
Objeto
El objeto COM se crea invocando a CreateObject(WSFE)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA 28
UltNro() recuperar el uacuteltimo nuacutemero de transaccioacuten (id) Devuelve el uacuteltimo valor de secuenciautilizado al pedir autorizacioacuten Uso opcional
bull
Aut(id presta_serv tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto impto_liqimpto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago[fecha_serv_desde] [fecha_serv_hasta]) autoriza la emisioacuten de factura electroacutenicarecibe el id de secuencia (recuperado por UltNro) presta_serv en 1 si se esta facturando servicios (eneste caso es obligatorio el uso de la fecha de servicio desde y hasta) los datos de la factura a emitir ydevuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) Ver ejemplo para el detalle de losparaacutemetros
bull
RecuperaLastCMP(punto_venta tipo_comprobante) recibe el punto de venta y tipode comprobante (stringsenteros) devuelve el uacuteltimo nuacutemero de comprobante autorizado Usoopcional
bull
RecuperaQty() recupera cantidad maacutexima de registros de detalle (por el momento no es demayor utilidad ya que por simplicidad se enviacutea 1 registro de detalle por autorizacioacuten) Uso opcional
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Motivo Reproceso valores complementarios que retorna Autbull CbtDesde CbtHasta FechaCbte` nuacutemeros y fecha de comprobante autorizado queretorna Aut
bull
ImpTotal ImpNeto ImptoLiq` importes total neto e IVA que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 16)bull
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a realizar (ej Factura A solopara tipo_doc = 80 CUIT Facturas B por lote hasta $1000- etc)
bull
Ver especificaciones teacutecnicas del WSFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Meacutetodos 29
Ejemplo
Autorizar una factura electroacutenica nacional a modo de ejemplo (ficticia)
Crear objeto interface Web Service de Factura Electroacutenica
Set WSFE = CreateObject(WSFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEToken = WSAATokenWSFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSFECuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (servidor de homologacioacuten)ok = WSFEConectar(httpswswhomoafipgovarwsfeserviceasmx)
Llamo a un servicio tonto para obtener el estado (opcional)WSFEDummyDebugPrint appserver status WSFEAppServerStatusDebugPrint dbserver status WSFEDbServerStatusDebugPrint authserver status WSFEAuthServerStatus
Recupera cantidad maacutexima de registros (opcional)qty = WSFERecuperarQty()
Recupera uacuteltimo nuacutemero de secuencia IDLastId = WSFEUltNro()
Recupero uacuteltimo nuacutemero de comprobante (opcional)tipo_cbte = 1 punto_vta = 1LastCBTE = WSFERecuperaLastCMP(punto_vta tipo_cbte)
Establezco los valores de la factura o lote a autorizar 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000fecha_cbte = Fecha fecha_venc_pago = Fecha Fechas del periacuteodo del servicio facturado (solo si presta_serv = 1)fecha_serv_desde = Fecha fecha_serv_hasta = Fecha
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEAut(id presta_serv _ tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ impto_liq impto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desde fecha_serv_hasta) solo pasar si presta_serv=0MsgBox CAE amp cae amp Vencimiento amp WSFEVencimientoExit Sub
ManejoError Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipMsgBox ErrDescription vbCritical + vbRetryCancel _
Error amp (ErrNumber - vbObjectError) amp en amp ErrSource
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz (ver aclaracioacuten)
Ejemplo 30
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE)
Se debe llamar al meacutetodo Aut con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a UltNro puede utilizarse un dato local secuencial
bull
presta_serv 0 o 1 para indicar si es una factura de serviciosbull tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (1 Factura A 6 Factura B etc)bull punto_vta Nordm de punto de venta (debe estar autorizado)bull cbt_desde cbt_hasta Nordm de comprobante (si es un solo comprobante repetir Nordm)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 5 diacuteas)bull fecha_venc_pago Fecha liacutemite de vencimiento para el pago de la facturabull fecha_serv_desde fecha_serv_hasta Fechas del periacuteodo de servicios prestadobull
Ver todos los tipos de comprobante httpwswhomoafipgovarfiscaldocsWSFECodCpbtetxt
Ver todos los tipos de documentos httpwswhomoafipgovarfiscaldocsWSFECodDocIDtxt
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEResultado =A (Aceptado) y WSFEVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o los servidores de la AFIP no funcionan o nodevuelven la respuesta esperada
bull
cae = NULL El servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEResultado = R (Rechazado) y WSFEMotivo con los diversos motivos de rechazoproporcionados por el webservice
WSFEMotivo = 00 o NULL no hay error (solo como referencia)diams WSFEMotivo = 01 CUIT informada no es RIdiams WSFEMotivo = 02 CUIT no autorizada a facturar electroacutenicamentediams WSFEMotivo = 03 CUIT registra inconvenientes con domicilio fiscaldiams WSFEMotivo = 04 Punto de venta no se encuentra declaradodiams WSFEMotivo = 05 Fecha del comprobante incorrectadiams WSFEMotivo = 06 CUIT no puede emitir comprobantes clase Adiams WSFEMotivo = 07 para comprobantes clase A debe indicar CUITdiams WSFEMotivo = 08 CUIT informada es invaacutelidadiams WSFEMotivo = 09 CUIT informada no existe en el padroacutendiams WSFEMotivo = 10 CUIT informada no corresponde a un RIdiams WSFEMotivo = 11 el nordm de comprobante no es correlativo o fecha no correspondediams WSFEMotivo = 12 el rango informado se encuentra autorizadodiams WSFEMotivo = 13 LA CUIT INDICADA SE ENCUENTRA COMPRENDIDA EN ELREGIMEN ESTABLECIDO POR LA RESOLUCION GENERAL Ndeg 2177 YO EN ELTITULO I DE LA RESOLUCION GENERAL Ndeg 1361 ART 24 DE LA RG Ndeg 2177-
diams
bull
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE) 31
Para ver la lista completa de coacutedigos de motivos F136 httpwswhomoafipgovarfiscaldocsWSFEF136_MOTIVOStxt
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia En el caso de que la conexioacuten se interrumpa luego de que la AFIP registre la factura y antes deque la informacioacuten del CAE llegue al equipo la uacutenica alternativa es repetir la llamada a Aut con los mismosdatos (incluido el ID original) para obtener el CAE generado anteriormente En ese caso se WSFEReprocesoes S para indicar que el CAE se ha recuperado Por esto es importante guardar el ID o utilizar un dato local
Ver httpwswhomoafipgovarfiscaldocsWSFEWSFE-GuiaAdicionalParaElProgramadorpdf
Servicio Web de Bono Fiscal Electroacutenico (WSBFE)
EL WSBFE (Bonos Fiscales Electroacutenicos) es un Servicio Web de la AFIP para Facturas Electroacutenicas deBienes de Capital correspondiente al Artiacuteculo 3 de la Resolucioacuten General 25572009Este servicio esofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de cada item
A su vez el WSBFE devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva producto seguacuten NCM zonas unidades de medida Estas tablaspueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha devigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia delWSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSBFE en el sitio de la AFIP
httpwwwafipgovarwsWSBFEWSBFE-ManualParaElDesarrolladorpdf
httpwwwafipgovarwsWSBFEWSBFE-GuiaAdicionalParaElProgramadorpdf
La programacioacuten de la interfase WSBFE es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSBFE)bull
Servicio Web de Bono Fiscal Electroacutenico (WSBFE) 32
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(tipo_doc nro_doc zona tipo_cbte punto_vtacbte_nro fecha_cbte imp_total imp_neto impto_liq imp_tot_concimpto_liq_rni imp_op_ex imp_perc imp_iibb imp_perc_munimp_internos imp_moneda_id Imp_moneda_ctz) crea internamente una factura paraluego poder autorizarla recibe los datos de la factura a emitir Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarItem(ncm sec ds qty umed precio bonif iva_idimp_total) agrega internamente un item (linea de factura) a una factura para luego poderautorizarla recibe los datos del item a factura a emitir Ver ejemplo para el detalle de los paraacutemetros
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoIVA() GetParamUMed()GetParamNCM() recupera valores referenciales de coacutedigos de las tablas de paraacutemetros devuelveuna lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde- (verejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpNeto importe neto del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImptoLiq impuesto liquidado (IVA) del comprobante (del comprobante recuperado devuelto porGetCmp)
bull
Meacutetodos 33
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSBFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura de bienes de capital (bono fiscal electroacutenico) a modo de ejemplo (ficticia)
Dim WSAA As Object WSBFE As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSBFEtra = WSAACreateTRA(wsbfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada) Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten Una vez obtenido se puede usar el mismo token y sign por 24 horas
Crear objeto interface Web Service de Factura ElectroacutenicaSet WSBFE = CreateObject(WSBFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSBFEToken = WSAATokenWSBFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSBFECuit = 20267565393
Conectar al Servicio Web de Facturacioacutenok = WSBFEConectar(httpwswhomoafipgovarwsbfeserviceasmx) homologacioacuten
Establezco los valores de la factura a autorizarfecha = 20090530tipo_doc = 80 nro_doc = 23111111113zona = 0 Ver tabla de zonas
Errores 34
tipo_cbte = 1 Ver tabla de tipos de comprobantepunto_vta = 2 cbte_nro = 16fecha_cbte = fechaimp_total = 12100 imp_tot_conc = 000 imp_neto = 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000imp_perc = 000 imp_iibb = 000 imp_perc_mun = 000imp_internos = 000imp_moneda_id = 10 Ver tabla de tipos de monedaImp_moneda_ctz = 10000 cotizacioacuten de la moneda
Creo una factura (internamente no se llama al WebService)ok = WSBFECrearFactura(tipo_doc nro_doc _ zona tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total imp_neto impto_liq _ imp_tot_conc impto_liq_rni imp_op_ex _ imp_perc imp_iibb imp_perc_mun imp_internos _ imp_moneda_id Imp_moneda_ctz)
Agrego un itemncm = 73081000 Ver tabla de coacutedigos habilitados del NCMsec = Coacutedigo de la Secretariacutea (no usado por el momento)ds = Prueba Descripcioacuten completa del artiacuteculo (hasta 4000 car)umed = 1 kg Ver tabla de unidades de medidaqty = 10 cantidadprecio = 1050 precio neto (FacA) precio final (Facuras B)bonif = 500 descuentos (en positivo)iva_id = 5 21 ver tabla aliacutecuota de ivaimp_total = 12100 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSBFEAgregarItem(ncm sec ds qty umed precio bonif iva_id imp_total)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSBFEAuthorize(id)
If cae = Or WSBFEResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyElseIf WSBFEObs ltgt And WSBFEObs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyEnd If
MsgBox Resultado amp WSBFEResultado amp CAE amp cae amp _ Reproceso amp WSBFEReproceso amp _ Obs amp WSBFEObs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)
For Each evento In WSBFEEventosIf evento ltgt 0 Then
MsgBox Evento amp evento vbInformationEnd If
Next
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales del Nomenclador Comuacuten Mercosur habilitados
recupero tabla del nomenclador comuacuten del mercosur
Ejemplo 35
(codigo descripcioacuten (vigencia desde - hasta)) Ej 99999999 (item no incluiacutedo en el Beneficio Fiscal) (20070524 - 20091231)For Each x In WSBFEGetParamNCM() DebugPrint x Next
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSBFE)bull cbt_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull zona_id Zona (seguacuten tabla de paraacutemetros) - Por el momento 0bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull imp_moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull imp_moneda_ctz Cotizacioacuten de la moneda de la facturabull imp_perc Importe de las precepcionesbull imp_iibb Importe de las percepciones de ingresos brutosbull imp_perc_mun Importe de las percepciones municipalesbull imp_internos Importe de los impuestos internosbull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
ncm coacutedigo habilitado seguacuten el Nomenclador Comuacuten del Mercosur (NCM)bull sec coacutedigo de la secretariacutea (no utilizado por el momento pasar )bull ds Descripcioacuten completabull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull bonif Bonificacioacutenbull iva_id Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_total Importe total (incluyendo descuentos e IVA)bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEUltNro puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSBFEResultado =A (Aceptado) y WSBFEVencimiento Sino devuelve
Descripcioacuten de la obtencioacuten de CAE 36
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSBFEObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX)
EL WSFEX es un Servicio Web de la AFIP para Facturas Electroacutenicas de Exportacioacutencorrespondiente a la Resolucioacuten General 27582010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSBFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar los datos de exportacioacutenpermisos comprobantes asociados y el detalle de cada item
A su vez el WSFEX devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
Al igual que el WSBFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda idiomas terminos de comercio exterior paises y cuits unidades de medida etc Estastablas pueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen unafecha de vigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (adiferencia del WSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEX en el sitio de la AFIP
Manual para el desarrolladorpdf (version 0) Informacioacuten importante sobre la operatoriabull Manual para el desarrolladorpdf (version 1) Informacioacuten importante sobre la operatoria ( NuevaVersioacuten)
bull
FacturaElectronicaExportacion Informacioacuten general cambios ejemplos descargas y paraacutemetrosvigentes (puede estar ligeramente desactualizado)
bull
La programacioacuten de la interfase WSFEX es similar a WSBFE se recomienda revisarlo
WSFEX Versioacuten 1 (WSFEXv1)
Seguacuten RG306611 AFIP publicoacute una nueva versioacuten 1 (WSFEXv1) a entrar en vigencia obligatoria el31-12-2011 para maacutes informacioacuten ver Cambios WSFEXv1 respecto a WSFEXv0
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX) 37
Ambos webservices son muy similares por lo que se documenta en esta seccioacuten solo las diferenciasintroducidas
Importante Si bien se mantiene retrocompatibilidad para conectarse al nuevo webservice es necesarioutilizar el objeto WSFEXv1 y usar las nuevas URL
httpswswhomoafipgovarwsfexv1serviceasmxWSDL (homologacioacuten)bull httpsservicios1afipgovarwsfexv1serviceasmxWSDL (producciograven)bull
Aclaracioacuten WSFEXv1 es un nuevo webservice y AFIP ha agregado campos (bonificacioacuten) ha cambiadovarios tipos de datos (en importes cantidad de decimales) ha agregado coacutedigos de tablas de paraacutemetros(unidades de medida) y comprobantes asociados (remitos de tabaco) y ademaacutes realiza nuevas validacionespor lo que recomendamos probar exhaustivamente la interfaz con el desarrollo para exportacioacuten
Ajustes desarrollos de WSFEX a WSFEXv1
Si no utiliza las caracteriacutesticas nuevas es posible utilizar el coacutedigo desarrollado para WSFEX con nuestrainterfaz WSFEXv1
Coacutedigo Anterior (WSFEX)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEX)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar(httpswswhomoafipgovarwsfexserviceasmx) homologacioacuten
Coacutedigo Nuevo (WSFEXv1)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL) homologacioacuten
RECEX vs RECEX1
Por linea de comando tenemos disponible la herramienta RECEX1EXE que reemplaza a RECEXEXE yutiliza praacutecticamente el mismo formato de archivo y campos El nuevo formato esta documentado la seccioacutenRECEX1 - WSFEXv1
Objeto
El objeto COM se crea invocando a CreateObject(WSFEX) para Versioacuten 0 (hasta 30-12-2011)bull El objeto COM se crea invocando a CreateObject(WSFEXv1) para Versioacuten 1 (desde 31-12-2011)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica url se utiliza servidores de homologacioacuten Importante para WSFEXv1 los paraacutemetros soncache url proxy httpwrapper y cacert ver WSFEv1 Nuevo
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
WSFEX Versioacuten 1 (WSFEXv1) 38
CrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte imp_totaltipo_expo permiso_existente dst_cmp cliente cuit_pais_clientedomicilio_cliente id_impositivo moneda_id moneda_ctzobs_comerciales obs forma_pago incoterms idioma_cbteincoterms_ds fecha_pago) crea internamente una factura para luego poder autorizarlarecibe los datos de la factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importantefecha_pago se agrega en WSFEXv1 Modificado
bull
AgregarItem(ncodigo ds qty umed precio imp_total bonif) agregainternamente un item (linea de factura) a una factura para luego poder autorizarla recibe los datos delitem a factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importante bonif se agrega enWSFEXv1 Modificado
bull
AgregarPermiso(id dst) agrega internamente un permiso de exportacioacuten a una factura paraluego poder autorizarla recibe identificacioacuten y paiacutes destino de la mercaderia Ver ejemplo para eldetalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccuit_cbte_asoc) agrega internamente un comprobante asociado a una factura para luego poderautorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de losparaacutemetros Importante cuit_cbte_asoc se agrega en WSFEXv1 Nuevo
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoExpo()GetParamIdiomas() GetParamUMed() GetParamIncoterms()GetParamDstPais() GetParamDstCUIT() recupera valores referenciales de coacutedigos de lastablas de paraacutemetros devuelve una lista de strings con el idcoacutedigo o CUIT y descripcioacuten delparaacutemetro (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
GetParamCtz(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada como paraacutemetrobull GetParamMonConCotizacion(fecha) devuelve la cotizacioacuten consultada de la base de datosaduanera de todas las monedas que posean cotizacioacuten a la fecha indicada Nuevo
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Vencimiento fecha devuelta junto con el CAEbull CbteNro nuacutemero de comprobante (del comprobante autorizado)bull
Meacutetodos 39
FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull Version versioacuten de la interfase (ej 111)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Errores
La interfase procesa los errores WSFEX y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
500 Error interno DB - FEXGetLadt_CMP - get_last problemas internos de los servidores de AFIP(se debe esperar a que lo solucionen)
bull
Operation FEXGetLast_CMP not found in WSDL la URL que se estaacute utilizando no es correcta(verificar URL para el ambiente que se estaacute utilizando)
bull
505 Error general (lockeo) problemas internos de los servidores de AFIP (se debe esperar a que losolucionen)
bull
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSFEX para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura electroacutenica de exportacioacuten a modo de ejemplo (ficticia)
Dim WSAA As Object WSFEX As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEXtra = WSAACreateTRA(wsfex)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service para autenticar (Homologacioacuten)ta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms)
Atributos 40
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1) Setear tocken y sing de autorizacioacuten (pasos previos)WSFEXToken = WSAATokenWSFEXSign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEXCuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (homologacioacuten)ok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEXDummyDebugPrint appserver status WSFEXAppServerStatusDebugPrint dbserver status WSFEXDbServerStatusDebugPrint authserver status WSFEXAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 19 FC Expo (ver tabla de paraacutemetros)punto_vta = 7 Obtengo el uacuteltimo nuacutemero de comprobante y le agrego 1cbte_nro = WSFEXGetLastCMP(tipo_cbte punto_vta) + 1 16fecha_cbte = Format(Date yyyymmdd)tipo_expo = 1 tipo de exportacioacuten (ver tabla de paraacutemetros)permiso_existente = Ndst_cmp = 203 paiacutes destinocliente = Joao Da Silvacuit_pais_cliente = 50000000016domicilio_cliente = Rua 76 km 345 Alagoasid_impositivo = PJ54482221-lmoneda_id = 012 para reales DOL o PES (ver tabla de paraacutemetros)moneda_ctz = 05obs_comerciales = Observaciones comercialesobs = Sin observacionesforma_pago = 30 diasincoterms = FOB (ver tabla de paraacutemetros)idioma_cbte = 1 (ver tabla de paraacutemetros)imp_total = 25000
Creo una factura (internamente no se llama al WebService)ok = WSFEXCrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total tipo_expo permiso_existente dst_cmp _ cliente cuit_pais_cliente domicilio_cliente _ id_impositivo moneda_id moneda_ctz _ obs_comerciales obs forma_pago incoterms _ idioma_cbte incoterms_ds fecha_pago )
Agrego un itemcodigo = PRO1ds = Producto Tipo 1 Exportacion MERCOSUR ISO 9001qty = 2precio = 12500umed = 1 Ver tabla de paraacutemetros (unidades de medida)imp_total = 25000 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSFEXAgregarItem(codigo ds qty umed precio imp_total)
Ejemplo 41
Agrego un permiso (ver manual para el desarrollador)id = 99999AAXX999999Adst = 225 paiacutes destino de la mercaderiaok = WSFEXAgregarPermiso(id dst)
Agrego un comprobante asociado (ver manual para el desarrollador)tipo_cbte_asoc = 19punto_vta_asoc = 2cbte_nro_asoc = 1ok = WSFEXAgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc)
id = 99000000000100 nuacutemero propio de transaccioacuten obtengo el uacuteltimo ID y le adiciono 1 (advertencia evitar overflow y almacenar)id = CStr(CCur(WSFEXGetLastID()) + 1)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEXAuthorize(id)
Verifico que no haya rechazo o advertencia al generar el CAEIf cae = Or WSFEXResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyElseIf WSFEXobs ltgt And WSFEXobs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyEnd If
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato) si es posible almacenar para referencias futurasDebugPrint WSFEXXmlRequest DebugPrint WSFEXXmlResponse
MsgBox Resultado amp WSFEXResultado amp CAE amp cae amp _ Reproceso amp WSFEXReproceso amp _ Obs amp WSFEXobs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEXEventos
If evento ltgt 0 Then MsgBox Evento amp evento vbInformation
End IfNext
Recuperar la facturacae2 = WSFEXGetCMP(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEXFechaCbteDebugPrint Importe Total WSFEXImpTotal
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIPElse MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales de paiacuteses destino habilitados
Ejemplo 42
recupero tabla de coacutedigo de pais destino (codigo descripcioacuten) Ej 203 BRASILFor Each x In WSFEXGetParamDstPais() DebugPrint xNext
Ejemplo para obtener la fecha y cotizacioacuten de una moneda
busco la cotizacioacuten del dolar (ver Parametro Mon) Ej 20100708 3937moneda_id = DOLctz = WSFEXGetParamCtz(moneda_id)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_cbte coacutedigo de comprobante (19 Facturas de Exportacioacuten 20 Nota de Deacutebito por Operacionescon el Exterior 21 Nota de Creacutedito por Operaciones con el Exterior
bull
punto_vta Nordm de punto de venta (debe estar autorizado para WSFEX)bull cbte_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull imp_total Importe total de la facturabull tipo_expo Tipo de exportacion (1 Exportacioacuten definitiva de Bienes 2 Servicios 4 Otros)bull permiso_existente Indica si se posee documento aduanero de exportacioacuten (permiso de embarque)Posibles Valores S N NULL (vaciacuteo)
bull
dst_cmp Paiacutes de destino del comprobante (200 ARGENTINA 203 BRASIL 212 ESTADOSUNIDOS etc)
bull
cliente Apellido y Nombre oacute Razoacuten Social del compradorbull cuit_pais_cliente CUIT del paiacutes destinoContribuyente (Ej 50000000059 BRASIL - PersonaFxedsica 51600000059 BRASIL - Otro tipo de Entidad etc)
bull
domicilio_cliente Domicilio comercial clientebull id_impositivo Clave de identificacioacuten tributaria del compradorbull moneda_id Moneda de la factura (DOL Doacutelar Estadounidense PES Pesos Argentinos 012Real etc)
bull
moneda_ctz Cotizacioacuten de la moneda de la facturabull obs_comerciales observaciones comerciales (texto arbitrario)bull obs observaciones (texto arbitrario)bull forma_pago texto arbitrario (ej 30 diacuteas)bull incoterms clausula de venta terminos de comercio exterior (DAF DDP CIF FCA FAS DESCPT EXW CIP DDU FOB DEQ CFR)
bull
incoterms_ds informacioacuten adicional de terminos comercialesbull idioma_cbte idioma del comprobante 1 Espantildeol 2 Ingleacutes 3 Portugueacutesbull fecha_pago Fecha de pago (yyyymmdd)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
codigo coacutedigo del productobull ds Descripcioacuten completabull precio Precio Unitariobull
Descripcioacuten de la obtencioacuten de CAE 43
qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull imp_total Importe totalbull bonif bonificacion sobre el producto (importe)bull
Consideraciones especiales (soacutelo WSFEXv1 Nuevo )
Para descuentos utilizar umed 99 y los importes en negativo sin cantidad ni preciobull Para sentildeas o adelantos utilizar umed 97 y los importes en negativo o positivo (seguacuten corresponda)sin cantidad ni precio
bull
Para gratificaciones utilizar umed 0 sin importes cantidad ni preciobull Para bonificaciones por item el caacutelculo es precio qty - bonifbull
Adicionalmente se puede llamar al meacutetodo AgregarPermiso para detallar los permisos de embarque ydestinaciones de la mercaderiacutea con los siguientes paraacutemetros
id Coacutedigo de despacho Permiso de Embarque formato 99999AAXX999999A (donde XX podraacutenser nuacutemeros o letras)
bull
dst Paiacutes de destino de la mercaderiacuteabull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los permisos de embarque y destinacionesde la mercaderiacutea con los siguientes paraacutemetros
cbte_tipo Coacutedigo de tipo de comprobante (remitos solo WSFEXv1 Nuevo )bull cbte_punto_venta Punto de ventabull cbte_numero Numero de comprobantebull cbte_cuit CUIT emisor del comprobante (solo WSFEXv1 Nuevo )bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEXGetLastID puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEXResultado =A (Aceptado) y WSFEXVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSFXEResultado = R (Rechazado) y WSFEXObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
IMPORTANTE Revisar las especificaciones teacutecnicas de la AFIP en el Manual para el desarrolladorpdf porlo relativo a tablas de paraacutemetros meacutetodos adicionales y operatoria en general (incluyendo obligatoriedadformatos de los campos y validaciones)
Descripcioacuten de la obtencioacuten de CAE 44
Servicio Web de Factura Electroacutenica Mercado InternoVersioacuten 1 (WSFEv1)
EL WSFEv1 es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten B (sin detalle de factura) de la Resolucioacuten General 29042010 -RG248508 obligatorio a partir de 1-7-2011
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los impuestos(IVA) y tributos
A su vez el WSFEv1 devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva Estas tablas pueden sufrir modificaciones realizadas por la AFIP conaltas y bajas loacutegicas por lo que tienen una fecha de vigencia (desde hasta) y se proveen meacutetodos paraconsultarlas por el mismo servicio web (a diferencia del WSFE que las tablas eran documentadasestaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiProyectoWSFEv1
La programacioacuten de la interfase WSFEv1 es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSFEv1)bull
Meacutetodos
Meacutetodos baacutesicos de WSFEv1
Conectar(cache wsdl proxy wrapper cacert) realiza la conexioacuten a losservidores de la AFIP (primer paso esencial) Si no se especifica url del wsdl se utiliza servidores dehomologacioacuten El paraacutemetro cache es un directorio donde se almacenan internamente la descripcioacutendel servicio (archivo WSDL) para mayor optimizacioacuten Parametros adicionales optativos wrapper esla libreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor(CA)
bull
Servicio Web de Factura Electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 45
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto imp_ivaimp_trib imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz caea fecha_hs_gen) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetros
bull
AgregarIva(iva_id base_imp importe) agrega internamente un subtotal de IVA auna factura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible eimporte Ver ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(tributo_id Desc base_imp alic importe) agregainternamente un subtotal de tributo a una factura para luego poder autorizarla recibe los datos delimpuesto nacional provincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo parael detalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc cuitfecha) agrega internamente un comprobante asociado a una factura para luego poder autorizarlarecibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de los paraacutemetrosEl campo cuit fueacute agregado seguacuten FEv29 13-03-2017 disponible desde actualizacioacuten 119a yrefiere al CUIT emisor del comprobante asociado El campo fecha fueacute agregado seguacuten FEv21320-02-2019 disponible desde actualizacioacuten 122a y refiere a la fecha del comprobante asociado
bull
AgregarOpcional(opcional_id valor) agrega internamente un dato opcional a unafactura para luego poder autorizarla recibe el id del tipo de dato opcional y valor (dependiendo de sise trata de proyectos promovidos bienes usados RG 3411 DDJJ F8001 presuncioacuten de novinculacioacuten con la actividad gravada RG366814) Ver tabla de paraacutemetros Disponible desdeactualizacioacuten 115a
bull
AgregarComprador(doc_tipo=80 doc_nro=0 porcentaje=10000) agregainternamente un dato de comprador a una factura para luego poder autorizarla recibe el tipo dedocumento (80 CUIT) nuacutemero de documento y porcentaje (Bienes Usados Registrables RG 4109 E)Ver COMPG 210 Disponible desde actualizacioacuten 120a
bull
EstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura (ver paraacutemetros del meacutetodo CrearFactura) devuelve True siel campo pertenece al encabezado y se ha actualizado correctamente (ver ejemplo) Disponible desdeactualizacioacuten 116a
bull
ObtenerCampoFactura(campo [[campo2 [campo3]]) devuelve individualmente elvalor de un campo del encabezado u otras sub-estructuras de la factura (ver ejemplo) Uacutetil luego dellamara a CompConsultar Disponible desde actualizacioacuten 117a
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125b 200620
bull
Meacutetodos principales de WSFEv1
CAESolicitar() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo de AutorizacioacutenElectroacutenico (CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
CompConsultar(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle de los paraacutemetros yvalores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos baacutesicos de WSFEv1 46
CAEASolicitar(periodo orden) solicita un CAE Anticipado para la quincenacorrespondiente Devuelve cadena vacia si no se ha solicitado A partir de COMPGv26 estableceel campo Observaciones
bull
CAEAConsultar(periodo orden) recupera un CAE Anticipado emitido con anterioridadDevuelve cadena vacia si no se ha solicitado
bull
CAEARegInformativo informa un comprobante emitido con CAE Anticipado Se debe crear elcomprobante previamente con CrearFactura consignando el CAEA Actualiza los atributos(Resultado Obs etc) de manera similar a CAESolicitar Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
Meacutetodos alternativos para solicitud de muacuteltiples CAE
IniciarFacturasX() inicializa lista interna de facturas (comprobantes) para Solicitar muacuteltiplesCAE (llamar una uacutenica vez antes de CrearFacturaAgregarFacturaX)
bull
AgregarFacturaX() agrega el uacuteltimo comprobante cargado internamente con CrearFacturaa la lista para Solicitar muacuteltiples CAE
bull
CAESolicitarX() autoriza la emisioacuten de muacuteltiples facturas electroacutenicas (varios CAE porsolicitud) devuelve la cantidad de registros enviadosrecibidos a AFIP
bull
LeerFacturaX(indice) activa internamente una factura (dada su posicioacuten en la lista) pararevisar los datoss devuelto por AFIP usando ObtenerCampoFactura luego de haber llamado aCAESolicitarX
bull
Meacutetodos Auxiliares del webservice
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull ParamGetTiposMonedas() ParamGetTiposCbte() ParamGetTiposDoc()ParamGetTiposIva() ParamGetTiposOpcional() ParamGetTiposTributos()ParamGetTiposPaises() recupera valores referenciales de coacutedigos de las tablas de paraacutemetrosdevuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde-(ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros ParamGetTiposPaises agregadopara COMPGv26
bull
ParamGetCotizacion(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada comoparaacutemetro
bull
ParamGetPtosVenta() devuelve los puntos de venta autorizados para factura electroacutenicabull
Meacutetodos Utilitarios provistos por este componente
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Atributos
El componente tiene las siguientes propiedades que pueden ser consultadas o modificadas
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull
Meacutetodos principales de WSFEv1 47
AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull CAEA coacutedigo de autorizacioacuten anticipado (si corresponde)bull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTribimportes del comprobante
bull
ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull Reprocesar habilita reproceso automaacutetico (habilitado por defecto ver abajo)bull EmisitonTipo tipo de coacutedigo de autorizacioacuten (CAE o CAEA)bull
Errores
La interfase procesa los errores WSFEv1 y los almacena en las propiedades Errores y ErrCodeErrMsg (porej motivo de rechazo al intentar solicitar CAE) AFIP tambieacuten puede enviar errrores o advertencias por lacomo Observaciones propiedad Obs Se recomienda revisarlos luego de llamar a los Webservices
Ver ejemplos y especificaciones teacutecnicas del WSFEv1 para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ver Manejo de Excepciones para conocer las tecnicas para controlar las distintas excepciones que puedenocurrir (ver atributos Excepcion y Traceback en general por problemas de conectividad) y como proceder yalmacenar los mensajes XML para depuracioacuten y futuras consultas (atributos XmlRequest y XmlResponse)
Validaciones WSFEv1
AFIP realiza varias validaciones a los datos enviados muchas agregadas recientemente por lo que para evitarinconvenientes se recomienda revisar las siguientes validaciones y consideraciones generales
10063 Factura individual DocTipo 80 DocNro XXXXXXXXX no se encuentra inscripto encondicion ACTIVA en el impuesto Las facturas A solo pueden ser emitidas a ResponsablesInscriptos consignando el CUIT vaacutelido y registrado (tipo_doc=80)
bull
10014 Para facturas B (CbteDesde distinto a CbteHasta) el resultado de la operacioacuten ImpTotal (CbteHasta - CbteDesde + 1 ) debe ser menor a $1000 y 10015 Para facturas B (CbteDesde distintoa CbteHasta) menor a $1000 el campo DocNro deberaacute ser cero (0) y el campo DocTipo 99 Los lotesde facturas B menores a $1000- pueden ser emitidos a soacutelo a Consumidor Final (tipo_doc=99 ynro_doc=0) indicando el importe total del reango de facturas
bull
10043 El campo ImpTotConc (Importe Total del Concepto) para comprobantes tipo C debe ser iguala cero (0) y 10047 El campo ImpIVA (Importe de IVA) para comprobantes tipo C debe ser igual a
bull
Atributos 48
cero (0) 10071 Para comprobantes tipo C el objeto IVA no debe informarse Para emitir FacturasC no se informa iva ni imp_tot_conc ver caso especial Monotributo10048 El campo Importe Total ImpTotal debe ser igual a la suma de ImpTotConc + ImpNeto +ImpOpEx + ImpTrib + ImpIVA La sumatoria de los campos imp_neto impto_iva imp_op_eximp_tot_conc imp_trib contra imp_total no debe diferir en maacutes de 1 centavo (o 001)
bull
10051 Los importes informados en AlicIVA no se corresponden con los porcentajes La baseimponible por la aliacutecuota de IVA no debe diferir en maacutes de 1 centavo con el impuesto liquidado deIVA (para cada tasa ver AgregarIVA)
bull
10020 El campo BaseImp en AlicIVA es obligatorio y debe ser mayor a 0 cero Si el imp_neto es 0no se debe enviar subtotal de IVA ni para la tasa 0 (no usar AgregarIVA)
bull
10018Si ImpIva es igual a 0 el objeto Iva y AlicIva son obligatorios Id iva = 3 (iva 0) Si elimp_neto es ltgt0 y el iva liquidado es 0 se debe enviar coacutedigo de alicuota 3 (0) -por ej casoespecial de hacer factura de 1 centavo- Si no corresponde IVA (exento o no gravado) se debe enviarimp_iva NULO (vbNull null o similar) y no enviar aliacutecuotas
bull
Consideraciones especiales
Para emitir Facturas B a Responsables No Inscriptos debe informarse en Tributos el importecorrespondiente (ver AgregarTributo)
bull
Para factura E no corresponde este webservice por maacutes que sea a Tierra del Fuego Ver WSFEXbull imp_tot_conc debe utilizarse para los importes no gravados (por ej cheques rechazados)bull IVA 0 es distinto a No Gravado (seriacutea imp_tot_conc) o Exento (imp_op_ex) En esos casos no vaalicuota de iva e imp_iva = NULL y imp_neto = 0 (ver validaciones arriba)
bull
Si se usa IVA 0 en el subtotal de la aliacutecuota iva_id=3 se debe pasar base_imp = 100 e importe = 0Ademaacutes imp_neto = 100 (gravado aunque no liquide IVA)
bull
Recordamos que si la AFIP detecta una validacioacuten no obligatoria (por ej no corresponde emitir factura A)devolvera un mensaje (en el atributo WSFEv1Obs) y el IVA liquidado no puede computarse como creacuteditofiscal (la factura debe incorporar dichos mensajes)
Dependiendo del caso los mensajes de validacioacuten pueden ser enviados por AFIP tanto en WSFEv1Obs o enWSFEv1ErrMsg se deben revisar ambos campos
Nota estas consideraciones pueden variar en cada caso dependiendo de cada situacioacuten particular frente aAFIP Recomendamos consultar con el contador los aspectos legales y la normativa vigente
Ejemplo
Ejemplo Solicitud CAE WSFEv1
Autorizar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSFEv1 As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1tra = WSAACreateTRA(wsfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() +
Validaciones WSFEv1 49
Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service WSAA para autenticarcache = directorio temporal (usar predeterminado)url_wsdl = httpswsaahomoafipgovarwsservicesLoginCms usar wsaaafipgovar en produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSAAConectar(cache url_wsdl proxy wrapper)ta = WSAALoginCMS(cms)
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSFEv1 = CreateObject(WSFEv1)DebugPrint WSFEv1version
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEv1Token = WSAATokenWSFEv1Sign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEv1Cuit = 20267565393
Conectar al Servicio Web de Facturacioacutencache = directorio temporal (usar predeterminado)url_wsdl = httpswswhomoafipgovarwsfev1serviceasmxWSDL usar servicios1 para produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSFEv1Conectar(cache url_wsdl proxy) homologacioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEv1DummyDebugPrint appserver status WSFEv1AppServerStatusDebugPrint dbserver status WSFEv1DbServerStatusDebugPrint authserver status WSFEv1AuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4001cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta) + 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 20267565393cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Ejemplo Solicitud CAE WSFEv1 50
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
datos de compradores RG 4109-E bienes muebles registrables ()If False Then solo productos y si hay maacutes de un comprador ok = WSFEv1AgregarComprador(80 30500010912 9999) ok = WSFEv1AgregarComprador(80 30999032083 001)End If
Solicito CAEcae = WSFEv1CAESolicitar()
DebugPrint Resultado WSFEv1ResultadoDebugPrint CAE WSFEv1cae
DebugPrint Numero de comprobante WSFEv1CbteNro
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSFEv1XmlRequestDebugPrint WSFEv1XmlResponse
MsgBox Resultado amp WSFEv1Resultado amp CAE amp cae amp Venc amp WSFEv1Vencimiento amp Obs amp WSFEv1obs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEv1eventos MsgBox evento vbInformation EventoNext
Ejemplo Consultar CAE WSFEv1
Recuperar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia continua elejemplo anterior) CAE normal
Buscar la facturacae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEv1FechaCbteDebugPrint Fecha Vencimiento CAE WSFEv1VencimientoDebugPrint Importe Total WSFEv1ImpTotal
comparar con los datos del ejemplo anterior
Ejemplo Consultar CAE WSFEv1 51
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIP amp cae amp vs amp cae2Else MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
obtener datos del encabezado (a partir de actualizacioacuten 117a)cae = wsfev1ObtenerCampoFactura(cae)tipo_doc = wsfev1ObtenerCampoFactura(tipo_doc)nro_doc = wsfev1ObtenerCampoFactura(nro_doc)imp_total = wsfev1ObtenerCampoFactura(imp_total) obtener primer alicuota de IVAimp_iva1 = wsfev1ObtenerCampoFactura(iva 0 importe) obtener primer tributoimp_trib1 = wsfev1ObtenerCampoFactura(tributos 0 importe) obtener primer opcionalvalor_opcional1 = wsfev1ObtenerCampoFactura(opcionales 0 valor) obtener primer coacutedigo de observacion de AFIPobs_code1 = wsfev1ObtenerCampoFactura(obs 0 code) pruebo obtener el segundo mensaje de observacion inexistenteobs_code2 = wsfev1ObtenerCampoFactura(obs 1 msg)debugPrint wsfev1Excepcion El campo 1 solicitado no existe
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1
Ejemplo para obtener las tablas de parametros en este caso puntos de venta habilitados (uacutetil en produccioacutenpara verificar el acceso al webservice)
recupero tabla de paraacutemetros de punto de venta habilitado (3|EmisionTipoCAE|BloqueadoN|FchBajaNULL)For Each x In WSFEv1ParamGetPtosVenta() DebugPrint xNext
Ejemplo Solicitud CAEA y registro informativo WSFEv1
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE Anticipado
PASO 1 Solicito CAE Anticipado para el periacuteodo NOTA solicitar por uacutenica vez para un determinado periacuteodo consultar si se ha solicitado previamente
periodo = 201102 Antildeo y mesorden = 2 Segunda Quincena
consulto CAEA ya solicitadoCAEA = WSFEv1CAEAConsultar(periodo orden)If CAEA = Then
solicito nuevo CAEA CAEA = WSFEv1CAEASolicitar(periodo orden)End If
MsgBox Periodo amp periodo amp Orden amp orden amp vbCrLf amp CAEA amp CAEA amp vbCrLf amp _Obs amp WSFEv1Obs amp vbCrLf amp _Errores amp WSFEv1ErrMsg
Si no tengo CAEA terminoIf CAEA = Then End
PASO 2 Establezco los valores de la factura a informar
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1 52
tipo_cbte = 6punto_vta = 4005cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta)If cbte_nro = Then cbte_nro = 0 no hay comprobantes emitidosElse cbte_nro = CLng(cbte_nro) convertir a entero largoEnd Iffecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
creo una factura (con CAEA)ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz CAEA fecha_hs_gen)
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
Informo comprobante emitido con CAE anticipadocae = WSFEv1CAEARegInformativo()
DebugPrint Resultado WSFEv1Resultado
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura o completar el registro de encabezado (ver archivo deintercambio) con los siguiente paraacutemetros
Ejemplo Solicitud CAEA y registro informativo WSFEv1 53
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc seguacuten tabla de paraacutemetros de AFIP) y nuacutemero deDocumento del cliente (receptor de la factura) Usar tipo_doc=99 y nro_doc=0 para consumidoresfinales (Factura B lt $1000)
bull
tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSFE)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta generalmente el mismo nuacutemero si es unafactura individual o un rango si son Factura B lt $ 1000 a Consumidor Final -en este uacuteltimo caso seobtiene un uacutenico CAE para el lote-)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la factura (debe ser igual a la suma de imp_tot_conc + imp_op_ex +imp_neto + imp_iva + imp_trib)
bull
imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la factura (igual a la suma de base_imp para todas lasalicuotas)
bull
imp_iva Importe del IVA liquidado (igual a la suma de importe_iva para todas las aliacutecutoas) Enviarnull o similar si no corresponde y no se enviacutean subtotales por aliacutecuota
bull
imp_trib Importe de otros tributos (incluyendo percepciones de IVA retenciones IVA no inscriptoetc)
bull
imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros actualmente solo PES)bull moneda_ctz Cotizacioacuten de la moneda de la factura (actualmente solo 100)bull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull caea codigo de autorizacioacuten anticipado (si corresponde)bull
Luego por cada alicuota de IVA (excepto para no gravado y exento) se debe llamar al meacutetodo AgregarIva ocompletar el registro respectivo con los siguientes paraacutemetros
iva_id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros AFIP)bull base_imp base imponible (importe)bull importe_iva importe liquidado (base_imp por alicuota)bull
De existir otros tributos (percepcionesretenciones o similares) se debe llamar al meacutetodo AgregarTributo ocompletar el registro respectivo con los siguientes paraacutemetros
tributo_id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros AFIP)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc o completar el registro respectivo para detallar loscomprobantes asociados a una nota de creacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo CAESolicitar o CAEARegInformativo dependiendo de lamodalidad (o ejecutar el programa RECE1 si se esta utilizando la herramienta por linea de comando)
Descripcioacuten de la obtencioacuten de CAE CAEA 54
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEv1Resultado= A (Aceptado) y WSFEv1Vencimiento del CAE (fch_venc_cae) Sino devuelve cae = La interfase nopudo procesar la respuesta del WebService o bien la conexioacuten a internet esta caiacuteda las direcciones de losservidores son incorrectas o el servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEv1Resultado = R (Rechazado) y WSFEv1Obs (o WSFEv1ErrMsg) con los diversos motivos derechazo proporcionados por el webservice (ver WSFEMotivo)
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Como requisito previo para la modalidad CAE Anticipado se debe llamar a CAEASolicitar oCAEAConsultar con los datos del periodo y orden (antes de comenzar la quincena) para obtener el uacutenicoCAEA para los comprobantes del periacuteodo
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (CompConsultar) o usar la rutina deReproceso Automaacutetico incluida en este componente
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEV1 en el sitio de la AFIP
Minisitio Factura Electroacutenica AFIP informacioacuten generalbull Manual para el desarrolladorpdf Informacioacuten importante sobre la operatoriabull
Reproceso Automaacutetico
Importante En el caso de que la conexioacuten se interrumpa al llamar a CAESolicitar luego de que la AFIPregistre la factura y antes de que la informacioacuten del CAE llegue al equipo se debe llamada aCompConsultar con los paraacutemetros de la factura (tipo_cbte punto_vta cbte_nro) para recuperar el CAEgenerado anteriormente (ver ejemplo pseudocoacutedigo y por RECE1 get)
Este procedimiento puede ser realizado automaacuteticamente por la interfaz (de manera similar a como realizabaAFIP originalmente en WSFEv0) habilitando el atributo Reprocesar = True (valor predeterminado) conlo que la interfaz automaticamente
Solicita un nuevo CAE en caso de que no exista en los registros de la AFIPbull Consulta y obtiene el CAE anterior en caso de que ya exista en los registros de AFIPbull
En ese caso si se da un reprocesamiento automaacutetico como se mencionoacute en el primer parrafoWSFEReproceso se establece a S para indicar que el CAE se ha recuperado
Si bien no se utiliza un ID por lo que se minimizan los errores al reprocesar los comprobantes igualmente serecomienda revisar el atributo de Reproceso ya que un incorrecto uso puede generar inconvenientes alregistrar los comprobantes en AFIP Para ello la interfaz cuenta con los atributos CbteNro FechaCbteImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTrib o XmlRequest yXmlResponse que deben ser contrastados contra la informacioacuten enviada en el caso de interrupciones oinconvenientes en la comunicacioacuten (a partir de la versioacuten 107d si Reproceso = S la interfaz verificoacuteautomaacuteticamente todos los datos enviados con los registrados en la AFIP y estos concuerdan)
Se recomienda almacenar los datos en un medio durable para poder enviar la misma factura que fuera
Reproceso Automaacutetico 55
interrumpida salvo que se tenga certeza de que la misma no ha sido procesada por AFIP Especialmente sedeberiacutea guardar el nuacutemero de factura antes de solicitar CAE y no utilizar ult o el meacutetodoCompUltimoAutorizado para consultar el uacuteltimo nuacutemero de comprobante emitido ya que ante cualquierinterrupcioacuten se no se podriacutea recuperar los datos registrados en AFIP (o se podriacutean generar duplicados)
En siacutentesis al re-enviar los datos de un comprobante que por alguacuten motivo no ha devuelto CAE (cuando lacomunicacioacuten se ha interrumpido y no ha sido aceptado o rechazado formalmente con Resultado=A o R)se recomienda revisar el reproceso y los datos registrados (devueltos por la interfaz) o en su defectodeshabilitar Reprocesar con False e implementar un procedimiento propio de recuperacioacuten ante fallas
Si el reproceso estaacute habilitado no es necesario modificar la aplicacioacuten en caso de fallas simplementereintentar la solicitud de CAE o informacioacuten de CAEA y la interfaz realizaraacute los meacutetodos pertinentes seguacutense describioacute anteriormente
En caso de que no haya sido necesario reprocesar el requerimiento el atributo Reproceso quedaraacute vacioEn caso de que haya sido necesario reprocesar pero no ha sido exitoso (ocurrioacute un error o validacioacuten que nopermitioacute recuperar el CAE o los datos enviados no concuerdan con los registrados en AFIP) Reprocesoseraacute N y se informaraacute el error original
Lo expuesto anteriormente aplica tambieacuten a CAEA -anticipado- al informar los comprobantes emitidos(CAEARegInformativo)
En ambas ocasiones se puede consultar el atributo EmisionTipo que contiene CAE o CAEA dependiendodel caso
Nota El Reproceso automaacutetico estaacute incluido internamente en CAESolicitar y CAEARegInformativopor lo que estaacute disponible tanto en la biblioteca Python Interfaz COM la herramienta por liacutenea de comandoRECE1EXE y al aplicativo PyRece
Advertencia El Reproceso automaacutetico es una caracteriacutestica adicional propia de la interface por lo tantopuede sufrir variaciones o mejoras se recuerda que la informacioacuten expuesta en esta documentacioacuten aplica a lauacuteltima versioacuten de los instaladores
Factura C Monotributo Exento
Seguacuten RG 30672011 se adiciona la posibilidad de autorizar comprobantes clase C (monotributistas) aWSFEv1 (RG2485)
Seguacuten RG 37492015 se incluye a los sujetos exentos en el impuesto al valor agregado Para poder emitircomprobantes clase C ademaacutes de seguir las pautas sentildealadas en esta seccioacuten el punto de venta debe estardado de alta como Factura Electroacutenica - Exento en IVA - Web Services
Los siguientes coacutedigos de comprobantes (tipo_cbte) pueden ser utilizados en este caso
11 Factura Cbull 12 Nota de Deacutebito Cbull 13 Nota de Creacutedito Cbull 15 Recibo Cbull
Los requisitos fundamentales para poder validar un comprobante informado son las los siguientes
Factura C Monotributo Exento 56
Ingresar siempre imp_tot_conc = 01 Ingresar siempre imp_op_ex = 02 Ingresar siempre imp_iva = 03 Informar en imp_neto el importe subtotal de la factura4 No informar subtotales de IVA (AgregarIVA)5
Coacutedigo de Ejemplo
Establezco los valores de la factura a autorizartipo_cbte = 11punto_vta = 4002cbte_nro = 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 10000 imp_tot_conc = 000 imp_neto = 10000imp_iva = 000 imp_trib = 000 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 2 o 3)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Solicito CAECAE = WSFEv1CAESolicitar()
Documentacioacuten Oficial Facturacioacuten Electroacutenica RG 2485 Proyecto FE v25 - Manual para el desarrollador(Revisioacuten correspondiente al 01 de Abril de 2015)
Datos Opcionales AFIP WSFEv1
El componente permite enviar los datos opcionales requeridos por las diversas resoluciones de AFIP seguacuten latabla de paraacutemetros Disponible desde actualizacioacuten 115b
Datos opcionales para proyectos promovidos
WSFEv1AgregarOpcional(2 1234) identificador del proyecto
Datos opcionales para RG Bienes Usados 3411 (del vendedor)
WSFEv1AgregarOpcional(91 Juan Perez) Nombre y Apellido WSFEv1AgregarOpcional(92 200) Nacionalidad (coacutedigo de paiacutes)WSFEv1AgregarOpcional(93 Balcarce 50) Domicilio
Datos opcionales para RG 3668 Impuesto al Valor Agregado - Art12 (presuncioacuten de no vinculacioacuten con laactividad gravada FORM 8001)
WSFEv1AgregarOpcional(5 02) IVA Excepciones (01 LocadorPrestador 02 Conferencias 03 RG 74 04 Bienes de cambio 05 Ropa de trabajo 06 Intermediario)
Datos Opcionales AFIP WSFEv1 57
WSFEv1AgregarOpcional(61 80) Firmante Doc Tipo (80 CUIT 96 DNI etc)WSFEv1AgregarOpcional(62 20267565393) Firmante Doc NroWSFEv1AgregarOpcional(7 01) Caraacutecter del Firmante (01 Titular 02 DirectorPresidente 03 Apoderado 04 Empleado)
Datos opcionales para RG 3749 (RG 3368 Establecimientos de educacioacuten puacuteblica de gestioacuten privada)
WSFEv1AgregarOpcional(10 1) Actividad ComprendidaWSFEv1AgregarOpcional(1011 80) Tipo de Documento (titular del pago)WSFEv1AgregarOpcional(1012 20267565393) Nuacutemero de Documento (titular del pago)
Datos opcionales para RG4520
WSFEv1AgregarOpcional(5 01) Actividad
Datos opcionales para FEv213 (RG 4367 Factura de Creacutedito Electroacutenica MiPyMEs (FCE))
WSFEv1AgregarOpcional(2101 2850590940090418135201) CBUWSFEv1AgregarOpcional(2102 pyafipws) aliasWSFEv1AgregarOpcional(27 SCA) tipo de transmisioacuten (desde el 01042021) if tipo_cbte in (203 208 213) WSFEv1AgregarOpcional(22 S) Anulacioacuten
Obtencioacuten de Atributos Avanzados WSFEv1
En versiones recientes (112a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosde la respuesta (uacutetiles para depuracioacuten y solucioacuten de errores) con los meacutetodos AnalizarXml yObtenerTagXml
Ejemplo para recuperar datos puntuales de un comprobante emitido (moneda cotizacioacuten CUIT etc)
cae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)ok = WSFEv1AnalizarXml(XmlResponse)If ok Then
datos del encabezado DebugPrint CAE WSFEv1ObtenerTagXml(CodAutorizacion) WSFEv1CAE DebugPrint CbteFch WSFEv1ObtenerTagXml(CbteFch) WSFEv1FechaCbte DebugPrint Moneda WSFEv1ObtenerTagXml(MonId) DebugPrint Cotizacion WSFEv1ObtenerTagXml(MonCotiz) DebugPrint DocTipo WSFEv1ObtenerTagXml(DocTipo) DebugPrint DocNro WSFEv1ObtenerTagXml(DocNro)
ejemplos con arreglos (primer elemento = 0 segundo = 1 etc) DebugPrint Primer IVA (alci id) WSFEv1ObtenerTagXml(Iva AlicIva 0 Id) DebugPrint Primer IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 0 Importe) DebugPrint Segundo IVA (alic id) WSFEv1ObtenerTagXml(Iva AlicIva 1 Id) DebugPrint Segundo IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 1 Importe) DebugPrint Primer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 0 Desc) DebugPrint Primer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 0 Importe) DebugPrint Segundo Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 1 Desc) DebugPrint Segundo Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 1 Importe) DebugPrint Tercer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 2 Desc) DebugPrint Tercer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 2 Importe)End If
Obtencioacuten de Atributos Avanzados WSFEv1 58
Servicio Web de Factura Electroacutenica Mercado InternoPrograma Matrix (WSMTXCA)
EL WSMTXCA es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten A (con detalle de factura) de la Resolucioacuten General 29042010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYY-MM-DD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los artiacuteculos losimpuestos (IVA) y tributos (similar a WSFEX y WSBFE)
A su vez el WSMTXCA devuelve mensajes de eventos (mantenimiento programado advertencias etc) losque deben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva tributos unidades de medida Estas tablas pueden sufrirmodificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha de vigencia(desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia del WSFE quelas tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiFacturaElectronicaMTXCAService
La programacioacuten de la interfase WSMTXCA es similar a WSFE WSFEX WSBFE y WSFEv1 serecomienda revisarlos
Objeto
El objeto COM se crea invocando a CreateObject(WSMTXCA)bull
Meacutetodos
Meacutetodos principales
Conectar(cache wsdl proxy) realiza la conexioacuten a los servidores de la AFIP (primerpaso esencial) Si no se especifica url del wsdl se utiliza servidores de homologacioacuten El paraacutemetrocache es un directorio donde se almacenan internamente la descripcioacuten del servicio (archivo WSDL)para mayor optimizacioacuten Proxy es un string con la informacioacuten del servidor intermediousuarioclaveservidorpuerto
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto
bull
Servicio Web de Factura Electroacutenica Mercado Interno Programa Matrix (WSMTXCA) 59
imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pagofecha_serv_desde fecha_serv_hasta moneda_id moneda_ctz obs) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetrosEstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura devuelve True si el campo pertenece al encabezado y se haactualizado correctamente (ver ejemplo)
bull
AgregarIva(id base_imp importe) agrega internamente un subtotal de IVA a unafactura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible e importeVer ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(id Desc base_imp alic importe) agrega internamente unsubtotal de tributo a una factura para luego poder autorizarla recibe los datos del impuesto nacionalprovincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccbte_cuit fecha) agrega internamente un comprobante asociado a una factura para luegopoder autorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detallede los paraacutemetros El campo cuit fueacute agregado seguacuten Release v05 15-03-2017 disponible desdeactualizacioacuten 113a El campo fecha fue agregado en Realse v010 01072019
bull
AgregarItem(u_mtx cod_mtx codigo ds qty umed precio bonifcod_iva imp_iva imp_subtotal) agrega internamente un item (linea de factura) a unafactura para luego poder autorizarla recibe los datos del item a factura a emitir Ver ejemplo para eldetalle de los paraacutemetros
bull
EstablecerCampoItem(campo valor) establece individualmente el valor de un campo deldetalle de la factura (uacuteltimo item agregado) devuelve True si el campo pertenece al encabezado y seha actualizado correctamente (ver ejemplo)
bull
AutorizarComprobante() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo deAutorizacioacuten Electroacutenico (CAE) Ver ejemplo
bull
AutorizarAjusteIVA() autoriza un ajuste de IVA (notas de creacutedito deacutebito) Se debe informarel coacutedigo 7790001001139 e informar solo el importe de IVA ajustado
bull
SolicitarCAEA(periodo orden) permite obtener un CAEA y su respectivo periacuteodo devigencia (fecha de validez desde y fecha de validez hasta)
bull
ConsultarCAEA(periodo orden caea) permite consultar la informacioacutencorrespondiente a un CAEA previamente otorgado (recibe periacuteodoorden o CAEA)
bull
InformarComprobanteCAEA() enviacutea la informacioacuten del comprobante emitido y asociado a unCAEA (ver AutorizarComprobante)
bull
InformarAjusteIVACAEA() enviacutea la informacioacuten del comprobante de ajuste de IVA emitidospara un CAEA (ver AutorizarAjusteIVA)
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125a 200620
bull
Meacutetodos secundarios
ConsultarComprobante(tipo_cbte punto_vta cbte_nro) recupera los datos deuna factura autorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobanteoriginal y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vezestablece los datos de la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle delos paraacutemetros y valores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos 60
ConsultarMonedas() ConsultarTiposComprobante()ConsultarTiposDocumento() ConsultarAlicuotasIVA()ConsultarCondicionesIVA() ConsultarUnidadesMedida()ConsultarTiposTributo() recupera valores referenciales de coacutedigos de las tablas deparaacutemetros devuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -sicorresponde- (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
ConsultarCotizacionMoneda(moneda_id) devuelve cotizacioacuten y fecha de la monedaindicada como paraacutemetro
bull
ConsultarPuntosVentaCAE() permite consultar los puntos de venta habilitados para CAE eneste WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPuntosVentaCAEA() permite consultar los puntos de venta habilitados para CAEAen este WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPtosVtaCAEANoInformados(caea) permite consultar que puntos de venta auacutenno fueron informados para un CAEA determinado devuelve una lista (array de strings) con los datosdel numero_punto_venta
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importes del comprobantebull ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull
Errores
La interfase procesa los errores WSMTXCA y los almacena en las proipedades Errores y ErrCodeErrMsgVer especificaciones teacutecnicas del WSMTXCA para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ejemplo
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSMTXCA As Object
Atributos 61
On Error GoTo ManejoError
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSMTXCAtra = WSAACreateTRA(wsmtxca)DebugPrint tra
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)DebugPrint cms
Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten (cambiar para produccioacuten)
Imprimir el ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint taDebugPrint Token WSAATokenDebugPrint Sign WSAASign
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSMTXCA = CreateObject(WSMTXCA)DebugPrint WSMTXCAversion
Setear tocken y sing de autorizacioacuten (pasos previos)WSMTXCAToken = WSAATokenWSMTXCASign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSMTXCACuit = 20267565393
Conectar al Servicio Web de FacturacioacutenWSDL = httpsserviciosjavaafipgovarwsmtxcaservicesMTXCAServicewsdlok = WSMTXCAConectar( WSDL) produccioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSMTXCADummyDebugPrint appserver status WSMTXCAAppServerStatusDebugPrint dbserver status WSMTXCADbServerStatusDebugPrint authserver status WSMTXCAAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4000cbte_nro = WSMTXCACompUltimoAutorizado(tipo_cbte punto_vta)fecha = Format(Date yyyy-mm-dd)concepto = 3tipo_doc = 80 nro_doc = 30000000007cbte_nro = CLng(cbte_nro) + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000
Ejemplo 62
imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs = Observaciones Comerciales libre
ok = WSMTXCACrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz obs)
Agrego los comprobantes asociadosIf False Then solo si es nc o nd tipo = 19 pto_vta = 2 nro = 1234 ok = WSMTXCAAgregarCmpAsoc(tipo pto_vta nro)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSMTXCAAgregarTributo(id Desc base_imp alic importe)
Agrego subtotales de IVAid = 5 21base_im = 10000importe = 2100ok = WSMTXCAAgregarIva(id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890codigo = P0001ds = Descripcion del producto P0001qty = 10000umed = 7precio = 10000bonif = 000cod_iva = 5imp_iva = 2100imp_subtotal = 12100ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx DESC Descuento 0 _
99 0 0 cod_iva -2100 -12100)
Solicito CAEcae = WSMTXCAAutorizarComprobante()
verifico que no haya erroresFor Each er In WSMTXCAErrores MsgBox er vbInformation ErrorNext
Ejemplo 63
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSMTXCAXmlRequestDebugPrint WSMTXCAXmlResponse
MsgBox Resultado amp WSMTXCAResultado amp CAE amp cae amp _ Venc amp WSMTXCAVencimiento amp Obs amp WSMTXCAobs _
vbInformation + vbOKOnly
Ejemplo para obtener coacutedigos referenciales (tabla moneda)
recupero tabla de paraacutemetros de moneda (id descripcioacuten)For Each x In WSMTXCAConsultarMonedas() DebugPrint xNext
busco la cotizacioacuten del dolar (ver Param Mon)ctz = WSMTXCAConsultarCotizacionMoneda(DOL)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSMTX factura electroacutenica con detalle)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta ambos el mismo nuacutemero si es una facturaindividual)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull imp_subtotal subtotal sin ivabull imp_trib Importe de otros tributosbull imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull moneda_ctz Cotizacioacuten de la moneda de la facturabull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull obs observaciones comerciales (campo libre)bull caea debe completarse si se informa una factura en esta modalidad (obtenido con SolicitarCAEA)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
u_mtx cantidad de unidades(ej 123456)bull cod_mtx codigo mtx del producto (ej 1234567890)bull codigo codigo opcional del producto (ej P0001)bull ds Descripcioacuten completabull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull
Descripcioacuten de la obtencioacuten de CAE CAEA 64
bonif Bonificacioacutenbull cod_iva Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_iva importe liquidado de IVAbull imp_subtotal = Importe total (incluyendo descuentos e IVA)bull
Para items descriptivos utilizar umed = 0 Para anticipos o descuentos utilizar umed = 99
Por cada alicuota de IVA se debe llamar al meacutetodo AgregarIva con los siguientes paraacutemetros
id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull base_imp base imponible (importe)bull importe importe liquidadobull
De existir otros tributos se debe llamar al meacutetodo AgregarTributo con los siguientes paraacutemetros
id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los comprobantes asociados a una nota decreacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobantebull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo AutorizarComprobante o InformarComprobanteCAEA
Si no hubiere inconvenientes la llamada debe devolver el CAE CAEA y se establece el atributoWSMTXCAResultado = A (Aceptado) y WSMTXCAVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSMTXCAObscon los diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (ConsultarComprobante)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSMTX en el sitio de la AFIP
Manual Desarrollador Informacioacuten importante sobre la operatoriabull
Descripcioacuten de la obtencioacuten de CAE CAEA 65
Establecer campos individualmente (ejemplo WSMTXCA)
Para lenguajes que no soporten el pasaje de varios parametros a un meacutetodo (por ej SERVOY por sulimitacioacuten de 6 argumentos) desde la versioacuten 106a es posible crear la factura en blanco (todos los camposvacios) y luego establecer los campos individualmente
ok = WSMTXCACrearFactura()ok = WSMTXCAEstablecerCampoFactura(concepto concepto)ok = WSMTXCAEstablecerCampoFactura(tipo_doc tipo_doc)ok = WSMTXCAEstablecerCampoFactura(nro_doc nro_doc)ok = WSMTXCAEstablecerCampoFactura(tipo_cbte tipo_cbte)ok = WSMTXCAEstablecerCampoFactura(punto_vta punto_vta)ok = WSMTXCAEstablecerCampoFactura(cbt_desde cbt_desde)ok = WSMTXCAEstablecerCampoFactura(cbt_hasta cbt_hasta)ok = WSMTXCAEstablecerCampoFactura(imp_total imp_total)ok = WSMTXCAEstablecerCampoFactura(imp_tot_conc imp_tot_conc)ok = WSMTXCAEstablecerCampoFactura(imp_neto imp_neto)ok = WSMTXCAEstablecerCampoFactura(imp_subtotal imp_subtotal)ok = WSMTXCAEstablecerCampoFactura(imp_trib imp_trib)ok = WSMTXCAEstablecerCampoFactura(imp_op_ex imp_op_ex)ok = WSMTXCAEstablecerCampoFactura(fecha_cbte fecha_cbte)ok = WSMTXCAEstablecerCampoFactura(fecha_venc_pago fecha_venc_pago)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_desde fecha_serv_desde)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_hasta fecha_serv_hasta)ok = WSMTXCAEstablecerCampoFactura(moneda_id moneda_id)ok = WSMTXCAEstablecerCampoFactura(moneda_ctz moneda_ctz)ok = WSMTXCAEstablecerCampoFactura(observaciones Obs)ok = WSMTXCAEstablecerCampoFactura(caea CAEA)ok = WSMTXCAEstablecerCampoFactura(vencimiento vencimiento)
Para los items de detalle seriacutea similar
ok = WSMTXCAAgregarItem()ok = WSMTXCAEstablecerCampoItem(u_mtx u_mtx)ok = WSMTXCAEstablecerCampoItem(cod_mtx cod_mtx)ok = WSMTXCAEstablecerCampoItem(codigo codigo)ok = WSMTXCAEstablecerCampoItem(ds ds)ok = WSMTXCAEstablecerCampoItem(qty qty)ok = WSMTXCAEstablecerCampoItem(umed umed)ok = WSMTXCAEstablecerCampoItem(precio precio)ok = WSMTXCAEstablecerCampoItem(bonif bonif)ok = WSMTXCAEstablecerCampoItem(iva_id cod_iva)ok = WSMTXCAEstablecerCampoItem(imp_iva imp_iva)ok = WSMTXCAEstablecerCampoItem(imp_subtotal imp_subtotal)
Interfase por archivos de texto siacutemil SIAP - RECE
Para lenguajes donde no es posible utilizar objetos COM se desarrolloacute una interfaz de texto (command lineinterfase) para poder utilizar los Web Services de la AFIP que funciona como un programa independientemanteniendo las ventajas y caracteriacutesticas presentadas anteriormente
Formatos de archivos de intercambio soportados
Archivos TXT de Texto plano estilo COBOL y aplicativos SIAP AFIPbull Tablas DBF para dBase III Fox Clipper Harbour (xBase) etcbull Formato JSON para lenguajes de programacioacuten maacutes modernos (PHP JAVA JavaScript etc)bull
Establecer campos individualmente (ejemplo WSMTXCA) 66
La herramienta es multiplataforma (LinuxWindows)
Ver secciones anteriores sobre la descripcioacuten de las opciones de configuracioacuten campos y procedimientos
Consideraciones Generalesbull Autenticacioacuten (WSAA) ticket de acceso certificados y claves privadasbull Gestioacuten de CAE (WSFEv1) mercado interno sin detalle (version 1)bull Gestioacuten de CAE (WSMTXCA) mercado interno con detalle (matrix)bull Gestioacuten de CAE (WSFEX) exportacioacutenbull
Configuracioacuten
Editar el archivo RECEINI en la carpeta de la intefase (CPYAFIPWS)
CERT ubicacioacuten del archivo certificado (ver WSAA)bull PRIVATEKEY ubicacioacuten del archivo de la clave privada (ver WSAA)bull CUIT CUIT del emisorbull ENTRADA ubicacioacuten del archivo de texto de entrada (para cada webservice)bull SALIDA ubicacioacuten del archivo de texto de salida (para cada webservice)bull URL direccioacuten de los servicios web de produccioacuten (para cada webservice)bull Seccion [DBF] configura los nombres de archivos con las tablas requeridasbull
Ejemplo
[WSAA]CERT=CSISTEMAempresacrtPRIVATEKEY= CSISTEMAempresakeyURL=httpswsaaafipgovarwsservicesLoginCmswsdl[WSFEv1]CUIT=30000000000CBU=2222222222222222222222ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
[WSMTXCA]CUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtReprocesar= SURL=httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAService
[WSBFE] aplica tambieacuten a WSBFEv1CUIT=30000000000ENTRADA= CSISTEMAentradatxtSALIDA= CSISTEMAsalidatxtURL=httpsservicios1afipgovarwsbfev1serviceasmxWSDL
[WSFEXv1] aplica tambieacuten a WSFEXCUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfexv1serviceasmxWSDL
Interfase por archivos de texto siacutemil SIAP - RECE 67
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalles = detallesdbfDatos Opcionales = opcionalesdbf
Seccioacuten [WSAA]
Configuracioacuten referente al web service de autenticacioacuten
CERT ubicacioacuten del archivo que contiene el certificadobull PRIVATEKEY ubicacioacuten de la clave privada correspondiente al certificadobull URL direccioacuten del servidor de AFIP Por ej para produccioacuten httpswsaaafipgovarwsservicesLoginCmswsdl
bull
Seccioacuten [WSFEv1]
Configuracioacuten referente al web service de factura nacional
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfev1serviceasmxWSDL
bull
Seccioacuten [WSFEX]
Configuracioacuten referente al web service de factura exportacioacuten
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfexserviceasmx
bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull
Seccioacuten [PROXY]
Configuracioacuten referente al servidor intermedio de salida a internet (firewall antivirus proxy etc) ej
Configuracioacuten 68
HOST = localhostbull PORT = 8000bull USER = marianobull PASS = reingartbull
NOTA solo debe configurarse esta seccioacuten si corresponde contactar al administrador de red de la empresapara determinar los paraacutemetros correctos de cada caso Para maacutes informacioacuten ver Errores de Conectividad
Formato de archivos de entrada y salida
Factura electroacutenica normal (WSFE)
El formato utilizado es similar a RECE pero extendido con algunos campos necesarios para utilizar losServicios Web A continuacioacuten se detalla nombre del campo posicioacuten inicial longitud y tipo
fecha_cbte (28A)bull tipo_cbte (102N)bull punto_vta (134N)bull cbt_desde (178N)bull cbt_hasta (258N)bull tipo_doc (362N)bull nro_doc (3811N)bull imp_total (7915I)bull imp_tot_conc (9415I)bull imp_neto (10915I)bull impto_liq (12415I)bull impto_liq_rni (13915I)bull imp_op_ex (15415I)bull cae (26114N)bull fecha_vto (2758A)bull resultado (2911A)bull motivo (2922A)bull reproceso (2941A)bull fecha_venc_pago (2958A)bull presta_serv (3031N)bull fecha_serv_desde (3048A)bull fecha_serv_hasta (3128A)bull id (32015N)bull
Tipos de campo
A Alfanumericobull N Numericobull I Importes con 2 decimales (sin incluir punto)bull
Los espacios no definidos se ignoran (completar con un espacio en blanco)
Para maacutes informacioacuten sobre los campos ver paraacutemetros y valores que retorna el meacutetodo Aut en el presentemanual
Seccioacuten [PROXY] 69
Como formato de entrada es posible utilizar el mismo archivo generado para el aplicativo SIAPRECE perono se podraacuten facturar servicios ya que los campo presta_serv y fecha_serv_desde y fecha_serv_hasta no estaacutencontemplados en dicho formato
Factura electroacutenica bienes de capital (WSBFE)
El formato es similar al de factura electroacutenica normal pero variacutea el tipo de registro (0 Encabezado 1 Detallede cada Item)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 0bull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numericobull Campo tipo_doc Posicioacuten 24 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 26 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 37 Longitud 15 Tipo Importebull Campo imp_tot_conc Posicioacuten 52 Longitud 15 Tipo Importebull Campo imp_neto Posicioacuten 67 Longitud 15 Tipo Importebull Campo impto_liq Posicioacuten 82 Longitud 15 Tipo Importebull Campo impto_liq_rni Posicioacuten 97 Longitud 15 Tipo Importebull Campo imp_op_ex Posicioacuten 112 Longitud 15 Tipo Importebull Campo impto_perc Posicioacuten 127 Longitud 15 Tipo Importebull Campo imp_iibb Posicioacuten 142 Longitud 15 Tipo Importebull Campo impto_perc_mun Posicioacuten 157 Longitud 15 Tipo Importebull Campo imp_internos Posicioacuten 172 Longitud 15 Tipo Importebull Campo imp_moneda_id Posicioacuten 187 Longitud 3 Tipo Alfanumericobull Campo imp_moneda_ctz Posicioacuten 190 Longitud 10 Tipo Importebull Campo zona Posicioacuten 200 Longitud 5 Tipo Alfanumericobull Campo cae Posicioacuten 205 Longitud 14 Tipo Numericobull Campo fecha_vto Posicioacuten 219 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 227 Longitud 1 Tipo Alfanumericobull Campo obs Posicioacuten 228 Longitud 2 Tipo Alfanumericobull Campo reproceso Posicioacuten 230 Longitud 1 Tipo Alfanumericobull Campo id Posicioacuten 231 Longitud 15 Tipo Numericobull
Detalle (por cada item)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 1bull Campo ncm Posicioacuten 2 Longitud 15 Tipo Alfanumericobull Campo sec Posicioacuten 17 Longitud 15 Tipo Alfanumericobull Campo qty Posicioacuten 32 Longitud 15 Tipo Importebull Campo umed Posicioacuten 47 Longitud 5 Tipo Numericobull Campo precio Posicioacuten 52 Longitud 15 Tipo Importebull Campo bonif Posicioacuten 67 Longitud 15 Tipo Importebull Campo imp_total Posicioacuten 82 Longitud 15 Tipo Importebull Campo iva_id Posicioacuten 97 Longitud 5 Tipo Numericobull Campo ds Posicioacuten 102 Longitud 200 Tipo Alfanumericobull
Factura electroacutenica normal (WSFE) 70
Si se informa el campo ID la factura se genera con dicho nuacutemero de secuencia De lo contrario para evitarproblemas y poder reprocesar el CAE se genera con un nuacutemero de secuencia del formatoTPPPPNNNNNNNN (tipo de comprobante punto de venta y nuacutemero de comprobante)
Factura electroacutenica exportacioacuten (WSFEX)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Formato
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 3bull Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo obs Posicioacuten 1618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 2618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 2668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 2671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 2691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 2692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 2706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 2714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 2715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 2716 Longitud 40 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 2756 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 2771 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 32 Longitud 12 Tipo Importe Decimalesbull Campo umed Posicioacuten 44 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 46 Longitud 12 Tipo Importe Decimales 3bull Campo imp_total Posicioacuten 58 Longitud 14 Tipo Importe Decimales 3bull Campo ds Posicioacuten 72 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica bienes de capital (WSBFE) 71
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Nota se utilizan 3 decimales para los importes y 6 para la cotizacioacuten de la moneda
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Tributo 2 IVA 3 Comprobante asociado 6 Opcionales 8 Periodo Comprobante asociado) y no tienedetalle de artiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbt_desde Posicioacuten 16 Longitud 8 Tipo Numericobull Campo cbt_hasta Posicioacuten 24 Longitud 8 Tipo Numericobull Campo concepto Posicioacuten 32 Longitud 1 Tipo Numericobull Campo tipo_doc Posicioacuten 33 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 35 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 46 Longitud 15 Tipo Importe Decimales 2bull Campo no_usar Posicioacuten 61 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 76 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 91 Longitud 15 Tipo Importe Decimales 2bull Campo imp_iva Posicioacuten 106 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 121 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 136 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 151 Longitud 3 Tipo Alfanumericobull Campo moneda_ctz Posicioacuten 154 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 164 Longitud 8 Tipo Alfanumericobull Campo cae Posicioacuten 172 Longitud 14 Tipo Alfanumericobull Campo fch_venc_cae Posicioacuten 186 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 194 Longitud 1 Tipo Alfanumericobull Campo motivos_obs Posicioacuten 195 Longitud 1000 Tipo Alfanumericobull Campo err_code Posicioacuten 1195 Longitud 6 Tipo Alfanumericobull Campo err_msg Posicioacuten 1201 Longitud 1000 Tipo Alfanumericobull Campo reproceso Posicioacuten 2201 Longitud 1 Tipo Alfanumericobull Campo emision_tipo Posicioacuten 2202 Longitud 4 Tipo Alfanumericobull Campo fecha_serv_desde Posicioacuten 2206 Longitud 8 Tipo Alfanumericobull
Factura electroacutenica exportacioacuten (WSFEX) 72
Campo fecha_serv_hasta Posicioacuten 2214 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 2222 Longitud 3 Tipo Numericobull Campo punto_vta Posicioacuten 2225 Longitud 5 Tipo Numericobull Campo fecha_hs_gen Posicioacuten 2230 Longitud 14 Tipo Alfanumerico formato yyyymmddhhmiss(pCAEA contingencia)
bull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tributo_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo desc Posicioacuten 18 Longitud 100 Tipo Alfanumericobull Campo base_imp Posicioacuten 118 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 133 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 148 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo iva_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo base_imp Posicioacuten 18 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 33 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numericobull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numericobull Campo nro Posicioacuten 9 Longitud 8 Tipo Numericobull Campo fecha Posicioacuten 17 Longitud 8 Tipo Numericobull Campo cuit Posicioacuten 25 Longitud 11 Tipo Numericobull
Opcionales Disponible desde actualizacioacuten 133b
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Compradores Disponible desde actualizacioacuten 137a (RG-4109-E Bienes Muebles Registrables)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo doc_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo doc_nro Posicioacuten 5 Longitud 80 Tipo Numerico Decimalesbull Campo porcentaje Posicioacuten 85 Longitud 6 Tipo Importe Decimales 2bull
Periodo Cbte Asoc Disponible desde actualizacioacuten 138a
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_desde Posicioacuten 2 Longitud 8 Tipo Numericobull Campo fecha_hasta Posicioacuten 10 Longitud 8 Tipo Numericobull
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 73
Factura electroacutenica Mercado Interno Matrix (WSMTXCA)
El formato es similar al de factura electroacutenica mercado interno version 1 pero variacutea el tipo de registro (0Encabezado 1 Tributo 2 IVA 3 Comprobante asociado 4 Detalle de cada item) y tiene detalle deartiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 10 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 12 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 14 Longitud 4 Tipo Numerico Decimalesbull Campo cbt_desde Posicioacuten 18 Longitud 8 Tipo Numerico Decimalesbull Campo cbt_hasta Posicioacuten 26 Longitud 8 Tipo Numerico Decimalesbull Campo concepto Posicioacuten 34 Longitud 1 Tipo Numerico Decimalesbull Campo tipo_doc Posicioacuten 35 Longitud 2 Tipo Numerico Decimalesbull Campo nro_doc Posicioacuten 37 Longitud 11 Tipo Numerico Decimalesbull Campo imp_total Posicioacuten 48 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 63 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 78 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 93 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 108 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 138 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 141 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 151 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_desde Posicioacuten 161 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_hasta Posicioacuten 171 Longitud 10 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 181 Longitud 14 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 195 Longitud 10 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 205 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 206 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 1206 Longitud 6 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 1212 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo reproceso Posicin 2212 Longitud 1 Tipo Alfanumerico Decimalesbull Campo emision_tipo Posicin 2213 Longitud 4 Tipo Alfanumerico Decimalesbull Campo observaciones Posicioacuten 2217 Longitud 1000 Tipo Alfanumerico Decimalesbull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tributo_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull Campo desc Posicioacuten 5 Longitud 100 Tipo Alfanumerico Decimalesbull Campo base_imp Posicioacuten 105 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 120 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 135 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo iva_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Mercado Interno Matrix (WSMTXCA) 74
Campo base_imp Posicioacuten 5 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 20 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Opcionales
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Detalle de item
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo u_mtx Posicioacuten 2 Longitud 10 Tipo Numerico Decimalesbull Campo cod_mtx Posicioacuten 12 Longitud 30 Tipo Alfanumerico Decimalesbull Campo codigo Posicioacuten 42 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 72 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo umed Posicioacuten 87 Longitud 3 Tipo Numerico Decimalesbull Campo precio Posicioacuten 90 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo bonif Posicioacuten 105 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo iva_id Posicioacuten 120 Longitud 3 Tipo Numerico Decimalesbull Campo imp_iva Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 138 Longitud 15 Tipo Importe Decimales 2bull Campo ds Posicioacuten 153 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo pais_dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo nombre_cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 2bull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1) 75
Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 4000 Tipo Alfanumerico Decimalesbull Campo obs_generales Posicioacuten 4618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 5618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 5668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 5671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 5691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 5692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 5706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 5714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 5715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 5716 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 6716 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 6731 Longitud 8 Tipo Alfanumerico Decimalesbull Campo excepcion Posicioacuten 6739 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 6839 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 6939 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo fecha_pago Posicioacuten 7939 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 50 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 52 Longitud 12 Tipo Importe Decimales 6bull Campo umed Posicioacuten 64 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 66 Longitud 12 Tipo Importe Decimales 6bull Campo importe Posicioacuten 78 Longitud 13 Tipo Importe Decimales 2bull Campo bonif Posicioacuten 91 Longitud 12 Tipo Importe Decimales 6bull Campo ds Posicioacuten 103 Longitud 4000 Tipo Alfanumerico Decimalesbull
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull Campo cbte_cuit Posicioacuten 17 Longitud 11 Tipo Numerico Decimalesbull
Formato Tablas xBase DBF (dBase III Fox Clipper)
Las ultimas versiones de la interfaz ademas de manejo por archivo de texto soporta manejo por tablas DBFEstas tablas pueden ser generadas con cualquier libreriacutea o aplicacioacuten compatible (incluso pueden ser abiertascon planillas de caacutelculo)
Formato Tablas xBase DBF (dBase III Fox Clipper) 76
Los tipos de campos son
C(l) caracter (longitud)bull N(ld) numerico (longitud y decimales)bull M camos memo (usado para errores y mensajes extensos gt250 caracteres)bull D campos fechabull
Los nombres de los campos son los mismos que se manejan para el archivo de texto pero sin el guioacuten bajo yrecortados a 10 caracteres
Se utiliza la libreriacutea Python dBase (dbf-08819) que soporta los siguientes tipos de archivos
dBase III Plusbull dBase III Plus wmemosbull dBase IVbull dBase IV SQLbull dBase IV wmemosbull dBase IV wmemosbull dBase IV wSQL tablebull dBase Vbull FoxBASEbull FoxPro wmemosbull Visual FoxProbull Visual FoxPro (auto increment field)bull
Reconoce archivos con extensioacuten DBF DBT FPT entre otros
Factura electroacutenica mercado interno (WSFEv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
IMPORTANTE algunos campos han cambiado su denominacioacuten en las uacuteltimas versiones para hacerloscompatibles con las tablas PDF (solo se muestra el nombre de campo perteneciente a la uacuteltima actualizacioacuten)
Encabezado (encabezadbf)
Encabezado (datos generales de la factura)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtdesde N(80)bull Campo cbthasta N(80)bull Campo concepto N(10)bull Campo tipodoc N(20)bull Campo nrodoc N(110)bull Campo imptotal N(152)bull Campo nousar N(152)bull Campo imptotconc N(152)bull
Factura electroacutenica mercado interno (WSFEv1) 77
Campo impneto N(152)bull Campo impiva N(152)bull Campo imptrib N(152)bull Campo impopex N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo fechavencp C(8)bull Campo cae C(14)bull Campo fchvenccae C(8)bull Campo resultado C(1)bull Campo motivosobs Mbull Campo errcode C(6)bull Campo errmsg Mbull Campo reproceso C(1)bull Campo emisiontip C(4)bull Campo fechaservd C(8)bull Campo fechaservh C(8)bull
Tributo (tributodbf)
Detalle de otros tributos
Campo tiporeg N(10)bull Campo tributoid N(160)bull Campo desc C(100)bull Campo baseimp N(152)bull Campo alic N(152)bull Campo importe N(152)bull
Iva (ivadbf)
Detalle de subtotales por aliacutecuota de IVA
Campo tiporeg N(10)bull Campo ivaid N(160)bull Campo baseimp N(152)bull Campo importe N(152)bull
Comprobante Asociado (comprobadbf)
Comprobante Asociado
Campo tiporeg N(10)bull Campo tipo N(30)bull Campo ptovta N(40)bull Campo nro N(80)bull
Opcionales (opcionaldbf)
Datos opcionales (adicionales seguacuten cada nueva RG 3411 3668 4004-E etc)
Encabezado (encabezadbf) 78
Campo tiporeg N(10)bull Campo opcionalid C(4)bull Campo valor C(250)bull
Compradores (compradodbf)
Datos para Venta de bienes muebles registrables (RG 4109-E)
Campo tiporeg N(10)bull Campo doctipo N(30)bull Campo docnro N(800)bull Campo porcentaje N(62)bull
Factura electroacutenica mercado interno matrix (WSMTXCA)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Tabla Encabezadbf Encabezado (datos generales de la factura)
tiporeg N(10)bull fechacbte C(10)bull tipocbte N(20)bull puntovta N(40)bull cbtdesde N(80)bull cbthasta N(80)bull concepto N(10)bull tipodoc N(20)bull nrodoc N(110)bull imptotal N(152)bull imptotconc N(152)bull impneto N(152)bull impsubtota N(152)bull imptrib N(152)bull impopex N(152)bull monedaid C(3)bull monedactz N(106)bull fechavencp C(10)bull fechaservd C(10)bull fechaservh C(10)bull cae N(140)bull fchvenccae C(10)bull resultado C(1)bull motivosobs Mbull errcode C(6)bull errmsg Mbull reproceso C(1)bull emisiontip C(4)bull observacio Mbull
Tabla Tributodbf Detalle de otros tributos
Opcionales (opcionaldbf) 79
tiporeg N(10)bull tributoid C(3)bull desc C(100)bull baseimp N(152)bull alic N(152)bull importe N(152)bull
Tabla Ivadbf Detalle de subtotales por aliacutecuota de IVA
tiporeg N(10)bull ivaid C(3)bull baseimp N(152)bull importe N(152)bull
Tabla Comprobadbf Comprobante Asociado
tiporeg N(10)bull tipo N(30)bull ptovta N(40)bull nro N(80)bull
Tabla Detallesdbf Detalles del item
tiporeg N(10)bull umtx N(100)bull codmtx C(30)bull codigo C(30)bull qty N(153)bull umed N(30)bull precio N(153)bull bonif N(153)bull ivaid N(30)bull impiva N(152)bull impsubtota N(152)bull ds Mbull
Factura electroacutenica exportacioacuten (WSFEXv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Encabezado (encabezadbf)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtenro N(80)bull Campo tipoexpo N(10)bull Campo permisoexi C(1)bull Campo paisdstcmp N(30)bull
Factura electroacutenica mercado interno matrix (WSMTXCA) 80
Campo nombreclie C(200)bull Campo cuitpaiscl N(110)bull Campo domicilioc Mbull Campo idimpositi C(50)bull Campo imptotal N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo obscomerci Mbull Campo obsgeneral Mbull Campo formapago C(50)bull Campo incoterms C(3)bull Campo incotermsd C(20)bull Campo idiomacbte C(1)bull Campo cae N(140)bull Campo fechavto C(8)bull Campo resultado C(1)bull Campo reproceso C(1)bull Campo motivosobs Mbull Campo id N(150)bull Campo fchvenccae C(8)bull Campo excepcion C(100)bull Campo errcode C(100)bull Campo errmsg Mbull
Detalle (detalledbf)
Campo tiporeg N(10)bull Campo codigo C(50)bull Campo qty N(122)bull Campo umed N(20)bull Campo precio N(122)bull Campo importe N(132)bull Campo bonif N(122)bull Campo ds Mbull
Permiso (permisodbf)
Campo tiporeg N(10)bull Campo idpermiso C(16)bull Campo dstmerc N(30)bull
Comprobante Asociado (comprobadbf)
Campo tiporeg N(10)bull Campo cbtetipo N(30)bull Campo cbtepuntov N(40)bull Campo cbtenro N(80)bull Campo cbtecuit N(110)bull
Encabezado (encabezadbf) 81
Formato JSON
Factura electroacutenica mercado interno (WSFEv1)
Para lenguajes modernos (PHP JAVA JavaScript etc) se pueden utilizar archivos de intercambio en formatoJSON
Ejecutar rece1exe json
Ejemplo archivo de entrada faactura_electronicajson
[ tipo_cbte 3 punto_vta 4002 cbt_desde 447 cbt_hasta 447 fecha_cbte 20190511 tipo_doc 80 nro_doc 30500010912
concepto 1 fecha_venc_pago null fecha_vto 20190521
imp_neto 10000 imp_iva 2100 imp_op_ex 000 imp_tot_conc 000 imp_trib 100 imp_total 12200
moneda_id PES moneda_ctz 1000
ivas [ iva_id 5 base_imp 100 importe 21 ] tributos [ tributo_id 99 alic 1 base_imp 100 importe 1 desc Impuesto Municipal Matanza ] cbtes_asoc [ nro 1234 pto_vta 2 tipo 1 ] opcionales [] compradores [] ]
La resupuesta del webservice de AFIP es agregada al mismo formato (ejemplo editado)
[ resultado A cae 69193742426586 fch_venc_cae 20190521 emision_tipo CAE motivos_obs err_code err_msg
Formato JSON 82
reproceso ]
Forma de uso
Llamar al ejecutable RECEEXE (factura electroacutenica normal WSFE) RECEBEXE (factura electroacutenicaBienes de Capital WSBFE) RECEXEXE (factura electroacutenica Exportacioacuten) RECE1EXE (facturaelectroacutenica mercado interno WSFE versioacuten 1) en la carpeta de la intefase (CPYAFIPWS)
En caso de ejecucioacuten correcta informara por pantalla los ID y CAE obtenidos y el coacutedigo de retorno es 0
ID 1000200000063 CAE 59033567692234 Motivo 00 Reproceso NID 1000200000064 CAE 59033693441244 Motivo 00 Reproceso NID 1000200000065 CAE 59033880026543 Motivo 00 Reproceso N
El CAE obtenido fecha de vencimiento y demaacutes valores devueltos por WSFE (resultado reproceso motivode rechazo u observacioacuten) son escritos en el archivo de salida con la misma informacioacuten de la factura que enel archivo de entrada
En el caso de error informa por pantalla el motivo y el coacutedigo de retorno es distinto de 0
ns1coenotAuthorized Computador no autorizado a acceder los servicio de AFIP
1000 FERecuperaLastCMPRequestSRV_RA Usuario no autorizado a realizar esta operacionValidacionDeToken No aparecioacute CUIT en lista de relaciones 30000000000
Paraacutemetros
RECEEXE RECEBEXE RECEXEXE RECE1EXE y RECEMEXE reciben los siguientes argumentospor liacutenea de comando
ayuda lista los paraacutemetros habilitadosbull prueba Teniendo los certificados instalados se puede realizar una prueba donde la interface generaraacuteun archivo de entrada para las tres proacuteximas facturas obteniendo los uacuteltimos nuacutemeros de transaccioacuteny comprobante
bull
ult Solicita Tipo de comprobante y Punto de Venta y devuelve el uacuteltimo numero de comprobanteregistrado
bull
dummy consulta estado de servidores (deberiacutean ser OK los 3 servidores)bull ptosventa devuelve los puntos de venta habilitados para emitir facturas electroacutenicas (soloWSFEv1RECE1)
bull
debug modo depuracioacuten (detalla y confirma las operaciones)bull formato muestra el formato de los archivos de entradasalidabull get recupera datos de un comprobante autorizado previamente (verificacioacuten solo para RECEXRECE1 y RECEM)
bull
xml almacena los requerimientos y respuestas XML (uacutetil para depuracioacuten y registro)bull dbf modo de trabajo con tablas Dbase IIIFoxPro o similares (solo RECE1 y RECEM)bull json modo de trabajo con formato JSON (JavaScript PHP Java) (solo RECE1)bull
Se puede especificar como primer paraacutemetro un nombre de archivo RECEINI alternativo para cargardistintas configuraciones por ej
Factura electroacutenica mercado interno (WSFEv1) 83
RECE1EXE rece-empresaxini
Si no se especifica accion por defecto se enviacutea la informacioacuten del archivo de intercambio para autorizar laemisioacuten de factura electroacutenica devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) y demaacutes datos queresponde AFIP
Para CAEA (CAE Anticipado) aplican las siguientes opciones (RECEMRECE1)
solicitarcaea obtiene un CAEA y su respectivo periacuteodo de vigencia (fecha de validez desde y fechade validez hasta)
bull
consultarcaea consulta la informacioacuten correspondiente a un CAEA previamente otorgado (recibeperiacuteodoorden o CAEA)
bull
informarcaeanoutilizado informarcaeanoutilizadoptovta registra en AFIP un CAEA no utilizadobull informarcaea enviacutea la informacioacuten del comprobante emitido y asociado a un CAEAbull
Ejemplo RECE1 para autorizar una factura electroacutenica
Al ejecutar la herramienta sin paraacutemetros se autoriza la factura en el archivo de entrada guardando elresultado de AFIP en el archivo de salida
CPYAFIPWSgt RECE1EXE
Procesando FAC A 4002 00002067 00002067 CUIT 30628789661 $ 12200 IVA $ 2100NRO 2067 Resultado A CAE 65253261906700 Obs Err Reproceso S
Ante cualquier dificultad agregar los paraacutemetros --trace debug para ver los mensajes de depuracioacuten y xmldetallados
Ejemplo RECE1 consulta ultimo comprobante
Ejemplo para obtener el uacuteltimo nuacutemero de factura emitida
CPYAFIPWSgt RECE1EXE ultConsultar ultimo numeroTipo de comprobante 19Punto de venta 2Ultimo numero 62
Si se pasa el tipo de comprobante y punto de venta por linea de comando (luego de ult) en el archivo desalida guardaraacute el dato devuelto por AFIP
CPYAFIPWSgt RECE1EXE ult 1 4001Consultar ultimo numeroUltimo numero 222
Ejemplo RECE1 consulta de comprobante
Es posible recuperar los datos de un comprobante indicando get y tipo de comprobante punto de venta ynuacutemero de comprobante
CPYAFIPWSgt RECE1EXE get 1 5 478Recuperar comprobanteFechaCbte = 20150703
Paraacutemetros 84
CbteNro = 478PuntoVenta = 5TipoDoc = 80NroDoc = 27269434894ImpTotal = 226875CAE = 65273821773505Vencimiento = 20150713EmisionTipo = CAE
Es posible agregar xml yo --trace para ver el mensaje enviado y recibido desde AFIP con datos completosLos datos del comprobante recuperado tambieacuten se guardaraacuten en el archivo de intercambio (salida)
Ejemplo RECE1 consulta puntos de venta
Ejemplo para consultar los puntos de venta habilitados por AFIP
CPYAFIPWSgt RECE1EXE ptosventa
=== Puntos de Venta ===3|EmisionTipoCAE|BloqueadoN|FchBajaNULL4|EmisionTipoCAE|BloqueadoN|FchBajaNULL
Ejemplo RECEX1 consulta monedas con cotizacioacuten
Retorna la cotizacioacuten a la fecha consultada de la base de datos aduanera de todas las monedas que poseancotizacioacuten a la fecha indicada
CPYAFIPWSgt RECEX1EXE monctz Fecha (AAAAMMDD) |024|1757370|2202019||030|10991355|2202019||034|2833349|2202019||009|39777268|2202019||012|10663978|2202019||028|21977839|2202019||014|6073274|2202019||023|0012042|2202019||018|30185896|2202019||019|0358860|2202019||032|0012749|2202019||DOL|3967|2202019||016|4295104|2202019||026|28471159|2202019||033|0060760|2202019||035|11955998|2202019||063|27265191|2202019||015|4659463|2202019||060|451564|2202019||062|0605559|2202019||010|2068376|2202019||029|0006557|2202019||011|1214078|2202019||021|520470|2202019||025|0381832|2202019||031|5761801|2202019||061|5902659|2202019|0 OK
Ejemplo RECE1 consulta de comprobante 85
Entorno
Algunas versiones de COBOL cambian el directorio u otras variables del entorno (codificacioacuten zona horariaetc) En este caso se recomienda armar un archivo RECEBAT
ECHO OFFREM limpiar la zona horaria y cambiar al directorio de la interfaseSET TZ=CD CPYAFIPWSRECEEXE
PyFEPDF generador de PDF de facturas electroacutenicas
La herramienta PyFEPDF permite generar archivos PDF con el contenido de las Facturas Electroacutenicas paraponerlos a disposicioacuten de los clientes o ser enviados electroacutenicamente viacutea email con cualquier servicio decorreos o por web
Utiliza un enfoque similar a las interfaces para webservices por lo que su uso es muy simple totalmenteautomatizado (sin intervencioacuten del usuario) y no necesita herramientas externas (ni impresoras PDF nitipografiacuteas para el coacutedigo de barras)
Cubre toda la operatoria de Factura Electroacutenica seguacuten AFIP dada la Resolicioacuten General 24852006 ynormativa relacionada (RG141503 y RG1361) aplicable a
merado interno (WSFEv1 y WSMTXCA incluyendo importacioacuten con y sin detalle)bull exportacioacuten (WSFEX)bull bono fiscal electroacutenico (WSBFE)bull
Ver muestra baacutesica en facturapdf
La interfaz maneja automaacuteticamente
Logotipos e informacioacuten particular de cada empresabull Disentildeo en PDF libre modificable (incluye disentildeador visual faacutecil e intuitivo)bull Paginado y transporte con muacuteltiples copias (Original Duplicado etc)bull Textos ilimitados (detalles observaciones etc)bull IVA discriminado (subtotales facturas A)bull Coacutedigo de barras Interleaved 2 of 7 con diacutegito verificador (reemplazado por coacutedigo QR)bull Coacutedigo QR (Obligatorio a partir de Marzo 2021 - ver cronograma de implementacioacuten)bull Metadatos en las propiedades del PDF para buacutesquedas y archivamientobull Impresioacuten directa sin intervencioacuten del usuariobull
Nota algunas caracteriacutesticas pueden no estar disponible dado limitaciones del lenguaje de programacioacuten yosistema operativo
De manera similar a las otras interfaces y herramientas el instalador de PyFEPDF para homologacioacuten(evaluacioacuten y pruebas) estaacute disponible en la seccioacuten Descargas
Importante PyFEPDF es una herramienta adicional independiente del resto de los webservices yherramientas y los costos del soporte comercial variacutean dependiendo de las necesidades para implementarlaVer Costos y Condiciones
Entorno 86
Aclaraciones PDF
Coacutedigo de Barras es recomendable generarlo especialmente si se imprime (dependiendo del casoseriacutea obligatorio) Este componente contempla internamente la generacioacuten directa de la imaacutegen demanera vectorial (escalable en cualquier resolucioacuten) seguacuten el formato que requiere AFIP (Interleaved2 of 5) y no es necesario utilizar ninguna tipografia ni cuestioacuten adicional Simplemente debecompletarse el CUIT emisor punto de venta tipo de comprobante CAE y fecha de vencimiento delCAE (esta uacuteltima en formato AFIP AAAAMMDD) El componente contempla tambieacuten el caacutelculo deldiacutegito verificador De no estar todos los datos correctos no se generaraacute el coacutedigo de barras Parainformacioacuten general ver nuestro componente auxiliar PyI25
bull
Observaciones AFIP Si esta presente motivos_obs (respuesta de AFIP en WSFEv1Obs osimilar) deberiacutea agregarse la leyenda El IVA discriminado no puede computarse como CreacuteditoFiscal (RG248508 Art 27) -esto estaacute contemplado internamente en el componente- Por ej unmensaje de observacioacuten de AFIP seriacutea Factura individual DocTipo 80 DocNro 30000000007 nose encuentra registrado en los padrones de AFIP Anteriormente AFIP solo informaba el coacutedigo (09en este caso) para maacutes informacioacuten ver WSFE F136
bull
Discriminacioacuten de IVA el programador es responsable de enviar los datos correctos seguacuten lasdiferentes normativas de AFIP Generalmente el importe de IVA solo se debe discriminar parafacturas clase A o M En las facturas clase B por lo general solo se muestra la tasa pero no el neto niIVA liquidado En las facturas clase C y E generalmente no se muestra la columna de IVA ni NETOEsta loacutegica esta contemplada internamente pero es responsabilidad de la aplicacioacuten que utilice elcomponente el revisar por la consistencia de los datos Salvo en la Factura A para el resto se debeindicar el precio unitario IVA Incluido (de corresponder) y el importe total de cada artiacuteculo tambieacutendeberiacutea ser IVA Incluido en todos los casos (de manera similar a como se emiten los comprobantespor el sitio de clave fiscal de AFIP) Recomendamos utilizar el campo imp_subtotal para evitardiferencias de calculo y redondeo (deberiacutea ser la suma del neto + importes no gravado y exento paracomprobantes clase A e incluir el importe de IVA para los comprobantes clase B)
bull
Descuentos si bien se provee un campo descuento para los importes generales es recomendableque se utilice un artiacuteculo de bonificacioacuten general en el detalle con coacutedigo de unidad de medidaumed=99 y el importe en negativo para un correcto caacutelculo de los subtotales (especialmente si lafactura se extiende por varias paacuteginas) y contemplar la normativa de almacenamientoinformacioacuten yformatos de otros webservices como WSMTXCA WSBFEv1 y WSFEXv1
bull
Logotipo AFIP en las uacuteltimas actualizaciones (107q) se incluye el logotipo de AFIP (similar al quese incluye en las facturas emitidas por clave fiscal) Para que muestre la leyenda ComprobanteAutorizado debe establecerse el campo resultado = A y no debe ser un instalador dehomologacioacuten Proacuteximamente se agregaraacuten maacutes validaciones en este sentido (la constatacioacuten delcomprobante es responsabilidad de la aplicacioacuten que utilice el componente ver WSCDC) Verejemplos y formatos a continuacioacuten para mayor informacioacuten
bull
Requisitos formato de Facturaver httpwwwafipgovarafip259IIcap1bhtmbull
Interfaz COM PyFEPDFDLL
PyFEPDFDLL es una interfaz COM (AutomatizacionActiveX) similar a un Control OCX pero que nonecesita un formulario visual por lo que se puede usar desde desde cualquier lenguaje compatible enWindows (VB VFP Delphi etc) Tambieacuten puede utilizarce desde aplicaciones como MS Excel MS Accessetc
Aclaraciones PDF 87
Objeto COM PyFEPDF propiedades y meacutetodos
El objeto COM se crea invocando a CreateObject(PyFEPDF)
Las propiedades del objeto son
CUIT cuit del emisorbull Version versioacuten de la herramienta (ej 101b)bull InstallDir directorio de instalacioacutenbull
Los meacutetodos generales del objeto para crear una factura son los siguientes (ver ejemplo en VB a continuacioacutenpara maacutes detalles)
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbte_nro imp_total imp_tot_conc imp_neto imp_iva imp_tribimp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz cae fecha_vto_caeid_impositivo nombre_cliente domicilio_cliente pais_dst_cmpobs_comerciales obs_generales forma_pago incoterms idioma_cbtemotivos_obs) recibe toda la informacioacuten del encabezado de una factura seguacuten la legislacioacutenvigente
bull
AgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed preciobonif iva_id imp_iva importe despacho) agrega un item de detalle de artiacuteculoAdicionalmente puede pasarse los paraacutemetros dato_a dato_b dato_c dato_d dato_edespacho tambieacuten es opcional
bull
AgregarIva(iva_id base_imp importe) agrega un subtotal de iva (por cada aliacutecuota)bull AgregarTributo(tributo_id Desc base_imp alic importe) agrega otrosimpuestos (uno por cada ingresos brutos retenciones y percepciones etc)
bull
AgregarCmpAsoc(tipo pto_vta nro) agrega un comprobante asociado a la facturabull
Una vez creada la factura con todos los items se debe especificar el formato mediante los siguientes meacutetodos(ver ejemplo en VB a continuacioacuten para maacutes detalles)
CargarFormato(archivo_csv) crea todos los campos del disentildeo de la factura (layout)leyendolos desde el archivo especificado
bull
AgregarCampo(nombre tipo x1 y1 x2 y2 font size bold italicunderline foreground background align text priority) agrega uncampo manualmente al disentildeo de la factura (layout)
bull
AgregarDato(campo valor pagina) con campo = nombre usado en plantilla el valorpara cada hoja y en pagina el nro de paacutegina o T todas P primera U ultima
bull
Luego se debe crear la plantilla que seraacute rellenada con los datos de la factura y por uacuteltimo se generaraacute ymostraraacute el PDF (ver ejemplo en VB a continuacioacuten para maacutes detalles)
CrearPlantilla(papel orientacion) crea una plantilla con el papel (A4 legal o letter)y orientacioacuten (portrait landscape)
bull
ProcesarPlantilla(num_copias lineas_max qty_pos) procesa los datos de lafactura dentro de la plantilla indicando la cantidad de copioas (1 original 2 duplicado 3triplicado)la cantidad de liacuteneas maacuteximas por paacutegina
bull
GenerarPDF(salida) genera el archivo PDF terminado con el nombre dado en salidabull
Objeto COM PyFEPDF propiedades y meacutetodos 88
MostrarPDF(salida imprimir) muestra el contenido del PDF generado (usando AdobeAcrobat Reader o similar) y opcionalmente lo enviacutea directo a la impresora
bull
AtributosPropiedades especiacuteficos de configuracioacuten
CUIT cuit del emisor (para generar el coacutedigo de barras)bull FmtCantidad formato numeacuterico para cantidades por ej 04 (4 decimales)bull FmtPrecio formato numeacuterico para precios unitarios por ej 02 (2 decimales)bull Locale configuracioacuten regional a utilizar para formatear importes y fechas por ejSpanish_Argentina1252 (Windows) es_ARutf8 (Linux)
bull
Atributos geneacutericos (similares a otros componentes)
Version versioacuten de la interfase (ej 107q)bull InstallDir directorio de instalacioacuten (ej CArchivos de ProgramaPyAfipWs)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Ver Formato de Intercambio PDF y los otros componentes a los webservices para informacioacuten adicional sobrecada campo
Ejemplo PyFEPDF en VB
A modo de demostracioacuten a continuacioacuten se detalla un ejemplo simple (lenguaje Visual Basic) comentando elfuncionamiento baacutesico de la interfaz para generacioacuten de Facturas Electroacutenicas en formato PDF
Crear objeto interface para generacioacuten de FE en PDFSet PyFEPDF = CreateObject(PyFEPDF)DebugPrint PyFEPDFVersionDebugPrint PyFEPDFInstallDir
CUIT del emisorPyFEPDFCUIT = 33693450239
establezco formatos (cantidad de decimales)PyFEPDFFmtCantidad = 04PyFEPDFFmtPrecio = 02
Datos del encabezado de la facturatipo_cbte = 1 Factura Apunto_vta = 40000 prefijocbte_nro = 12345678 nuacutemero de facturafecha = 20110327concepto = 3 datos del clientetipo_doc = 80 nro_doc = 30000000007nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16 coacutedigo para exportacioacutenid_impositivo = PJ54482221-l totales del comprobanteimp_total = 12200 imp_tot_conc = 000imp_neto = 10000 imp_iva = 2100imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000
Ejemplo PyFEPDF en VB 89
fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturadofecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libremoneda_id = 012moneda_ctz = 05forma_pago = 30 diasincoterms = FOB termino de comercio exterior para exportacioacutenidioma_cbte = 1 idioma para exportacioacuten (no usado por el momento)motivos_obs = 11 motivo de observacioacuten (F136 y otros)
Coacutedigo de Autorizacioacuten Electroacutenica y fecha de vencimiento (para facturas tradicionales no imprimir el CAE ni coacutedigo de barras)cae = 61123022925855fecha_vto_cae = 20110320
Creo la factura (internamente en la interfaz)ok = PyFEPDFCrearFactura( _ concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fecha_vto_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivos_obs)
Parametros adicionales del encabezado
ok = PyFEPDFEstablecerParametro(localidad_cliente Hurlingham)ok = PyFEPDFEstablecerParametro(provincia_cliente Buenos Aires)
Leyenda Comprobante Autorizado (verificar previamente con WSCDC o similar)
ok = PyFEPDFEstablecerParametro(resultado A)
Agregar comprobantes asociados (si es una NCND)tipo = 19pto_vta = 2nro = 1234pyfepdfAgregarCmpAsoc(tipo pto_vta nro)
Agrego subtotales de IVA (uno por alicuota)iva_id = 5 coacutedigo para aliacutecuota del 21base_imp = 100 importe neto sujeto a esta aliacutecuotaimporte = 21 importe liquidado de ivaok = PyFEPDFAgregarIva(iva_id base_imp importe)
Agregar cada impuesto (por ej IIBB retenciones percepciones etc)tributo_id = 99 codigo para 99-otros tributosDesc = Impuesto Municipal Matanzabase_imp = 10000 importe sujeto a este tributoalic = 100 alicuota (porcentaje) de este tributoimporte = 100 importe liquidado de este tributook = PyFEPDFAgregarTributo(tributo_id Desc base_imp alic importe)
Agrego detalles de cada item de la facturau_mtx = 123456 unidadescod_mtx = 1234567890123 coacutedigo de barrascodigo = P0001 codigo interno a imprimir (ej articulo)
Ejemplo PyFEPDF en VB 90
ds = Descripcion del producto P0001qty = 2 cantidadumed = 7 coacutedigo de unidad de medida (ej 7 para unidades)precio = 100 precio neto (A) o iva incluido (B)bonif = 0 importe de descuentosiva_id = 5 coacutedigo para aliacutecuota del 21imp_iva = 42 importe liquidado de ivaimporte = 242 importe total del itemdespacho = Nordm 123456 numero de despacho de importacioacutenok = PyFEPDFAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
ds = Descuento generalumed = 99precio = -100imp_iva = -21importe = -121ok = PyFEPDFAgregarDetalleItem( ds 0 umed _ precio 0 iva_id imp_iva importe)
Agrego datos adicionales fijosok = PyFEPDFAgregarDato(logo PyFEPDFInstallDir + fpdfpng)ok = PyFEPDFAgregarDato(EMPRESA Empresa de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE1 Direccion de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE2 Capital Federal)ok = PyFEPDFAgregarDato(ObservacionesGenerales1 Nota al pie1)
Cargo el formato desde el archivo CSV (opcional) (carga todos los campos a utilizar desde la planilla)ok = PyFEPDFCargarFormato(PyFEPDFInstallDir + facturacsv)
Agrego campos manualmente (opcional)nombre = prueba tipo = T T texto L lineas I imagen etcX1 = 50 Y1 = 150 X2 = 150 Y2 = 255 coordenadas (en milimetros)Font = Arial Size = 20 Bold = 1 Italic = 1 Underline = 1 tipo de letraforeground = 000000 background = FFFFFF colores de frente y fondoAlign = C Alineacioacuten Centrado Izquierda Derechaprioridad = 2 Orden Z menor prioridad se dibuja primero (para superposiciones)Text = iexclpruebaok = PyFEPDFAgregarCampo(nombre tipo X1 Y1 X2 Y2 _ Font Size Bold Italic Underline _ foreground background _ Align Text priority)
completo campos personalizados de la plantillaok = PyFEPDFAgregarDato(custom-nro-cli Cod123)ok = PyFEPDFAgregarDato(custom-pedido 1234)ok = PyFEPDFAgregarDato(custom-remito 12345)ok = PyFEPDFAgregarDato(custom-transporte Camiones Ej SRL)
Creo plantilla para esta factura (papel A4 vertical)papel = A4 o letter para carta legal para oficioorientacion = portrait o landscape (apaisado)ok = PyFEPDFCrearPlantilla(papel orientacion)num_copias = 3 original duplicado y triplicadolineas_max = 24 cantidad de linas de items por paacuteginaqty_pos = izq (cantidad a la izquierda de la descripcioacuten del artiacuteculo) Proceso la plantillaok = PyFEPDFProcesarPlantilla(num_copias lineas_max qty_pos) Genero el PDF de salida seguacuten la plantilla procesadasalida = facturapdfok = PyFEPDFGenerarPDF(salida)
Ejemplo PyFEPDF en VB 91
Abro el visor de PDF y muestro lo generado (es necesario tener instalado Acrobat Reader o similar)imprimir = False cambiar a True para que lo envie directo a la impresoraok = PyFEPDFMostrarPDF(salida imprimir)
Ver pyfepdfbas (ejemplo completo)
Herramienta PyFEPDFEXE por liacutenea de comando (consola)
La herramienta dispone de un programa PyFEPDFEXE que puede ser utilizado desde la consola y generarfacturas en formato PDF dado archivos de entada en texto o DBF
Los paraacutemetros son
--ayuda este mensajebull --licencia muestra la licencia del programabull --debug modo depuracioacuten (detalla y confirma las operaciones)bull --formato muestra el formato de los archivos de entradasalidabull --prueba genera y autoriza una factura de prueba (no usar en produccioacuten)bull --cargar carga un archivo de entrada (txt o dbf) con los datos del comprobantebull --grabar graba un archivo de salida (txt o dbf) con los datos de los comprobantesbull --pdf genera la imaacutegen de factura en PDFbull --dbf utiliza tablas DBF en lugar del archivo de entrada TXTbull
Ver receini para paraacutemetros de configuracioacuten
Ejemplos
Ver el formato de archivos de entrada
PYFEPDFEXE --formato
1
Realizar una prueba (genera facturatxt y facturapdf)
PYFEPDFEXE --prueba --mostrar --grabar
2
Realizar una prueba de DBF (genera encabezadbf detallesdbf ivadbfpermisodbf tributodbf cbteasocdbf datodbf y facturapdf)
PYFEPDFEXE --prueba --dbf --mostrar --grabar
3
Cargar archivo de entrada (leer facturatxt y generar facturapdf) mostrando la factura
PYFEPDFEXE --cargar --mostrar
4
Cargar tablas DBF (leer encabezadbf detallesdbf ivadbf permisodbftributodbf cbteasocdbf datodbf y generar facturapdf) imprimiendo la factura
PYFEPDFEXE --cargar --dbf --mostrar --imprimir
5
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYFEPDF_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico
Herramienta PyFEPDFEXE por liacutenea de comando (consola) 92
PYFEPDFEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Formato de Intercambio PDF
Para lenguajes donde no es posible utilizar objetos COM como en algunas versiones de COBOL sedesarrolloacute una interfase de texto para poder generar PDF con esta herramienta Adicionalmente laherramienta para generacioacuten de PDF soporta manejo por tablas DBF Estas tablas pueden ser generadas concualquier libreriacutea o aplicacioacuten compatible (dBase FoxPro Clipper incluso pueden ser abiertas con planillasde caacutelculo)
Los nombres de los campos y funcionamiento son los mismos entre los meacutetodos y archivos de texto perorecortados por compatibilidad con DBF
En este caso se puede utilizar un uacutenico archivo de texto (facturatxt) o varias tablas DBF (ver meacutetodorelacionado a la interfaz COM para maacutes informacioacuten) Los tipos de registros son
0 para encabezado (encabezadbf) - meacutetodo CrearFactura y EstablecerParametrobull 1 para detalles (detalle dbf) - meacutetodo AgregarDetalleItembull 2 para permisos (permisosdbf) - meacutetodo AgregarPermisobull 3 para comprobantes asociados (comprobadbf) - meacutetodo AgregarCmpAsocbull 4 para iva (ivadbf) - meacutetodo AgregarIvabull 5 para tributos (tributodbf) - meacutetodo AgregarTributobull 6 para datos opcionales (AFIP) -no utilizado-bull 9 para datos adicionales (datosdbf) -soacutelo PDF- - meacutetodo AgregarDatobull
A continuacioacuten se detalla el formato de cada registro y una breve descripcioacuten
Encabezado PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 1 tiporeg N(10) valor 0 (encabezado)
webservice Alfanumerico 6 2 webserviceC(6) wsfe wsbfe wsfex etc
fecha_cbte Alfanumerico 8 8 fechacbteC(8) ej 20100308
tipo_cbte Numerico 2 16 tipocbteN(20)
ej 1 para Facturas A (seguacuten tabla deparaacutemetros de AFIP Mercado Interno Exportacioacuten)
punto_vta Numerico 5 18 puntovtaN(40) ej 0001
cbte_nro Numerico 8 23 cbtenroN(80) ej 00000001
tipo_expo Numerico 1 31 tipoexpoN(10)
tipo de exportacioacuten (1 bienes 2 servicios 3otros)
permiso_existente Alfanumerico 1 32 permisoexiC(1) permiso de exportaioacuten S o N o nulo
pais_dst_cmp Numerico 3 33
Formato de Intercambio PDF 93
paisdstcmpN(30)
coacutedigo de paiacutes seguacuten tabla de paraacutemetros deAFIP (200 ARGENTINA 203 BRASIL212 ESTADOS UNIDOS etc)
nombre_cliente Alfanumerico 200 36 nombreclieC(200)
tipo_doc Numerico 2 236 tipodocN(20)
coacutedigo de tipo de documento seguacuten tablaAFIP WSFEv1 (80 CUIT)
nro_doc Numerico 11 238 nrodocN(110)
nuacutemero de documento (DNI CUIT etc) -ocorresponde a cuit_pais_cliente enexportacioacuten-
domicilio_cliente Alfanumerico 300 249 domicilioc M
id_impositivo Alfanumerico 50 549 idimpositiC(50)
categoriacutea frente al IVA (Resp InscriptoMonotributo etc) o identificacioacutenimpositiva en paiacutes destino (por ej CNJPRUC VAT ID etc)
imp_total Importe 153 599 imptotalN(153) importe total (con hasta 3 decimales)
imp_tot_conc Importe 153 614 imptotconcN(153)
importe conceptos no gravados (con hasta 3decimales)
imp_neto Importe 153 629 impnetoN(153)
importe neto sujeto a caacutelculo de IVA (conhasta 3 decimales)
impto_liq Importe 153 644 imptoliqN(153)
importe de IVA liquidado (con hasta 3decimales)
impto_liq_nri Importe 153 659 imptoliqnrN(153)
importe de IVA liquidado a RNI (con hasta 3decimales) -obsoleto-
imp_op_ex Importe 153 674 impopexN(153)
importe de operaciones exentas de IVA (conhasta 3 decimales)
impto_perc Importe 15 689 imptopercN(152)
importe de percepciones (con hasta 3decimales) -obsoleto ver tributos-
imp_iibb Importe 153 704 impiibbN(153)
mporte de ingresos brutos (con hasta 3decimales) -obsoleto ver tributos-
impto_perc_mun Importe 153 719 imptopercmN(153)
importe de percepciones municipales (conhasta 3 decimales) -obsoleto ver tributos-
imp_internos Importe 153 734 impinternoN(153)
importe de impuestos internos (con hasta 3decimales) -obsoleto ver tributos-
imp_trib Importe 153 749 imptribN(153)
importe total de impuestos y tributos (noincluye IVA)
moneda_id Alfanumerico 3 764 monedaidC(3)
coacutedigo de moneda seguacuten tabla de paraacutemetrosde AFIP (PES peso DOL doacutelares etc)
moneda_ctz Importe 106 767 monedactzN(106)
cotizacioacuten de la moneda (con hasta 6decimales)
obs_comerciales Alfanumerico 1000 777 obscomerci M observaciones comercialesobs_generales Alfanumerico 1000 1777 obsgeneral M observaciones generales
forma_pago Alfanumerico 50 2777 formapagoC(50)
descripcioacuten de la forma de pago (ejEfectivo)
incoterms Alfanumerico 3 2827 teacutermino de comercio exterior (ej FOB)
Encabezado PDF 94
incotermsC(3)
incoterms_ds Alfanumerico 20 2830 incotermsdC(20)
descripcioacuten de termino de comercio exterior(Free on board)
idioma_cbte Alfanumerico 1 2850 idiomacbteC(1)
idioma del comprobante seguacuten tabla deparaacutemetros de AFIP (1 espantildeol etc)
zona Alfanumerico 5 2851 zona C(5) -no utilizado-
fecha_venc_pago Alfanumerico 8 2856 fechavencpC(8)
fecha de vencimiento del pago (soloservicios)
presta_serv Numerico 1 2864 prestaservN(10) prestacioacuten de servicio (S o N)
fecha_serv_desde Alfanumerico 8 2865 fechaservdC(8) fecha de inicio del servicio facturado
fecha_serv_hasta Alfanumerico 8 2873 fechaservhC(8) fecha de finalizacioacuten del servicio facturado
cae Alfanumerico 14 2881 cae C(14) Coacutedigo de Autorizacioacuten Electroacutenicootorgado por AFIP
fecha_vto Alfanumerico 8 2895 fechavto C(8) fecha de vencimiento del CAE otorgado porAFIP
resultado Alfanumerico 1 2903 resultado C(1) resultado A aceptado R rechazado(respuesta AFIP)
reproceso Alfanumerico 1 2904 reprocesoC(1)
S si hubo reprocesamiento N si esprocesamiento original (respuesta AFIP)
motivos_obs Alfanumerico 1000 2905 motivosobs M
coacutedigo o descripcioacuten del motivo de rechazo uobservacioacuten del comprobante ej 11 -numeracioacuten 02 cuit no autorizada (respuestaAFIP)
id Numerico 15 3905 id N(150) identificador secuencial de la factura (usar 0)
telefono_cliente Alfanumerico 50 3920 telefonoclC(50)
localidad_cliente Alfanumerico 50 3970 localidadcC(50)
provincia_cliente Alfanumerico 50 4020 provinciacC(50)
formato_id Numerico 10 4070 formatoidN(100) -no utilizado-
email Alfanumerico 100 4080 email C(100) destinatario del PDFpdf Alfanumerico 100 4180 pdf C(100) ruta y nombre de archivo PDF a generar
err_code Alfanumerico 6 4280 errcode C(6) coacutedigo de error informado por AFIP (EjfexerrorErrCode=505)
err_msg Alfanumerico 1000 4286 errmsg M mensaje de error informado por AFIP (EjfexerrorErrMsg=Error de Lockeo)
Dato_adicional1 Alfanumerico 30 5286 datoadic01C(30) datos extra optativos
Dato_adicional2 Alfanumerico 30 5316 datoadic02C(30) datos extra optativos
Encabezado PDF 95
Dato_adicional3 Alfanumerico 30 5346 datoadic03C(30) datos extra optativos
Dato_adicional4 Alfanumerico 30 5376 datoadic04C(30) datos extra optativos
Campos extra (por compatibilidad con otras herramientas y formatos)
Nombre Tipo Long Pos DBF Descripcioacuten
descuento Importe 153 5405 descuentoN(153)
importe general de descuento (no recomendadousar descuento por itemdetalle)
cbt_desde Numerico 8 5420 cbtdesdeN(80)
nuacutemero de comprobante inicial del lote (usarcbte_nro)
cbt_hasta Numerico 8 5428 cbthastaN(80)
nuacutemero de comprobante final del lote (usarcbte_nro)
concepto Numerico 1 5436 conceptoN(10)
1 productos 2 servicios 3 productos + servicios(ver presta_serv)
no_usar Importe 153 5437 nousarN(153) -reservado-
imp_iva Importe 153 5452 impivaN(153) iacutedem impto_liq
emision_tipo Alfanumerico 4 5467 emisiontipC(4) CAE o CAEA
imp_subtotal Importe 153 5471 impsubtotaN(153)
se calcula internamente si no es pasado imp_neto+ imp_tot_conc + imp_op_ex - descuento(subtotal sin IVA ni otros tributos)
cat_iva Numerico 2 5486 cativa N(20) -reservado-NOTA estos campos pueden no utilizarse o tener el mismo valor que los campos originales estaacuten paracontemplar casos especiales y en general no deben utilizarse
Detalle Item PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 1
codigo Alfanumerico 30 2 codigoC(30) coacutedigo del artiacuteculo
qty Importe 122 32 qty N(122) cantidad (con 2 decimales)
umed Numerico 2 44 umed N(20) coacutedigo de unidad de medida seguacuten tabla de paraacutemetrosAFIP WSMTXCA (ej 1 - kg)
precio Importe 123 46 precioN(123) importe unitario (con hasta 3 decimales)
importe Importe 143 58 importeN(143) importe subtotal (con hasta 3 decimales)
iva_id Numerico 5 72 ivaid N(50) coacutedigo de aliacutecuota de IVA seguacuten tabla de paraacutemetrosAFIP WSFEv1 WSMTXCA (ej 5 - IVA RI Tasa
Detalle Item PDF 96
General 21 )
ds Alfanumerico 4000 77 ds M descripcioacuten del artiacuteculo (usar ltbrgt para salto delinea)
ncm Alfanumerico 15 4077 ncm C(15) coacutedigo habilitado del Nomenclador Comuacuten deMercosur -soacutelo WSBFEv1-
sec Alfanumerico 15 4092 sec C(15) coacutedigo habilitado de la Secretariacutea de Comercio-reservado-
bonif Importe 15 4107 bonifN(152)
importe de descuento (con 2 decimales) para estearticulo
imp_iva Importe 15 4122 impivaN(152) importe liquidado de IVA para este articulo
despacho Alfanumerico 20 4137 despachoC(20) -soacutelo importacioacuten-
u_mtx Numerico 10 4157 umtxN(100) unidades MTX
cod_mtx Alfanumerico 30 4167 codmtxC(30) coacutedigo de barras MTX
dato_a Alfanumerico 15 4197 datoa C(15) dato extra optativodato_b Alfanumerico 15 4212 datob C(15) dato extra optativodato_c Alfanumerico 15 4227 datoc C(15) dato extra optativodato_d Alfanumerico 15 4242 datod C(15) dato extra optativodato_e Alfanumerico 15 4257 datoe C(15) dato extra optativoNota en los campos numeacutericos (archivo de texto) para usar maacutes de los decimales especificados de manerapredeterminada indicar el punto explicitamente por ej cantidad = 0123456 para 6 decimales encantidad En la estructura del DBF cada programa puede cambiar la cantidadad de decimales
Importante para Facturas B de manera similar a las facturas tradicionales el IVA no debe estardiscriminado (enviar el precio unitario y subtotal final IVA incluido) y se debe enviar NULL en imp_iva
IVA PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 4
iva_id Numerico 5 2 ivaid N(50) tipo de aliacutecuota (ver tablas de paraacutemetros deWSFEv1 por ej 5 para 21)
base_imp Importe 153 7 baseimpN(153)
base imponible (neto gravado) para estaaliacutecuota
importe Importe 153 22 importe N(153) importe IVA liquidado para esta aliacutecuotaTributo PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 valor 5
IVA PDF 97
tiporegN(10)
tributo_id Numerico 5 2 tributoidN(50)
tipo de tributo (ver tablas de paraacutemetros de WSFEv1por ej 2 para impuestos provinciales)
desc Alfanumerico 100 7 desc C(100) descripcioacuten (por ej IIBB prov de BsAs)
base_imp Importe 153 107 baseimpN(153) base imponible para este impuesto (pude ser 0 nulo)
alic Importe 15 122 alic N(152) aliacutecuota (porcentaje por ej 3)
importe Importe 153 137 importeN(153) importe liquidado para este impuesto
Comprobante Asociado PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 3cbte_tipo Numerico 3 2 cbtetipo N(30) tipo de comprobante asociado (iacutedem encabezado)
cbte_punto_vta Numerico 4 5 cbtepuntovN(40) punto de venta
cbte_nro Numerico 8 9 cbtenro N(80) nuacutemero de comprobantePermisos PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea)- usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 2
id_permiso Alfanumerico 16 2 idpermisoC(16)
identificador del permiso de exportacioacuten ej99999AAXX999999A
dst_merc Numerico 3 18 dstmercN(30) coacutedigo de paiacutes de destino seguacuten tabla de AFIP
Datos PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 16 tiporeg N(10) valor 9campo Alfanumerico 30 17 campo C(30) nombre del campo en la plantilla PDFvalor Alfanumerico 1000 47 valor M contenido para el campo en la plantilla PDFpagina Alfanumerico 3 1047 pagina C(3) P primera U ultima T todasEste tipo de registro es opcional resultados similares se pueden lograr con el archivo de configuracioacuten(receini seccioacuten [PDF]) meacutetodo del Componente AgregarDato o directamente con el disentildeador visual(modificando la plantilla facturacsv)
Configuracioacuten PyFEPDF RECEINI
De manera similar a las otras herramientas PyFEPDF puede configurarse por el archivo de configuracioacutenRECEINI con las siguientes opciones predeterminadas
Tributo PDF 98
[FACTURA]ARCHIVO=tipoletranumeroFORMATO=facturacsvDIRECTORIO=PAPEL=letterORIENTACION=portraitDIRECTORIO=SUBDIRECTORIO=LOCALE=Spanish_Argentina1252FMT_CANTIDAD=06FMT_PRECIO=03CANT_POS=izqENTRADA=facturatxtSALIDA=facturapdf
[PDF]LOGO=fpdfpngEMPRESA=Empresa de PruebaMEMBRETE1=Direccion de PruebaMEMBRETE2=Capital FederalCUIT=CUIT 30-00000000-0IIBB=IIBB 30-00000000-0IVA=IVA Responsable InscriptoINICIO=Inicio de Actividad 01042006
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalle = detallesdbfPermiso = permisodbfDato = datodbf
Seccioacuten [FACTURA]
Controla la generacioacuten del PDF (si no se especifica campo PDF en tabla encabezado)
ARCHIVO nombre de archivo PDF a generar por ej incluyendo tipoletranumerobull FORMATO formato del PDF a generar por ej en planilla facturacsvbull DIRECTORIO directorio donde almacenar los archivos PDFbull SUBDIRECTORIO nombre de la carpeta a generar (una por diacutea de manera predeterminada)bull LINEAS_MAX cantidad de lineas para el detalle (artiacuteculos) por defecto 24bull PAPEL legal A4 letterbull ORIENTACION portrait landscape (apaisada)bull LOCALE configuracioacuten regional (Spanish_Argentina1252 en Windows es_ARutf8 en Linux)bull FMT_CANTIDAD formato de cantidad (04 para 4 decimales)bull FMT_PRECIO formato de precio unitario (03 para 3 decimales)bull CANT_POS posicioacuten de la columna cantidad (izq o der)bull ENTRADA nombre del archivo de intercambio (facturatxt)bull SALIDA nombre del archivo a generar (dejar en blanco para generar uno distinto seguacuten laconfiguracioacuten ARCHIVO)
bull
COPIAS cantidad de copias en el PDF (Original Duplicado Triplicado etc)bull
Configuracioacuten PyFEPDF RECEINI 99
Seccioacuten [PDF]
Controla campos del PDF a personalizar (si no se especifican los campo texto en tabla formato del PDF)
LOGO archivo con imagen logotipo por ej serpientepngbull EMPRESA ej Empresa de Pruebabull MEMBRETE1 ej Direccion de Pruebabull MEMBRETE2 ej Capital Federalbull CUIT CUIT 20-26756539-3bull IIBB IIBB 20-26756539-3bull IVA IVA Responsable Inscriptobull INICIO Inicio de Actividad 01042006bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull Dato = datodbfbull
Campo Subtotal
Dado que en general la columna importe deberiacutea mostrar Subtotal cIVA por similitud con el PDF quegenera AFIP por comprobantes en linea por disentildeo (actualizacioacuten 108b)
Si es A o M se imprime el subtotal SIN IVAbull Si es B o C se imprime el subtotal CON IVAbull
En el caso de factura A debe sumar los items sin el IVA ya que en la ultima hoja se le suma el IVA alsubtotal
Igualmente el campo subtotal podriacutea sobre-escribirse utilizando el meacutetodo AgregarDato(campovalor pagina) o el tipo de registro para datos adicionales En campo = subtotal el valor a imprimiren cada hoja y pagina el nro de paacutegina (T todas P primera U ultima) Se podriacutea agregar el dato paratodas las paginas vacio y para la uacuteltima con el valor que sea necesario (en ese orden)
Disentildeador Visual PyFEPDF
La herramienta incluye el progama designerexe para modificar visualmente los disentildeos de factura
Los archivos de entrada estaacuten son planillas CSV describiendo el disentildeo Al abrilos el disentildeador muestra laplantilla con los elementos donde se ubicaraacuten los futuros valores de cada factura
La barra de herramientas cuenta con botones para
Abrir guardar e imprimir (vista previa) las plantillasbull
Seccioacuten [PDF] 100
Agregar eliminar y duplicar elementosbull Buscar elementos por nombre o por textobull
Sobre un elemento con doble click izquierdo se abre un dialogo para editar el texto y con click derecho seabre un dialogo con la ventana de propiedades Es posible seleccionar muacuteltiples elementos manteniendopresionado shift y click izquierdo Para mover los elementos se puede usar las teclas de flechas o arrastrar loselementos
Ver a continuacioacuten los tipos de elementos y su definicioacuten
A modo de ejemplo se muestra un pantallazo del Disentildeador Visual con el elemento logo seleccionadoeditando sus propiedades
Para ejecutarlo simplemente ir al directorio de la interfaz y correr designerexe
Tipos de elementos para PyFEPDF
Para el disentildeo del PDF es posible establecer los siguientes tipos de campo (elementos graacuteficos)
Texto (T) con tipo de letra (fuente) tamantildeo formato (italico negrita subrayado) tamantildeo yalineacioacuten
bull
Liacuteneas (L) y Cuadros (B)bull Imaacutegenes (I) en formato PNG o JPGbull Coacutedigo de Barras (CB) en formato Entrelazado 2 de 5bull Codigo QR (I) (Requerido por AFIP a partir del 01032021 ver cronograma)bull
Definicioacuten de elementos para PyFEPDF
Las columnas de la planilla (facturacsv) o estructura de la tabla formato para definir los elementos graacuteficoses
name (alfanumeacuterico) nombre del campobull type (alfanumeacuterico) tipo del campo T L I B CBbull x1 (numeacuterico) coordenada horizontal izquierda (en mm)bull y1 (numeacuterico) coordenada vertical superior (en mm)bull x2 (numeacuterico) coordenada horizontal derecha (en mm)bull y2 (numeacuterico) coordenada vertical inferior (en mm)bull font (alfanumeacuterico) nombre de la tipografiacutea (fuente)bull size (numeacuterico) tamantildeo en puntos del textobull bold (verdaderofalso) estilo negrita para el texto (1 o 0)bull italic (verdaderofalso) estilo cursiva (itaacutelica) para el texto (1 o 0)bull underline (verdaderofalso) estilo subrayado para el texto (1 o 0)bull foreground (numeacuterico) color RGB de dibujobull backgroud (numeacuterico) color RGB de relleno del fondo (si aplica al elemento)bull align (alfanumeacuterico) alineacioacuten I izquierda D derecha C centradobull text (alfanumeacuterico) texto estaacutetico o foacutermulabull priority (numeacuterico) orden z en el que se dibujan los elementos (a menor prioridad se dibuja primero)bull
Estilos HTML Adicionalmente los estilos negrita itaacutelica y subrayado pueden establecerse en tiempo deejecucioacuten encerrando todo el texto con el tag html correspondiente (en el orden indicado) Ej
Disentildeador Visual PyFEPDF 101
ltBgttexto en negritaltBgtbull ltIgttexto en cursivaltIgtbull ltUgttexto subrayadoltUgtbull ltBgtltIgtltUgttexto en negrita cursiva y subrayadoltUgtltIgtltBgtbull
PyI25 Generador de Coacutedigos de Barras
Utilitario PYI25EXE (py25py) para generar los coacutedigos de barras Interleaved 2 of 5 (Entrelazado 2 de 5)seguacuten Resolucioacuten General 170204
Ver Descargas para descargar el instalador
Los datos a consignar son (ver RG170204 Art 1 Anexo 1)
Clave Unica de Identificacioacuten Tributaria (CUIT) del emisor de la factura (11 caracteres)bull Coacutedigo de tipo de comprobante (3 caracteres)bull Punto de venta (5 caracteres)bull Coacutedigo de Autorizacioacuten de Electroacutenica (CAE) o Coacutedigo de Autorizacioacuten de Impresioacuten (CAI) (14caracteres)
bull
Fecha de vencimiento del CAE CAI (8 caracteres)bull Diacutegito verificador (1 caraacutecter) ver rutinabull
El utilitario genera una imaacutegen en formato PNG o JPG funciona tanto de liacutenea de comando consola (DOS)como por interfaz COM (automatizacioacuten DLL similar a OCX) y es uacutetil para facturas electroacutenicas otradicionales (autoimpresores o imprentas)
Imaacutegen de Ejemplo de Coacutedigo de Barras para CAE
Importante De generar imaacutegenes para imprimir es recomendado respetar la resolucioacuten de la impresora (Laacutesero Chorro de tinta no pueden usarse matriz de punto) por ej con una resolucioacuten por lo menos tres vecesmayor que la utilizada en pantalla
Nota Nuestro generador de PDF ya contempla generar los coacutedigos de barra para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PYI25EXE (utilitario por linea de comando)
Opciones
--barras a continuacioacuten se indica el coacutedigo de barras en formato numeacutericobull --noverificador deshabilitar caacutelculo de digito verificadorbull --archivo a continuacioacuten se indica el nombre del archivo de salidabull
Ejemplo de uso (generar el archivo pruebapng)
PYI25EXE --barras 202675653930240016120303473904220110528 --mostrar --archivo pruebapng
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYI25_cliEXE queesta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primer como
Definicioacuten de elementos para PyFEPDF 102
segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and is startedautomatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico PYI25EXEpuede estar compilado para ser registrado en Windows (componente para VBVFP y similares)
Objeto PYI25 (interfaz COM)
Objeto PyI25 (registrar PYI25DLL)
Meacutetodos
DigitoVerificadorModulo10(codigo) recibe el codigo de barras en formato numeacutericodevuelve el diacutegito verificador en base 10
bull
GenerarImagen(codigo archivo anchobase ancho alto extension )recibe el codigo de barras en formato numeacuterico nombre de archivo de salida tamantildeos y formato deimagen (PNG o JPEG) y genera el codigo de barras especificado
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyI25 As Object
Set PyI25 = CreateObject(PyI25)
cuit tipo_cbte punto_vta cae fch_venc_caebarras = 202675653930240016120303473904220110529 calculo digito verificadorbarras = barras + PyI25DigitoVerificadorModulo10(barras)
genero imagen en png aspecto 1x para ver en pantalla o por mailok = PyI25GenerarImagen(barras Cbarraspng)
formato en jpg aspecto 3x maacutes ancho para imprimir o incrustarok = PyI25GenerarImagen(barras cbarrasjpg 9 0 90 JPEG)
PyQR Generador de Coacutedigos QR
Utilitario PYQREXE (pyqrpy) para generar los coacutedigos QR seguacuten RG48922020
Cronograma de Implementacioacuten
Para responsables inscriptos en el impuesto al valor agregado que hayan efectuado operaciones (gravadasexentas y no gravadas) declaradas en el impuesto durante el antildeo calendario 2020 por un importe total neto deimpuestos y tasas
11 Superior a PESOS DIEZ MILLONES ($10000000-) desde el 1 de marzo de 2021
12 Superior a PESOS DOS MILLONES ($2000000-) e inferior o igual a PESOS DIEZ MILLONES ($10000000-) desde el 1 de abril de 2021
13 Superior a PESOS QUINIENTOS MIL ($500000-) e inferior o igual a PESOS DOS MILLONES ($2000000-) desde el 1 de mayo de 2021
PYI25EXE (utilitario por linea de comando) 103
2 Para el resto de los responsables inscriptos en el impuesto al valor agregado sujetos exentos ante dichogravamen y pequentildeos contribuyentes inscriptos en el Reacutegimen Simplificado (Monotributo) a partir del 1junio de 2021
Los datos a consignar son (ver QR especificaciones)
Fecha de emisioacutenbull CUIT del emisorbull Punto de ventabull Tipo de Comprobantesbull Nuacutemero de Comprobantebull Importe totalbull Monedabull Cotizacioacutenbull Tipo Documento Receptor (de corresponder)bull Nuacutemero de Documento de Receptor (de corresponder)bull Coacutedigo del Tipo de Autorizacioacutenbull Coacutedigo de Autorizacioacutenbull
Ejemplo Visual Basic script pyafipwsblobdevelopejemplospyqrpyqrvbs
Ejemplo Visual Basic claacutesico
Dim pyqr As Object
Set pyqr = CreateObject(PyQR)
Establecer tipo de imagen (PNG o JPEG)PyQRExtension = JPEG
Generar un nombre de archivo temporal para la imagenarchivo = pyqrCrearArchivo
Alternativo Especificar ubicacioacuten y extensioacutenpyqrarchivo = CQRgeneradopyqrjpg
DebugPrint archivo
ver = 1fecha = 2020-10-13cuit = 30000000007pto_vta = 10tipo_cmp = 1nro_cmp = 94importe = 12100moneda = DOLctz = 65tipo_doc_rec = 80nro_doc_rec = 20000000001tipo_cod_aut = Ecod_aut = 70417054367476
genero imagen en png con el codigo qr
url = pyqrGenerarImagen(ver fecha cuit pto_vta tipo_cmp nro_cmp _ importe moneda ctz tipo_doc_rec nro_doc_rec _ tipo_cod_aut cod_aut)
PyQR Generador de Coacutedigos QR 104
DebugPrint url
Paraacutemetros por liacutenea de comandos
--datos recibe los datos a procesar version fecha cuit pto_vta tipo_cmp nro_cmp importemoneda ctz tipo_doc_rec nro_doc_rec tipo_cod_aut cod_aut
bull
--prueba genera un QR de muestrabull --archivo permite especificar una ruta (de lo contrario usa un archivo temporal)bull --mostrar abre el archivo para visualizar la imagenbull
Ejemplo por liacutenea de comando
Linux
python pyqrpy --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
Windows
pyqrexe --archivo qrjpg --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
En windows usar pyqrexe en vez de python pyqrpy
Imaacutegen de Ejemplo de Coacutedigo QR
PyQR Generador de Coacutedigos QR 105
Nota Nuestro generador de PDF ya contempla generar los coacutedigos QR para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PyEmail Envio de correo electroacutenico
Herramienta para enviar correos electroacutenicos incluyendo por ej adjunto PDF de con factura electroacutenica
Soporta servidores SMTP con y sin autenticacioacuten
Proacuteximamente soporte para correos con contenido HTML e imagenes de factura embebida
PyEmail Envio de correo electroacutenico 106
PYEMAILEXE utilitario de correo
Para utilizar esta herramienta debe tener configurado la seccioacuten [EMAIL] en el receini
Ejemplo desde linea de comando
PYEMAILEXE motivo reingartgmailcom mensaje FacturaA0002-00117826pdf
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYEMAIL_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacutericoPYEMAILEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Objeto PyEmail (interfaz COM)
Objeto PyEmail (registrar PyEmailDLL)
Meacutetodos
Conectar(servidor usuario clave) recibe el nombre del servidor a conectarse usuario y contrasentildea(opcional)
bull
Enviar(remitente motivo destinatario mensaje archivo) envia el correo electroacutenico con los datosproporcionados
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyEmail As Object
Set PyEmail = CreateObject(PyEmail)
Primer paso conexioacuten al servidor (por unica vez)servidor = mailsistemasagilescomarusuario = norespondernsiscomarclave = 1238478puerto = 465ok = PyEmailConectar(servidor usuario clave)
Envio el o los correos (repetir por cada FE)remitente = norespondersistemasagilescomardestinatario = marianosistemasagilescomarmensaje = Se envia factura electronica adjuntaarchivo = CFACTURAPDF
ok = PyEmailEnviar(remitente motivo destinatario mensaje archivo)
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361)
Con la interfaz se provee un utilitario para generar los archivos requeridos por el aplicativo SIRED (SIAP) dela Resolucioacuten General 136102 referente al almacenamiento digital de los comprobantes emitidos (Libro
PYEMAILEXE utilitario de correo 107
Ventas Detalle y Cabeceras de Factura)
El formato de entrada es una planilla csv similar al PyRece respetando los tipos de datos y coacutedigos requeridospor los webservices con las siguientes columnas tipo_cbte punto_vta cbt_numero fecha_cbte tipo_docnro_doc imp_neto impto_liq imp_total cae fecha_vto nombre
Ejemplo de uso
CD CPYAFIPWSRG1361EXE planillacsv
Generaraacute los archivos
VENTAS_200902txtbull CABECERA_200902txtbull DETALLE_200902txtbull
Para maacutes informacioacuten ver RG136102 de AFIP
Disentildeo de registro (archivos de texto)bull Guia Temaacuteticabull
Ejemplo
Ejemplo en Visual Basic claacutesico
sired = CreateObject(SIRED)
creo una factura de ejemplotipo_cbte = 2punto_vta = 4000fecha = 20150721concepto = 3tipo_doc = 80nro_doc = 30000000007cbte_nro = 12345678imp_total = 12200imp_tot_conc = 300imp_neto = 10000imp_iva = 2100imp_trib = 100imp_op_ex = 200imp_subtotal = 10000fecha_cbte = fechafecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fechafecha_serv_hasta = fechamoneda_id = PESmoneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libre
nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361) 108
id_impositivo = Responsable Inscriptoforma_pago = 30 diasincoterms = FOBidioma_cbte = 1motivo = 11
cae = nullfch_venc_cae = null
siredCrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fch_venc_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivo)
agrego comprobantes asociado
tipo = 91pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)tipo = 5pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)
tributo_id = 99desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100siredAgregarTributo(tributo_id desc base_imp alic importe)
iva_id = 5 21base_imp = 100importe = 21siredAgregarIva(iva_id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890123codigo = P0001ds = Descripcion del producto P0001qty = 100umed = 7precio = 10000bonif = 000iva_id = 5imp_iva = 2100importe = 12100despacho = uNordm 123456siredAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
siredAgregarDato(prueba 1234)
id_factura = siredGuardarFactura()
siredEstablecerParametro(cae 61123022925855)siredEstablecerParametro(fch_venc_cae 20110320)
Ejemplo 109
siredEstablecerParametro(motivo_obs )ok = siredActualizarFactura(id_factura)
Otros Servicios WEB y herramientas similares de AFIP
Constatacioacuten de Comprobantes
WSCDC es la Interfaz para los Servicios Web para verificar en forma dinaacutemica si los comprobantes recibidosse encuentran autorizados por la AFIP Ver manual especiacutefico en ConstatacionComprobantes
Padroacuten de Contribuyentes
Herramienta para consultar el archivo completo de la condicioacuten tributaria de los contribuyentes y responsables(RG1817) Ver manual especiacutefico en PadronContribuyentesAFIP
Coacutedigo de Trazabilidad de Granos
WSCTGv2 es la Interfaz para generar Coacutedigo de Trazabilidad de Granos AFIP (RG2806 RG3113 RG3493)Ver manual especiacutefico en CodigoTrazabilidadGranos
Liquidacioacuten Primaria de Granos
WSLPG es la Interfaz para autorizar y ajustar Liquidaciones Primarias de Granos (RG34192012) Vermanual especiacutefico en LiquidacionPrimariaGranos
Consulta de Operaciones Cambiarias
WSCOC es la Interfaz para Consultas de Operaciones (moneda extranjera) Ver manual enConsultaOperacionesCambiarias
wDigDepFiel Depositario Fiel
Servicio Web de AFIP para Aviso de Recepcioacuten y Aceptacioacuten de la Digitalizacioacuten de Documentos por partede los Prestadores de Servicios de Archivos y Digitalizacioacuten (PSAD) y Aviso de Digitalizacion deDocumentos por parte de los Despachantes o de los Prestadores de Servicios de Archivos y Digitalizacioacuten(PSAD) -
Sujetos Alcanzados ver Resolucioacuten General 25702009
Actualmente la interfaz expone las funcionalidades de este webservice
Aviso de Digitalizacioacutenbull Aviso de Recepcioacuten y Aceptacioacutenbull Meacutetodo Dummy para verificacioacuten de funcionamientobull
Ejemplo Interfaz COM wDigDepFiel
De igual manera que el resto de los servicios web el web service de depositario fiel puede ser invocado desdelenguajes visuales y no visuales (en windows) utilizando la interfaz COM
Otros Servicios WEB y herramientas similares de AFIP 110
Ejemplo en Visual Basic (similar para Visual FoxPro Delphi etc)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet wDigDepFiel = CreateObject(wDigDepFiel) Setear tocken y sing de autorizacioacuten (pasos previos)wDigDepFieltoken = WSAAtokenwDigDepFielsign = WSAAsign
CUIT del emisor (debe estar registrado en la AFIP)wDigDepFielcuit = 20267565393
Conectar al Servicio Web de Depositario Fiel (homologacioacuten)ok = wDigDepFielConectar(httpstestdiaafipgovarDiaWswDigDepFielwDigDepFielasmx)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)wDigDepFielDummyDebugPrint appserver status wDigDepFielAppServerStatusDebugPrint dbserver status wDigDepFielDbServerStatusDebugPrint authserver status wDigDepFielAuthServerStatus
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393codigo = 000 carpeta completa 001 carpeta adicional FechaHora en formato ISO 2010-06-07T002351750000fecha_hora_acept = Format(Now() yyyy-MM-dd) amp T amp _ Format(Now() hhmmss) amp 000000ticket = 1234errCode = wDigDepFielAvisoRecepAcept(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie _ codigo fecha_hora_acept ticket)DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoRecepAcept Coacutedigo Error amp wDigDepFielCodError
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000 1234567890123456cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393cuit_ata = 20267565393codigo = 000 carpeta completa 001 carpeta adicionalticket = 1234url = httpwwwexamplecomhashing = db1491eda47d78532cdfca19c62875aade941dc2
inicializo aviso limpio datos (familias)wDigDepFielIniciarAvisocodigo = 02cantidad = 1wDigDepFielAgregarFamilia codigo cantidadcodigo = 03cantidad = 3wDigDepFielAgregarFamilia codigo cantidad
cantidad_total = 4
Ejemplo Interfaz COM wDigDepFiel 111
errCode = wDigDepFielAvisoDigit(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie cuit_ata _ codigo url ticket hashing cantidad_total)
DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoDigit Coacutedigo amp wDigDepFielCodError
Otros Servicios Web relacionados de otros organismos
Remito Electroacutenico (COT ARBA)
Interfaz para Servicio Web Coacutedigo de Operaciones de Traslado (COT) Remito Electronico correspondienteal articulo 41 del Coacutedigo Fiscal que establece la obligacioacuten de amparar el traslado o transporte de bienes en elterritorio de la provincia de Bs As Ver manual especiacutefico en RemitoElectronicoCotArba
Trazabilidad de Medicamentos (ANMAT)
Interfaz para Servicio Web Coacutedigo de Trazabilidad de Medicamentos (SOAP) correspondiente a laResolucioacuten 4352011 del Ministerio de Salud y Disposicioacuten 36832011 de ANMAT Sistema Nacional deTrazabilidad de Medicamentos que deberaacuten implementar las personas fiacutesicas o juriacutedicas que intervengan en lacadena de comercializacioacuten distribucioacuten y dispensacioacuten de especialidades medicinales incluidas en elRegistro de Especialidades Medicinales SNT Especificacioacuten Teacutecnica V2 Ver manual especiacutefico enTrazabilidadMedicamentos
Trazabilidad de Precursores Quiacutemicos (SEDRONAR)
Interfaz para Servicio Web Trazabilidad de Precursores Quiacutemicos TrazaMedSDRN (SOAP) para informarmovimientos de Sustancias Quiacutemicas Controladas Decreto 109596 modificado por Decreto 116100Sistema Nacional de Trazabilidad modulo de Precursores Quiacutemicos (RENPRE SEDRONAR PAMI INSSJP)que deberaacuten implementar el operador de precursores quiacutemicos obtencioacuten de nuacutemero de CUFE (Coacutedigo deUbicacioacuten Fiacutesica de Establecimiento) Entrenamiento y Alineacioacuten de Datos Resolucioacuten 90012 RENPREVer manual especiacutefico en TrazabilidadPrecursoresQuimicos
Certificados
Generacioacuten
Para poder utilizar la interfase se deben tramitar y asociar los certificados de homologacioacutenproduccioacuten en laAFIP Para mas informacioacuten ver Paacutegina principal de Factura Electroacutenica (AFIP)
Crear Pedido CSR con WSAA
A partir de la revisoacuten 1632 (ver Actualizaciones Factura Electroacutenica moacutedulo WSAApy versioacuten 110b) esposible generar el pedido de certificado automaacuteticamente utilizando la opcioacuten --crear_pedido_cert)La herramienta solicitaraacute el CUIT buscaraacute la denominacioacuten del contribuyente en el padroacuten de AFIP ygeneraraacute los archivos necesarios (clave privada y pedido de certificado)
Ejemplo
Otros Servicios Web relacionados de otros organismos 112
CPyAfipWsgt WSAA-cliexe --crear_pedido_certreingartS55t-B~pyafipws$ python wsaapy --crear_pedido_certIngrese un CUIT 20267565393Denominacioacuten seguacuten AFIP REINGART MARIANO ALEJANDROLongitud clave 2048 (bits)Se crearon los archivosclave_privada_20267565393_201609105952keypedido_cert_20267565393_201609105952csr
Tambieacuten pueden especificarse esos datos por linea de comando (CUIT nombrealias empresa y longitud de laclave -2048 bits predeterminados-) ejecutando
WSAA-cliexe --crear_pedido_cert 20267565393 PyAfipWS SHA-2 REINGART MARIANO ALEJANDRO 2048
Nota desde el coacutedigo fuente ejecutar python wsaapyTambieacuten es posible realizar el procedimiento por programa (automatizadamente) llamando a los meacutetodoswsaaCrearClavePrivada(clave_privada) y wsaaCrearPedidoCertificado(cuitempresa nombre pedido_cert)
La herramienta deja listos los archivos respectivos pudiendo subir el pedido de certificado CSR a AFIP (tantoen homologacioacuten como en produccioacuten)
WSASS
Video Explicativo completo (incluyendo WSASS autogestioacuten de certificados en homologacioacuten AFIP) httpswwwyoutubecomwatchv=ietDXvUzVIQ
OpenSSL
Pasos para crear el certificado (maacutes informacioacuten en Instructivo AFIP)
Bajar e instalar OpenSSL para Windows 098i (historico) o 102k o superior (recomendado) Encaso de inconvenientes instalar Redistribuible de Visual C++
bull
Ingresar por liacutenea de comando al directorio de OpenSSL COpenSSLbingtbull Generar la clave privada
openssl genrsa -out empresakey 2048
bull
Generar el pedido (CSR certificate signing request) por liacutenea de comando
openssl req -new -key empresakey -subj C=ARO=[empresa]CN=[nombre]serialNumber=CUIT [nro_cuit] -out empresacsr
Reemplazar [empresa] por el nombre de su empresa Ej Nombre de la empresa tal cualfigura en la consulta de inscripcioacuten ej Empresa S A
diams
Reemplazar [nombre] por su nombre o server hostname Nombre del servicio aplicacioacuten uunidad operativa ej Interfaz PyAfipWs
diams
Reemplazar [nro_cuit] por la CUIT sin guiones de la empresa o programador Ej CUITxxxxxxxxxxx
diams
bull
Enviar el empresacsr a la AFIP para que lo firmen y devuelvan el certificado empresacrtbull
Ejemplo concreto
Crear Pedido CSR con WSAA 113
openssl req -new -key empresakey -subj C=ARO=Mariano ReingartCN=PyAfipWsserialNumber=CUIT 20267565393 -out empresacsr
Generar Certificado CRT
Una vez generado el pedido de certificado CSR (ver puntos anteriores) el traacutemite es
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Nuevo Certificado en el WSASSdiams Nombre simboacutelico del DN un alias del computador fiscal (nombre de fantasiacutea ej PC1)diams Solicitud de certificado en formato PKCS10 abrir con un editor de texto el CSR y copiaraqui el contenido
diams
Presionar Crear DN y obtener certificadodiams Abrir un archivo nuevo y copiar el campo Resultado (este es el certificado usar extensioacutenCRT)
diams
bull
Produccioacuten Ingresar por clave fiscal al servicio online Administracioacuten de Certificados DigitalesIr a Agregar Alias escribir el alias (nombre relacionado al certificado)diams Subir el archivo CSR presionar Agregardiams Luego buscar y descargar el certificado CRTdiams
bull
Con esta interfase no es necesario convertir el certificado en formato pkcs12 ni importarlo alrepositorio de Windows
bull
Para maacutes informacioacuten ver instructivo oficial AFIP
Asociacioacuten
Para poder usar los servicios web se debe asociar el certificado al webservice y CUIT (empresa) que loutilizaraacute
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Crear autorizacioacuten a servicio en el WSASSdiams Seleecionar el Nombre simboacutelico del DN a autorizar (igual que en el paso anterior)diams Revisar el CUIT representado y quien genera la autorizacioacutendiams Seleccionar el Servicio al que desea acceder (por ej wsfe factura electroacutenica)diams Presionar Crear autorizacioacuten de Acceso y revisar el resultadodiams
bull
Produccioacuten en el sitio de AFIP ingresar por clave fiscalEntrar en Administrador de Relaciones de Clave Fiscaldiams Elegir Nueva Relacioacutendiams Presionar BUSCAR para seleccionar el webservice de AFIP por ej ws - FacturacioacutenElectroacutenica
diams
Presionar BUSCAR para seleccionar el Representante seleccionar el nombre del alias delComputador Fiscal (ver seccioacuten anterior)
diams
Confirmardiams
bull
Anteriormente en produccioacuten debiacutea realizarse utilizando el servicio de clave fiscal ARFE - GestionarRelaciones yendo a Realizar una nueva Asociacioacuten completando Empresa Servicio y computador-certificado- que utilizara los webservices
OpenSSL 114
Para maacutes informacioacuten en produccioacuten ver instructivos oficiales de la AFIP
obtener certificado AFIPbull asociar certificado AFIPbull
Es el mismo traacutemite para la renovacioacuten (ns1cmscertexpired Certificado expirado) debesubirse el arcihvo CSR (pedido de certificado) y descargar el nuevo CRT Recordamos que los certificadostienen una vigencia de 2 antildeos en produccioacuten y 1 antildeo en homologacioacuten
Pre-requisitos para Produccioacuten (RECE)
Para poder usar Factura Electroacutenica en Produccioacuten (modo definitivo) ademaacutes de los puntos mencionadosanteriormente dentro de Clave Fiscal servicio online Regimenes de facturacioacuten y registracioacuten(REARRECERFI) es necesario
Adherirse al reacutegimen (realizarlo con anterioridad este traacutemite puede demorar varias semanas)Importante en el Rubro I C) RECE RCEL (Factura Electroacutenica y Factura Electroacutenica en Linea)especificar RECE (no RCEL que es para Comprobantes en linea y Facturador Plus nocontemplados por los webservices)
bull
Dar de alta los nuevos puntos de ventas (uno por cada webservice a utilizar factura nacionalexportacioacuten bono fiscal etc)
bull
Para maacutes informacioacuten ver demo interactiva oficial empadronamiento AFIP
Descargas
OpenSSL para windowsbull Redistribuibe VC++bull
Comprobacioacuten de Autenticacioacuten (WSAA)
Para descartar problemas teacutecnicos de acceso en produccioacuten u homologacioacuten (y verificar la validez delcertificado generado) se puede utilizar la herramienta WSAAEXE WSAA-cliEXE en modo depuracioacuten(sin necesidad de autorizar una factura solo solicitar acceso) yo el mensaje XML devuelto porWSAACallWSAA()
CPYAFIPWSgtWSAA-cliEXE reingartcrt reingartkey wsfe 2400 httpswsaaafipgovarwsservicesLoginCms --trace
Usando CERT=reingartcrt PRIVATEKEY=reingartkey URL=httpswsaaafipgovarwsservicesLoginCms SERVICE=wsfex TTL=2400Creando TRA------------------------------------------------------------------------------ltxml version=10 encoding=UTF-8gtltloginTicketRequest version=10gt ltheadergt ltuniqueIdgt1279058341ltuniqueIdgt ltgenerationTimegt2010-07-13T181901ltgenerationTimegt ltexpirationTimegt2010-07-13T193901ltexpirationTimegt ltheadergt ltservicegtwsfexltservicegtltloginTicketRequestgt------------------------------------------------------------------------------
Asociacioacuten 115
Frimando TRALlamando WSAA--------------------------------------------------------------------------------POST httpswsaaafipgovarwsservicesLoginCmsSOAPAction httpargovafipdiffacturaelectronicaloginCmsContent-length 3369Content-type textxml charset=UTF-8
================================================================================El archivo TAxml se ha generado correctamente
Nota Cambiar WSAAEXE por WSAA-CLIEXE o viceversa dependiendo del paquete de instalacioacuten o comoeste compilado (si aparece el mensaje This program host a COM object an is started automatically) Parausarlo desde el coacutedigo fuente utilizar en su lugar python wsaapy
Para descartar cualquier problema teacutecnico se puede utilizar la salida que es la traza de depuracioacuten de lacomunicacioacuten con AFIP a la mesa de ayuda (requerimiento y respuesta xml)
Si se estariacutea conectando correctamente a produccioacuten el certificado y las URL son correctas etc se deberiacuteaconstatar que
El ticket de requerimiento de acceso (TRA) correctamente solicita servicio correcto (wsfex)ltservicegtwsfexltservicegt
bull
Se estaacute solicitando acceso a los servidores del ambiente correcto (wsaa_url) POSThttpswsaaafipgovarwsservicesLoginCms (produccioacuten) o POSThttpwsaahomoafipgovarwsservicesLoginCms (homologacioacuten)
bull
El equipo que responde seriacutea del ambiente correcto perezaafipgovarenvidiaafipgovar iraafipgovar (produccioacuten) o avariciaafipgovar(homologacioacuten) Nota los nombres de los servidores pueden cambiar y solo se informan en caso deerror
bull
Si la autenticacioacuten es exitosa (El archivo TAxml se ha generado correctamente en elmensaje XML contenido en dicho archivo se puede verificar los siguientes datos
Fuente AFIP produccioacuten (ltsourcegtCN=wsaa O=AFIP C=AR SERIALNUMBER=CUIT33693450239ltsourcegt) sinoacute diriacutea CN=wsaahomo O=AFIP C=ARSERIALNUMBER=CUIT 33693450239
bull
Destino datos del certificado de produccioacutenhomologacioacuten (C=ar O=pyafipws-sistemasagiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart)
bull
Si el ambiente es el correcto (produccioacutenhomologacioacuten) y sigue devolviendo acceso denegadons1coenotAuthorized Computador no autorizado a acceder al servicio(govafipdeseindvadacsuaviewwsaaLoginFault) revisar el certificado ARFE(asociacioacuten de servicio) RECEREARRFI sobre reacutegimen habilitado puntos de venta y demaacutes traacutemites anteAFIP Si aparece error 600 ValidacionDeToken Error al verificar hashVerificacionDeHash No valida la firma digital se estaacute usando un sign y token en elambiente incorrecto (de produccioacuten en homologacioacuten y viceversa)
Comprobacioacuten de Autenticacioacuten (WSAA) 116
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)
De manera similar a lo expuesto anteriormente se provee una aplicacioacuten visual a modo de ejemplo paracomprobar el funcionamiento de la interfaz y los certificados tramitados desde AFIP
El instalador para este aplicacioacuten puede descargarse de
instalar-ej-wsaa-202zip (archivado en 1GoogleCode)bull
Por defecto se instala en CArchivos de Programawsaaej-wsaaexe
Importante Es necesario configurar correctamente el certificado y clave privada con la ruta completa a dichosarchivos
Para pruebas en produccioacuten cambiar la URL ahttpswsaaafipgovarwsservicesLoginCms y configurar los certificados
La version de la interfaz no debe decir Homologacioacuten y debe permitir cambiar la URL sino deben reinstalarlos instaladores para produccioacuten eliminando cualquier archivo anterior
Importante generalmente solo debe correr el ejemplo no instalar ni actualizar el componente WSAA si tieneuna versioacuten superior (o incluida con otro webservice como WSFEv1 o WSLPG) o esta usando el instaladorpara produccioacuten Si no lo tiene instalado puede usar instalador-WSAA-202cexe o superior
Errores Frecuentes
Los siguientes son posibles interpretaciones y soluciones a los errores que enviacutean los servidores de AFIP
Fallas SOAP
Falla SOAP ns1coenotAuthorized o ns1cmscertuntrusted
En WSAA descartando que se este usando el certificado del ambiente incorrecto (certificado dehomologacioacuten en produccioacuten y viceversa) es necesario que el certificado y CUIT esteacuten habilitados paraacceder al servicio web especificado (wsfe wsfex wsbfe wsctg wDigDepFiel etc) No es suficiente generarel certificado (en homologacioacuten o en produccioacuten) hay que solicitar explicitamente acceso al serviciorequerido ver Asociacioacuten de Certificado
Los servicios no relacionados a factura electroacutenica en produccioacuten tienen otros meacutetodos para asociar loscertificados
Ver Comprobacioacuten de Autenticacioacuten WSAA con informacioacuten para determinar o depurar el problema deacceso
Mensajes de Error Original
Computador no autorizado a acceder los servicios de AFIP (ns1coenotAuthorized)bull Certificado no emitido por AC de confianza (ns1cmscertuntrusted)bull
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA) 117
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso alWSN solicitado
Este error es reportado por AFIP cuando se esta solicitan varios tickets de acceso para el mismo certificado yservicio
Ver Reutilizacioacuten de Ticket de Acceso
Falla SOAP Server was unable to read request ---gt There is an error in XML document (41339) ---gt Input string was not in a correct format
Este error correponde al protocolo de intercambio de datos (ver Errores por Tipos de Datos) y puede significarque
Un campo obligatorio no fue completadobull Se completoacute un campo con un tipo de datos invaacutelido (float en lugar de int coma en vez de punto etc)bull Se especificoacute un valor no esperado por el web servicebull
En cualquier caso se puede revisar el mensaje XML de requermiento (atributos xml_request o XmlRequest) ybuscar la etiqueta con datos incorrectos en la liacutenea y caracter donde se informa el error (por ej en este casoliacutenea 4 cerca del caracter 1339) Ver maacutes informacioacuten y rutinas en Manejo de Excepciones
Otras fallas SOAP
WSAA y otros webservices pueden devolver errores no documentados o capturados por AFIP por ej
Server was unable to process request ---ampgt This OracleTransactionhas completed it is no longer usable
bull
SoapFault soapenvServer Could not initialize classorghibernatetransformTransformers
bull
Nuestra interfaz no utiliza Java ni Hibernate por lo que este tipo de problemas son cuestiones internas deAFIP Los errores Oracle u ORA son un problema interno de la base de datos de AFIP
Puede ocurrir en homologacioacuten y se debe esperar a que AFIP solucione el problema
En estos casos para produccioacuten se puede consultar con la mesa de ayuda sriafipgovar (seguramente es untema que lo resolveraacuten en el diacutea y no requiera una intervencioacuten de programacioacuten o configuracioacuten especial)
Errores generales AFIP
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token
Posiblemente haya un problema interno en AFIP (frecuentemente se soluciona automaacuteticamente ya que puedeser un problema de los servidores de AFIP ver abajo) o se este enviando incorrectamente el WSAAToken(por ej el lenguaje de programacioacuten o la base de datos recortoacute el string) Revisar que dicho dato se esteacutecopiando tal cual al webservice de negocio (WSFEv1Token WSMTXCAToken etc) o utilizar los nuevosmeacutetodos como WSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado118
En python se puede analizar el sign ejecutando
import base64print base64b64decode(wsaaToken)
Que deberiacutea mostrar un XML (token del ticket de acceso) como el siguiente
ltxml version=10 encoding=UTF-8 standalone=yesgtltsso version=20gt ltid unique_id=788962471 src=CN=wsaahomo O=AFIP C=AR SERIALNUMBER=CUIT 33693450239 gen_time=1401116887 exp_time=1401160147 dst=CN=wsfe O=AFIP C=ARgt ltoperation value=granted type=logingt ltlogin uid=C=ar O=pyafipws-sistemas agiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart service=wsfe regmethod=22 entity=33693450239 authmethod=cmsgt ltrelationsgt ltrelation reltype=4 key=20267565393gt ltrelationsgt ltlogingt ltoperationgtltssogt
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 a la firma
Posiblemente se este enviando incorrectamente el WSAASign (por ej el lenguaje de programacioacuten o la basede datos recortoacute el string) Revisar que dicho dato se esteacute copiando tal cual al webservice de negocio(WSFEv1Sign WSMTXCASign etc) o utilizar los nuevos meacutetodos comoWSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
600 ValidacionDeToken Error al verificar hash VerificacionDeHash No valid la firmadigital
Este error es reportado por AFIP cuando no se estaacute enviando al webservice de negocio (WSFEv1WSMTXCA WSFEXv1 etc) el Token y Sign obtenido con WSAA (o se lo enviacutea vaciacuteo)
Esto puede deberse porque no se esteacute validando correctamente el ticket de requerimiento de acceso(certificado invaacutelido fecha invaacutelida ambiente de produccioacuten homologacioacuten incorrecto ticket de acceso yaotorgado etc) Revisar que la URL de cada webservice sea correcta (homologacioacuten o produccioacuten tanto deWSAA como del servicio web de negocio WSFEv1 WSMTXCA etc) y que el certificado corresponda alambiente correcto
Ver Manejos de excepciones para detectar el inconveniente en WSAA
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC
No estaacuten sincronizados la fecha y hora del equipo con los servidores de AFIP
En linux se actualiza con
sudo ntpdate timeafipgovar
En windows se actualiza yendo a Propiedades del Reloj Hora de Internet introduciendotimeafipgovar
Otros mensajes similares
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token119
Token vencido fecha y hora de vencimiento del token enviado - fecha y hora actual del servidorbull Validaciondetoken No validaron las fechas del token Gen Time Exp Time Now Utcbull WSAA xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid Eltiempo de generacioacutenexpiracioacuten es invaacutelido generationTime posee formato o dato invaacutelido (ej en elfuturo o maacutes de 24 hs de antiguedad)
bull
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken No aparece CUITen lista de relaciones
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesovaacutelido pero se intenta operar con un CUIT incorrecto yo que no se corresponde al certificado Revisar que elCUIT sea correcto y que esteacute asociado al servicio y certificado (ver ARFE en punto anterior)
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken Error al verificarhash VerificacionDeHash No valid la firma digital
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el ambiente requerido (por ej ticket de acceso de homologacioacuten usado en produccioacuten) o no seenvioacute correctamente el tocken y sign
Usuario no autorizado para realizar esta operacioacuten Validacionde Token No valido idSistema wsfex (Id Sistema de token es wsfe)
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el servicio web requerido (por ej ticket de acceso de factura nacional -wsfe- usado enexportacioacuten -wsfex-)
Se debe revisar el valor del servicio al crear el requerimiento de acceso (CreateTRA)
Problemas con los certificados
Error inesperado no existe el archivo o directorio de certificadoclave privada
Este error corresponde a que la interfaz no encuentra los archivos del certificadoclave privada o la ruta notiene alguacuten directorio Revisar la ruta completa y reintentar
Mensaje de Error Original (certificado)
Unexpected Python Error lttype exceptionsIOErrorgt [Errno 2] No such file or directoryreingartcrt
Mensaje de Error Original (clave privada)
Unexpected Python Error 936error02001002system libraryfopenNo such file ordirectorycryptobiobss_filec122fopen(reingartkeyr) 936error2006D080BIOroutinesBIO_new_fileno such filecryptobiobss_filec125 None
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC 120
Error inesperado La clave privada no coincide con el certificado
Este error corresponde a que el certificado no fue creado con la clave privada dada por lo que no se puederealizar la encriptacioacuten necesaria Revisar que la clave privada sea con la que se creoacute el pedido de certificadooriginal (CSR) y reintentar Si no se cuenta con la clave privada original es imposible utilizar el certificadopor lo que es necesario generar y asociar uno nuevo
Mensaje de Error Original
Unexpected Python Error ltclass M2CryptoSMIMESMIME_Errorgt936error0B080074x509 certificate routinesX509_check_private_keykey valuesmismatchcryptox509x509_cmpc399 936error2107407FPKCS7routinesPKCS7_signprivate key does not match certificatecryptopkcs7pk7_smimec76
Error Inesperado La clave privada es invaacutelida
Mensaje de Error Original
Unexpected Python Error 936error0906D06CPEM routinesPEM_read_biono startlinecryptopempem_libc647Expecting ANY PRIVATE KEY
Este error corresponde a que la clave privada no estaacute en el formato correcto (texto plano PEM) seguramenteel archivo se encuentra en PKCS12 (binario certificado x509 + clave privada con extensioacuten p12 o pfx)lo que no es necesario para esta interfaz
Para convertir de pkcs12 a pem utilizar
openssl pkcs12 -in empresap12 -out empresapem -nodes
Eso generaraacute el archivo empresapem donde
La clave privada (key) se encuentra entre -----BEGIN RSA PRIVATE KEY----- y-----END RSA PRIVATE KEY-----
bull
El certificado (crt) se encuentra entre -----BEGIN CERTIFICATE----- y -----ENDCERTIFICATE-----
bull
Copiar dichas lineas en archivos separados Los archivos deben incluir el encabezado (-----BEGIN ) ypie (-----END ) para ser vaacutelidos
En caso de ser necesario para recorrer el camino inverso generar archivo PKCS12 desde PEM (no necesariopor esta interfaz) realizar
openssl pkcs12 -export -inkey empresakey -in empresacrt -out empresap12
Error inesperado Mala Desencriptacioacuten
Este error corresponde a que el certificado fue creado usando una frase de seguridad (passphrase) por lo queen tiempo de ejecucioacuten solicita entrada dicha contrasentildea (bloqueandose si no se proporciona)
Mensaje de Error Original
Error inesperado La clave privada no coincide con el certificado 121
M2CryptoEVPEVPError 3079395008error06065064digital enveloperoutinesEVP_DecryptFinal_exbaddecryptevp_encc3303079395008error0906A065PEM routinesPEM_do_headerbaddecryptpem_libc428
Para remover la passphrase (contrasentildea) por ej del archivo privadapem y grabarlo en privadakeyejecutar el siguiente comando
openssl rsa -in privadapem -out privadakey
Error inesperado Esperando certificado
El certificado proporcionado es invaacutelido
Es posible leer los datos de un certificado utilizando el comando openssl
openssl x509 -in reingartcrt -noout -text
Deberiacutea mostrar la informacioacuten completa del certificado
Certificate Data Version 3 (0x2) Serial Number 0791000000000000 Signature Algorithm sha1WithRSAEncryption Issuer CN=AFIP-Autoridad Certificante Homologacion C=AR ST=Capital Federal L=Ciudad Autonoma de Buenos Aires O=Administracion Federal de Ingresos Publicos OU=Subdireccion General de Sistemas y TelecomunicacionesemailAddress=ac_homoafipgovarserialNumber=CUIT 33693450239 Validity Not Before Feb 1 174604 2010 GMT Not After Feb 1 174604 2011 GMT Subject CN=Mariano ReingartserialNumber=CUIT 20267565393 O=PyAfipWs-Sistemas Agiles C=AR
Si no lo muestra posiblemente el certificado esteacute en otro formato (ver como convertir desde pk7 en puntosanteriores)
Mensaje de Error Original
M2CryptoX509X509Error 3078817472error0906D06CPEM routinesPEM_read_bionostart linepem_libc650Expecting CERTIFICATE
Error al dar de alta computador
A partir de Agosto de 2016 aparentemente AFIP estaacute solicitando claves maacutes largas pudiendose presentar elsiguiente error al tratar de generar un certificado por WSASS Autoservicio de Acceso a WebServices(TESTINGHOMOLOGACIOacuteN)
ERROR clsCrearComputador (CUIT=20267565393 ALIAS=test_1024) createComputer Error al dar de alta al computador (CUIT=20267565393 ALIAS=test_1024) La longitud de clave puacuteblica debe ser estar comprendida entre 2048 y 8192 bits
En este caso de debe generar la clave con mayor cantidad de bits por ej indicando el paraacutemetro 2048 aInstructivo OpenSSL
Error inesperado Mala Desencriptacioacuten 122
La herramienta WSAA 110g ya crea de manera predeterminada claves de 4096 bits ver Crear Pedido CSR
Se estima que estas cuestiones afectaraacuten en PRODUCCIOacuteN cuando venzan la mayoriacutea de los certificados paraese entorno el 21 de Febrero de 2016 Es posible con este componente revisar el vencimiento de cada crtcon los Metodos para Certificados
Excepcioacuten SSLError X509_load_cert_crl_file
No se puede cargar el archivo afip_ca_infocrt de la lista de autoridades de certificacioacuten de confiaza(CACERT) necesario para verificar el canal seguro como solicita AFIP
Ese archivo en las ultimas actualizaciones se encuentra en la carpeta conf o puede ser descargado desde el el repositorio
El archivo debe ser copiado a la carpeta principal donde esteacute el programa WSAA o configurar el paraacutemetroCACERT con la ruta a la ubicacioacuten completa
Mensaje de Error Original
[Errno 185090050] _sslc345 error0B084002x509 certificateroutinesX509_load_cert_crl_filesystem lib
Falla SOAP WSAA (SoapFault)
En ciertas ocaciones WSAA puede denegar el acceso con los siguientes mensajes
ns1cmscertexpired Certificado expiradobull ns1xmlbad No se ha podido interpretar el XML contra el SCHEMAbull cmscertuntrusted Certificado NO emitido por un AC de confianzabull cmssigninvalid cmsbad y cmsbadbase64 no se esta informando correctamente el mensajecriptograacutefico firmado (Firma invaacutelida o algoriacutetmo no soportado)
bull
Generalmente se esta tratando de usar un certificado invaacutelido o expirado se estaacute pasando mal alguacuten paraacutemetro(servicio o tiempo de vida) o se estaacute tratando de acceder al ambiente equivocado (el cerificado es deproduccioacuten y el servidor de homologacioacuten o viceversa)
Ver consulta tema anterior para revisar el certificado Modo Homologacioacuten Produccioacuten y Comprobacioacuten deAutenticacioacuten WSAA
Errores de Conectividad
Antes las fallas de conexioacuten sobrecarga caiacutedas de internet u otros problemas de comunicacioacuten la interfazpuede devolver los siguientes errores (en su mayoriacutea del lenguaje de programacioacuten Python o sistemaoperativo)
AttributeError NoneType object has no attribute makefile no sepuede establecer el canal de comunicacioacuten (socket) puede que internet no este funcionando en elcliente
bull
socketgaierror [Errno -2] Name or service not known no se puede resolverel nombre del equipo revise los servidores DNS asignados a su conexioacuten de internet
bull
Error al dar de alta computador 123
socketerror [Errno 104] Connection reset by peer la conexioacuten fue cerradapor la contraparte (servidor AFIP) posiblemente por sobrecarga
bull
lturlopen (11001 getaddrinfo failed)gt no se puede resolver el nombre de archivorevise los DNS y si estaacute utiliando alguacuten servidor intermedio (proxy)
bull
ExpatError Not well formed token el servidor posiblemente no esta devolviendo XMLcorrecto debido a un error interno
bull
BadStatusLine ResponseNotReady significa que los servidores de AFIP no contestan algocoherente (compatible con el protocolo HTTP)
bull
AttributeError Tag not Found Body (no elements found) significa que losservidores de AFIP no contestan un XML vaacutelido seguacuten el protocolo de webservices SOAP
bull
SSLError The read operation timed out la conexioacuten SSLTLS supero el tiempo deespera posiblemente es un error de conectividad de Internet o los servidores de AFIP estaacuten caiacutedos
bull
Service Unavailable El servidor de AFIP no estaacute disponible y no devuelve un mensaje XMLcorrecto
bull
ServerNotFoundError Unable to find the server atservicios1afipgovar no estaacute resolviendo el nombre del Servidor de AFIP a la direccioacutenIP revisar la configuracioacuten DNS con su proveedor de Internet
bull
error [Errno 111] Connection refused error [Errno 10061] No sepuede establecer una conexioacuten ya que el equipo de destino denegoacuteexpresamente dicha conexioacuten revisar que no esteacute mal configurado el servidor proxy(comentar o no enviar parametro si no corresponde)
bull
En todos estos casos se recomienda reintentar la operatoria luego de unos instantes despueacutes de verificar laconexioacuten de internet Se puede probar ingresando a la URL del webserice (por ej[ httpsservicios1afipgovarwsfev1serviceasmxWSDL
WSFEv1]) con un navegador y ver si les abre correctamente la paacutegina
Tambieacuten puede haber un tema de antivirus o proxy que esteacute bloqueando la conexioacuten saliente En ese caso(servidor intermedio para poder salir a internet) se debe consultar con los administradores de la red yposiblemente se necesite configurar
El paraacutemetro proxy en el meacutetodo Conectar formato usuarioclaveservidorpuerto (verejemplo)
bull
o seccioacuten [PROXY] en el archivo receini (ver ejemplo)bull
Ver la siguiente seccioacuten si el problema persiste Recordar que a veces funciona o no dependiendo del lugardesde donde se conecta el cliente ya que AFIP tiene una granja de servidores pueden probar reconectandosea internet desde otra IP para ver si los deriva a un servidor que funcione (o esperar a que baje la demanda yover si lo solucionan)
Errores de Protocolo SSL
AFIP estaacute desafectando los protocolos de seguridad obsoletos (SSLv3 requiriendo TLSv1+) por lo que ensistemas operativos antiguos o desactualizados (por ej Windows XP) puede existir una incompatibilidad conque imposibilite la comunicacioacuten segura es recomendable actualizar el sistema operativo lenguaje deprogramacioacuten y componentes
SSLEOFError EOF occurred in violation of protocol (_sslc590)bull SSLHandshakeError [SSL SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alertbull
Errores de Conectividad 124
handshake failure (_sslc581)[Errno 1] _sslc490 error14094410SSLroutinesSSL3_READ_BYTESsslv3 alert handshake failure
bull
Como mitigacioacuten puede utilizare un transporte alternativo basado en la biblioteca CURL que en general tienemejor cobertura para este tipo de cuestiones en Windows
Para ello establecer paraacutemetro wrapper=pycurl en el meacutetodo Conectar si se utilizan loscomponentes
wrapper = pycurlok = WSFEv1Conectar(cache wsdl proxy wrapper)
Si se utilizan las herramientas por linea de comando configurar en el receini
[WSFEv1]wrapper = pycurl
Errores AFIP CUIT Emisor
En caso de problemas con el CUIT emisor y no superar una de las siguientes validaciones excluyentes(verificacioacuten de datos registrales inscripcioacuten en el reacutegimen autorizacioacuten de emisioacuten de comprobantesdomicilio fiscal etc) AFIP devolveraacute un Coacutedigo de Error 10000 con los mensajes posibles
01 LA CUIT INFORMADA NO CORRESPONDE A UN RESPONSABLE INSCRIPTO EN ELIVA ACTIVO
bull
02 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESELECTRONICOS ORIGINALES O EL PERIODO DE INICIO AUTORIZADO ES POSTERIORAL DE LA GENERACION DE LA SOLICITUD
bull
03 LA CUIT INFORMADA REGISTRA INCONVENIENTES CON EL DOMICILIO FISCALbull 04 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESCLASE A
bull
05 EL CUIT INFORMADO COMO EMISOR NO SE ENCUENTRA REGISTRADO DE FORMAACTIVA EN LAS BASES DE LA ADMINISTRACIOacuteN
bull
06 DEBE POSEER AL MENOS UNA ACTIVAD ACTIVAbull
En estos casos debe contactar la mesa de ayuda de AFIP para solucionar el inconveniente que esteacute bloqueandola emisioacuten de facturas electroacutenicas (generalmente no es un tema teacutecnico sino un traacutemite administrativo)
Errores AFIP Punto de Venta
Otros errores relacionados a la emisioacuten de facturas electroacutenicas pueden ser
1501 El Punto de Venta debe ser del tipo habilitado para el reacutegimen CAE Codificacioacuten de Productos- Web Services o del reacutegimen CAEA
bull
Errores de Protocolo SSL 125
En este caso se debe revisar que el tipo de punto de venta dado de alta coincida con el servicio web aconsumir (campo sistema de facturacioacuten asociado)
RECE para aplicativo y web services (CAE WSFEv1 factura electroacutenica mercado interno tradicionalsin detalle)
bull
RECE para aplicativo y web services EXPORTACION (CAE WSFEXv1 factura electroacutenicaexportacioacuten con detalle)
bull
Codificacioacuten de Productos Web Services (CAE WSMTXCA factura electroacutenica mercado interno condetalle)
bull
CAEA - Codificacioacuten de Productos (CAE anticipado WSMTXCA factura electroacutenica mercado internocon detalle)
bull
No debe figurar Factura en Linea porque ese punto de venta solo permite operar por Clave Fiscal serviciointeractivo de Comprobantes en Liacutenea
Errores de tipos de datos
Se recuerda que este componente es dinaacutemico y generalmente no realiza conversioacuten ni ajustes en los tipos dedatos por lo que la aplicacioacuten que lo utilice debe revisarlos y verificar que sean correctos para ser enviadosrespetando las especificaciones y validaciones de AFIP
Debido a que los distintos lenguajes de programacioacuten pueden almacenar y pasar los valores de formasdiferentes (eventualmente en registros recordsets campos fields o similares) es recomendable que seconviertan todos los datos a string (cadenas de caracteres) para evitar errores de conversioacuten y redondeoTambieacuten se pueden usar otros tipos de datos baacutesicos como enteros (integer) flotantes (float)numeacutericomoneda (currencydecimal) que son los que en definitiva reconoce AFIP Las fechas deben pasarseen formato string seguacuten el formato de cada webservice Los importes deben pasarse con punto decimal (nocoma y sin separadores de miles ni signo pesos)
En VB se pueden convertir los valores con CStr (string) CLng (long) CCur (currency) etc o incluso lasfunciones str o val en ciertos casos ejemplo
tipo_cbte = CInt(rstipo_cbte)
Para un ejemplo concreto ver la implentacioacuten completa de referencia factura_electronicamdb (Access 2k osuperior)
En caso de enviar los tipos de datos incorrectos en Traceback (ver Manejo de Excepciones) podraacuteencontrarse algunos de los mensajes frecuentes
AttributeError PyIDispatch object has no attribute strip se envioacuteun dato que no puede convertirse a string
bull
PyIDispatch at 0x10531678 with obj at 0x0C997832 se usoacute un tipo de datos noconvertidosoportado ver Mensajes XML
bull
TypeError int() argument must be a string or a number notNoneType se envioacute un nulo en un campo que necesitaba un nuacutemero
bull
ValueError invalid literal for int() with base 10 A se envioacute un stringen un campo que necesitaba un nuacutemero
bull
Errores AFIP Punto de Venta 126
Errores internos de AFIP
Ocasionalmente pueden producirse errores no documentados en las especificaciones teacutecnicas de AFIP Por ejcuando se intenta utilizar la URL de un webservice obsoleto como WSBFE en vez de WSBFEv1 el servidorde AFIP ha devuelto el siguiente error
soapServer Server was unable to process request ---ampgt Object reference not set to an instance ofan object
bull
Otros problemas internos de los servidores de AFIP que los resuelve dicho organismo automaacuteticamente (sinintervencioacuten necesaria generalmente en el transcurso del diacutea) son
500 Error general DB (InsertandAuthorize - fex_pckprc_ins_rcel_comprobantes OEX ) - (1654) -ORA-01654 unable to extend index MIGRARCEL_CMP_UNC_INDEX by 4 in tablespaceFISCO_DATOS ORA-06512 at MIGRAFEX_PCK line 353 ORA-06512 at line 1
bull
500 Error interno DB - fex_Rece_Pckget_ctzbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
500 Error general DB (InsertandAuthorize - prc_ws_ins_cab) BFEErrorbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-12535 TNSoperationtimed out
bull
500 Error interno de aplicacioacuten - Metodo FECAESolicitar - Index was outside the bounds of thearray
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-00257 archiver error Connect internalonly until freed ORA-02063 preceding line from GHOST ORA-06512 at ORARECE_V1_PCKline 1651 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-28000 the account is lockedORA-02063 preceding line from E15K_PADR ORA-06512 at ORARECE_V1_PCK line 1806ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLEinitialization or shutdown in progress
bull
501 Error interno de base de datos - CAECabInsert ORA-02068 following severe error fromCONTRIB ORA-03113 end-of-file communication channel ORA-06512 atORARECE_V1_PCK
bull
501_ Error interno de base de datos - CAECabInsert ORA-01001 invalid cursor ORA-06512 atORARECE_V1_PCK line 580 ORA-06512 at ORARECE_V1_PCK line 1070 ORA-06512 atline 1
bull
501 Error interno de base de datos - CAEDetInsert ORA-03233 unable to extend tableORAF136_DETALLES_FACTE subpartition F136_DET_2011_CLAVE_08 by 128 in tablespaceUSERS
bull
501 Error interno de base de datos - CAESequenceGenerarORA-01502 indexORAF136_DET_CAE_UK or partition of such index is in unusable state ORA-06512 atORARECE_V1_PCK line 1477 ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace FISCO_DATOS ORA-06512 at ORARECE_V1_PCK line1168 ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLE initializationor shutdown in progress
bull
501 Error interno de base de datos - AlicIvaCAEInsertORA-14400 inserted partition key does notbull
Errores internos de AFIP 127
map to any partition ORA-06512 at ORARECE_V1_PCK line 1308 ORA-06512 at line 1501 Error interno de base de datos - CuitsEnPadronSet ORA-12541 TNSno listener ORA-06512 atORARECE_V1_PCK line 1831 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-04031 unable to allocate 20528 bytesof shared memory (shared poolunknown objectsga heap(10)KTI SGA freeable small pool)ORA-02062 preceding line from SEFI ORA-06512 at ORARECE_V1_PCK line 1898ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace USERS at ORARECE_V1_PCK line 1202
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-12505 TNSlistener could notresolve SID given in connect descriptor
bull
501 Error interno de base de datos - CAECompConsultarORA-01502 indexORAIX_F136_DETALLES_TPN or partition of such index is in unusable state
bull
501 Error interno de base de datos - CAECabInsert ORA-01502 index ORAF136_CAB_CUIT_IDor partition of such index is in unusable state
bull
501 DataBase - Resultado inesperadobull 501 Error interno de base de datos - CAESequenceGenerarORA-01654 unable to extend indexORAF136_DET_CAE_UK by 1024 in tablespace FISCO_FE ORA-06512 atORARECE_V1_PCK line 1781 ORA-06512 at line 1
bull
502 Error interno de base de datos - Autorizador CAE - Transaccioacuten Activabull Error interno de aplicacioacuten - Metodo FECompConsultarORA-01034 ORACLE not availableORA-27101 shared memory realm does not exist
bull
Error interno de aplicacioacuten - Metodo FECompConsultarORA-01035 ORACLE only available tousers with RESTRICTED SESSION privilege
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-28000 the account is lockedbull soapenvServer Error de conexin DB [Cd A001]bull soapenvClient Error de acceso a la base de datosbull soapenvClient business0010bull soapenvClient orgapacheaxis2databindingADBExeption unexpected subelementconsultarCTGDatos
bull
Tambieacuten pueden ocurrir Errores de Conectividad a nivel de sistema operativo socket error ioerror timeout connection refused ssl handshake server not found etc (verarriba) especialmente cuando los servidores de AFIP se saturan por cambios y actualizaciones
Realizar la consulta con la mesa de ayuda de AFIP sriafipgovar (produccioacuten) y webservicesafipgovar(homologacoacuten) para dejar constancia del problema y si corresponde ver de utilizar los meacutetodos tradicionalespara emitir comprobantes seguacuten RG248508 Artiacuteculo 33
En el caso de inoperatividad del sistema se deberaacute emitir y entregar el comprobanterespectivo utilizando el controlador fiscal o los comprobantes manuales seguacuten correspondahasta tanto esta Administracioacuten Federal apruebe otro procedimiento alternativo de respaldo
Importante en general es obligatorio informar los comprobantes emitidos manualemente por formulariomultinota en dependencia de AFIP a traveacutes de servicios en linea o como AFIP disponga en casos particularesConsultar con el contador la normativa y legislacioacuten vigente
Errores internos de AFIP 128
Errores de Permisos
Dependiendo de las poliacuteticas de seguridad puede ser necesario dar permisos de acceso a la carpeta cache(archivos temporales) o aquellas donde se almacenen los archivos de intercambio (entrada salida PDF oXML)
IMPORTANTE los certificados y claves privadas no deben ser expuestas en una carpeta puacuteblica delservidor web o similar Utilizar passphrase (ver Meacutetodos WSAA) para mayor proteccioacuten y seguridad
Linux
En GNULinux generalmente es necesario que el usuario del servidor web (www-data o similar) puedaacceder a la carpeta
Por ejemplo se podriacutea utilizar los siguientes comandos
chown www-data -R optpyafipwschmod a+xr -R optpyafipwschmod a+xwrt -R optpyafipwscache
Revisar los permisos con su administrador de sistemas
Windows
Acceso Denegado (Archivos)
Error IOError [Errno 13] Permission denied cArchivos deProgramaPyAfipWSCacheTAXML
En general es recomendable utilizar una carpeta con permisos de escritura para la aplicacioacuten
Si esto no es posible se puede configurar los permisos de acceso
Explorador de Archivosbull Buscar carpeta de instalacioacuten (CArchivos de ProgramaPyAfipWS)bull Propiedades (click derecho)bull Solapa Seguridadbull Seleccionar Usuarios que ejecutan la aplicacioacutenbull Editarbull Modificar (habilitar)bull Aceptarbull
Ejemplo
Acceso Denegado (CreateObjectCreateInstance)
En ciertos servidores (Windows 7 o superior) dependiendo de la configuracioacuten debe permitir inicio yactivacioacuten de los componentes
Errores de Permisos 129
Error al llamar a CreateObject CreateInstance o similar Acceso Denegado(HRESULT0x80070005 E_ACCESSDENIED
Solucioacuten
Inicio buscar Servicios de Componentes (o via el Panel de Control HerramientasAdministrativas)
bull
Equipos Mi PC Configuracioacuten DCOMbull Buscar WSAA WSFEv1 o el componente que desee configurarbull Propiedades (Click Derecho)bull Solapa Seguridadbull Permisos de inicio y activacioacuten Personalizado Editarbull Agregar los usuarios que deben tener permisos necesariosbull Aceptarbull
Repetir para Permisos de Acceso y Configuracioacuten de ser necesario
Ejemplo
Acceso Denegado (CreateObjectCreateInstance) 130
Nota de Seguridad los mensajes pueden incluir datos sensibles (credenciales de acceso a AFIP token ysign) que pueden ser vaacutelidos por varias horas auacuten despueacutes de efectuada la comunicacioacuten En caso compartirestos archivos (por ej en el foro puacuteblico de consultas) se deberiacutean tomar las medidas necesarias para evitarinconvenientes (recortar el campo sign es suficiente para que no se puedan reutilizar las credenciales deacceso)
Importante En ciertos casos para determinados webservices AFIP solicita tag vacios (por ejpermiso_existente en WSFEXv1) por lo que se ha ajustado en la biblioteca de comunicacioacuten SOAP(versioacuten 127 y superiores) para manejar tres escenarios
Enviar un dato por ej permiso_existente = Sltpermiso_existentegtSltpermiso_existentegt
bull
Enviar un tag vacio completando con string vacio por ej permiso_existente = ltpermiso_existentegtltpermiso_existentegt
bull
No enviar un tag (valor NULL NIL None Void etc) por ej permiso_existente = NULL(no genera XML)
bull
En caso de no seguir las especificaciones de AFIP el webservice retornaraacute un mensaje de error del tipoServer was unable to read request ---gt There is an gt error in XMLdocument (5 1353) ---gt Input string was not in a correct format dondeindica revisar el XmlRequest liacutenea 5 columna 1353 (en este caso puntual) para corregir el dato enviado
Documentacioacuten Oficial AFIP
Recomendamos revisar y seguir los lineamientos y normativa de AFIP
httpwwwafipgovarfebull httpwwwafipgovarwsbull
Recordamos que la interfaz y bibliotecas (PyAfipWs) no realizan ninguacuten tipo de chequeo o validacioacutenadicional (ya que esta tarea la realizan los servidores de AFIP) y tampoco convierte entre distintos tipos dedatos (salvo conversioacuten trivial a cadenas -strings- para ser enviadas por XML) por lo que es responsabilidadde la aplicacioacuten principal cumplir con las especificaciones y legislacioacuten vigente referidas a los servicios webde AFIP proporcionando los datos correctos que correspondan
Modos Homologacioacuten y Produccioacuten
Por disentildeo el instalador para Windows publicado de la interfaz COM (pyafipwspy) y herramientas por liacuteneade comando (recepy recexpy recebpy rece1py) funcionaraacute inicialmente solo en modo homologacioacuten(testing) ya que su objetivo es simplemente facilitar las pruebas para que los usuarios que no concen Pythonpuedan evaluar el producto antes de interiorizarse en el lenguaje yo contratar el soporte comercial
Con los instaladores de evaluacioacuten en modo de homologacioacuten (pruebas) se ignoraraacute las URLsproporcionadas a CallWSAA Conectar o especificadas en receini En ese caso para activar modo produccioacuten(definitivo) es necesario ajustar el coacutedigo fuente ver instrucciones de Instalacioacuten desde Coacutedigo Fuente( video explicativo) Ofrecemos soporte comercial contemplando el acceso al instalador compilado ampajustado para produccioacuten para los clientes que asiacute lo requieran Ver Costos y Condiciones
Mensajes XML 7
Configuracioacuten para Produccioacuten
Para entrar en el ambiente de produccioacuten de AFIP ademaacutes de utilizar el instalador correcto (no el deevaluacioacuten ver arriba) se debe usar las URLWSDL correspondientes para cada webservice (modohomologacioacuten deshabilitado)
WSAA httpswsaaafipgovarwsservicesLoginCmswsdlbull WSFE httpsservicios1afipgovarwsfeserviceasmx -obsoleto desde 2011 por AFIP-bull WSFEv1 httpsservicios1afipgovarwsfev1serviceasmxWSDLbull WSFEXv1 httpsservicios1afipgovarwsfexv1serviceasmxWSDLbull WSMTXCA httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAServicewsdlbull WSBFEv1 httpsservicios1afipgovarwsbfev1serviceasmxWSDLbull
Ejemplo en el receini
[WSAA]CERT=reingartcrtPRIVATEKEY=reingartkeyURL=httpswsaaafipgovarwsservicesLoginCmsCACERT=confafip_ca_infocrt
[WSFEv1]CUIT=20267565393ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
Ejemplo en Visual Basic o similar (segundo paraacutemetro del meacutetodo Conectar)
Certificado = reingartcrt certificado de produccioacutenClavePrivada = reingartkey clave privada de produccioacutencms = WSAASignTRA(WSAACreateTRA(wsfe) Certificado ClavePrivada)
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlok = WSAAConectar(cache wsaa_url)ta = WSAALoginCMS(cms)
wsfev1_url = httpsservicios1afipgovarwsfev1serviceasmxWSDLok = WSFEv1Conectar(cache wsfev1_wsdl)
WSFEv1Cuit = 20267565393 CUIT del emisor (segun certificado)
Luego de configurar las opciones para produccioacuten se puede verificar el correcto funcionamiento de lascredenciales y URL utilizando los meacutetodos auxiliares por ej consultando los puntos de venta habilitados
parametros RECE1 ptosventabull meacutetodo ParamGetPtosVentabull
Aclaracioacuten No es obligatorio usar el instalador ni realizar compilacioacuten se puede bajar revisar modificar yejecutar directamente el coacutedigo fuente Python publicado en modo homologacioacuten o produccioacuten
Configuracioacuten para Produccioacuten 8
Importante Los CAE obtenidos en modo homologacioacuten no tienen validez fiscal
Advertencia Teoacutericamente no deberiacutea ser posible conectarse a produccioacuten con certificados de homologacioacuten(y viceversa) pero en la praacutectica han sucedido casos (obteniendo CAE de homologacioacuten sin validez fiscal)por lo que recomendamos extremar las medidas de seguridad y control (verificando certificados yconfiguracioacuten de URL de servidores) para generar las facturas en el ambiente correcto Ver Verificar ValidezCAE y Comprobacioacuten WSAA
Manejo de Excepciones
Las versiones recientes de WSAA (202) WSFEv1 (110) WSMTXCA (101) y WSFEX (126123) incluyenmejoras y unificaciograven en el manejo de excepcioneserrores (atributos LanzarExcepciones Excepciony Traceback) permitiendo un control maacutes simple de los Unexpected Python Error (errores noesperados que informa Python el lenguaje de programacioacuten de la interfaz generalmente por problemas deconexioacuten o tipos de datos invaacutelidos) sobre todo para lenguajes que no soportar mensajes de Error COM(previniendo mensajes por errores no controlados como Error fatal coacutedigo de excepcion=C0000005 y elcierre del programa)
Dependiendo de cada caso (en especial para lenguajes de programacioacuten legados) es conveniente deshabilitarlos errores no manejados (LanzarExcepciones = False) y controlar manualmente las excepciones y el valorretornado luego de llamar a cada meacutetodo
Ejemplo para Visual Basic
Dim ta as Variant
WSAALanzarExcepciones = Falseta = WSAALoginCMS(cms)If WSAAExcepcion ltgt Then
muestro al usuario solo el mensaje de error no la traza MsgBox WSAAExcepcion vbCritical Excepcioacuten
Exit SubEnd If
Mismo ejemplo para Visual Fox Pro
WSAALanzarExcepciones = Fta = WSAALoginCMS(cms)IF LEN(WSAAExcepcion) gt 0 THEN WSAATraceback MESSAGEBOX(WSAAExcepcion 5 + 48 Excepcion) CANCELENDIF
Tambieacuten se puede verificar que la respuesta del meacutetodo (en este caso en la variable ta notar que es del tipoVariant) no sea nula en ese caso se ha producido una excepcioacuten y el mensaje deberiacutea estar en el atributoExcepcion con su traza en Traceback
Nota dependiendo de la version los atributos Excepcion y Traceback pueden estar disponibles solo luego deocurrido el error (utilizar las ulitmas versiones para poder consultar estos atributos en cualquier momento)
Es recomendable que se muestre al usuario solo la Excepcioacuten (la traza es informacioacuten teacutecnica que no tieneutilizad para el operador) y para facilitar la depuracioacuten en todos los casos es uacutetil guardar los Mensajes XML
Manejo de Excepciones 9
y excepcioacuten ya que a veces los lenguajes de programacioacuten cortan el mensaje y se dificulta saber el motivo delerror Ademaacutes es recomendable siempre verificar que los objetos hayan sido creados (para no generar nuevoserrores) y que estos sean compatibles con la versioacuten que manejamos (si tenemos varias instalaciones distintaspara no solicitar atributos inexistentes)
Por ej para VB (cambiar WSAA por el webservice que corresponda)
verifico que el objeto haya sido creadoIf Not WSAA Is Nothing Then
verifico que la versioacuten del objeto sea compatibleIf WSAAVersion gt= 102a Then creo el archivo guardo alliacute todos los atributos para depuracioacuten
fd = FreeFile Open cerrortxt For Append As fd Print fd WSAAExcepcion Print fd WSAATraceback Print fd WSAAXmlRequest Print fd WSAAXmlResponse Close fd
End IfEnd If
Ejemplo para VFP (cambiar WSAA por el webservice que corresponda)
-- Depuracioacuten (grabar a un archivo los datos de prueba)gnErrFile = FCREATE(cerrortxt) =FWRITE(gnErrFile WSAAToken + CHR(13))=FWRITE(gnErrFile WSAASign + CHR(13)) =FWRITE(gnErrFile WSAAXmlRequest + CHR(13))=FWRITE(gnErrFile WSAAXmlResponse + CHR(13))=FWRITE(gnErrFile WSAAExcepcion + CHR(13))=FWRITE(gnErrFile WSAATraceback + CHR(13))=FCLOSE(gnErrFile)
Error Handler
Importante este meacutetodo no es estrictamente necesario si su programa ya tiene incorporado el manejo deerrores seguacuten el lenguaje de programacioacuten que utilicie (especialmente si utiliza el control de excepcionesmencionado en la seccioacuten anterior)
Todas estas consideraciones no quitan que se deba tener previsto el controlador de errores habitual dellenguaje para capturar los errores graves (por ej al no poder crear el objeto enviar un tipo de dato incorrectoo llamar un meacutetodoatributo inexistente) ya sea utilizando
Visual Basic ON ERROR GOTO bull Visual Fox Pro ON ERROR DO bull o bloques TRY EXCEPT CATCH o similaresbull
Lo mismo aplica a WSFEv1 WSMTXCA y WSFEX Para maacutes informacioacuten ver los ejemplos actualizados
Para VB
On Error GoTo ManejoError
Crear objeto interface (WSAA WSFEv1 etc)
Error Handler 10
Set WSAA = CreateObject(WSAA) llamar a los meacutetodos de WSAA
Exit Sub
ManejoError
Si hubo error (tradicional no controlado)
Mostrar mensajes de Depuracioacuten en ventana de inmediatoIf Not WSAA Is Nothing Then
If WSAAVersion gt= 102a Then DebugPrint WSAAExcepcion DebugPrint WSAATraceback DebugPrint WSAAXmlRequest DebugPrint WSAAXmlResponse
End IfEnd IfIf Not WSFEv1 Is Nothing Then
If WSFEv1Version gt= 110a Then DebugPrint WSFEv1Excepcion DebugPrint WSFEv1Traceback DebugPrint WSFEv1XmlRequest DebugPrint WSFEv1XmlResponse DebugPrint WSFEv1DebugLog()
End IfEnd If
Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipSelect Case MsgBox(ErrDescription vbCritical + vbRetryCancel Error amp ErrNumber - vbObjectError amp en amp ErrSource)
Case vbRetry DebugAssert False
ResumeCase vbCancel
DebugPrint ErrDescriptionEnd Select
Para VFP (con procedimiento para captura de errores automaacutetica)
ON ERROR DO errhand2-- Crear objeto interface Web Service de Factura ElectroacutenicaWSFE = CREATEOBJECT(WSFEv1) -- llamar a los meacutetodos de WSFE
-- Procedimiento para manejar errores WSFEPROCEDURE errhand2 --PARAMETER merror mess mess1 mprog mlineno
-- Depuracioacuten (mostrar los mensajes de error en la ventana principal)
WSFEv1XmlRequest WSFEv1XmlResponse WSFEv1Excepcion WSFEv1Traceback
Error number + LTRIM(STR(ERROR()))
Error Handler 11
Error message + MESSAGE() Line of code with error + MESSAGE(1) Line number of error + LTRIM(STR(LINENO())) Program with error + PROGRAM()
-- Preguntar Aceptar o cancelar ch = MESSAGEBOX(WSFEExcepcion 5 + 48 Error) IF ch = 2 ampamp Cancelar ON ERROR CLEAR EVENTS CLOSE ALL RELEASE ALL CLEAR ALL CANCEL ENDIF ENDPROC
Es posible seguir utilizando para las versiones anteriores o por compatibilidad hacia atraacutes LanzarExcepciones= Verdadero (predeterminado) en dicho caso se generaraacute un Error COM que deberaacute ser capturado por laaplicacioacuten y el mensaje estaraacute en ErrDescription (para VB) o MESSAGE() (para VFP)
Time-Out
En casos de falla de los servidores de AFIP la respuesta se puede demorar por lo que se puede configurar elparametro timeout (tiempo de espera) en el meacutetodo Conectar(cache wsdl proxy wrappercacert timeout) para controlar el periacuteodo y minimizar los bloqueos
De manera predeterminada el tiempo de espera en las uacuteltimas versiones es de 30 segundos pero se puedenpasar otros valores como 300 para que espere hasta 5 minutos (si los servidores de AFIP estaacuten muycongestionados) o reducir a 15 o 10 para esperar un tiempo maacutes reducido y dar una respuesta raacutepida alusuario (ver en ese caso Reproceso Automaacutetico para reintentarconsultar en caso de fallas en AFIP)
Es recomendable establecer la propiedad LanzarExcepciones a Falso y comprobar el valor deExcepcion (ver arriba) que generalmente informaraacute el error del sistema operativo por timeout Varioswebservices de AFIP tienen un meacutetodo Dummy que se pueden combinar con el timeout para detectar si elservidor de AFIP esta funcionando correctamente o no (justamente ese meacutetodo tambieacuten puede fallar desdeAFIP y es necesario controlar el tiempo de espera para un chequeo raacutepido)
Ver Errores de Conectividad y Errores internos de AFIP para mayor informacioacuten sobre los problemasfrecuentes con la comunicacioacuten hacia los servidores de AFIP
Importante Si no se utiliza los paraacutemetros cache proxy wrapper y cacert deberiacutean ser pasados como stringvacio (no saltear) Para poder utilizar estos paraacutemetros se deberiacutea usar una versioacuten actualizada de loscomponentes (2015)
Verificacioacuten del Canal de Comunicacioacuten Seguro
Por nueva Especificacioacuten Teacutecnica WSAA 122(Requerimientos de canal seguro comunicacioacuten para los CEE WSAA y WSN) se debe verificar la identidaddel servidor de AFIP (transformando lo que antes era una sugerencia (no documentada) en una verificacioacutenobligatoria de comprobar el certificado y URL del servidor)
Time-Out 12
Para ello los meacutetodos Conectar reciben dos paraacutemetros adicionales (actualmente solo para uacuteltimasversiones de desarrollo de WSAA 204 y WSFEv1 112 o superiror)
wrapper libreriacutea http con soporte avanzado de ssl (por el momento pycurl)bull cacert ruta al certificado de la autoridad certificante a verificar geotrustcrt ocomodocrt Puede utilizar el archivo con ambos certificados afip_ca_infocrt que lomantenemos actualizado con todos los certificados requeridos
bull
IMPORTANTE es recomendable empezar a utilizar el archivo geneacuterico de entidades certificantes pasandocacert=True o cacert=default De este modo si AFIP cambia el certificado o se vence algunaCA es probable que el nuevo certificado esteacute en el archivo generico por lo que no habriacutea que modificar elcoacutedigo y agregarlo manualmente (siempre que se este utilizando una versioacuten actualizada del proyecto)
Como solucioacuten provisoria se pueden descargar cacertpem desde el siguiente link httpscurlhaxxsedocscaextracthtml Esos son los certificados de Firefox (Mozilla) que contiene todos loscertificados existentes Se deberiacutea reemplazar por el archivo afip_ca_infocrt
Ejemplo en Visual Basic
cache = wsaa_url = httpswsaaafipgovarwsservicesLoginCmswsdlwrapper = pycurl para situaciones especiales o versiones anteriores (instalador lt 27)proxy = formato usuarioclaveservidorpuertocacert = WSAAInstallDir + confafip_ca_infocrt Indicar ruta completa (directorio conf instalador gt 27)WSAAConectar(cache wsaa_url proxy wrapper cacert)
Ejemplo en RECEINI (solo se agrega los paraacutemetros de configuracioacuten CACERT y WRAPPER el resto seusa normalmente)
[WSAA]URL=httpswsaaafipgovarwsservicesLoginCmswsdlCACERT=confafip_ca_infocrtWRAPPER=pycurl
Nota De realizar la verificacioacuten debe agregar los paraacutemetros a todas las secciones que se conecten con loswebservices [WSAA] [WSFEv1] [WSLPG] etc y usar un instalador actualizado
Para verificar la Autoridad Certificante (CACERT) se recomienda probar el uacuteltimo ejemplo interactivo(cambiando httplib2 por pycurl para validar el nuevo certificado de wsaa) Para maacutes informacioacuten ver EjemploInteractivo de Autenticacioacuten (requiere instalacioacuten)
De encontrarse alguna inconsistencia el meacutetodo Conectar devolveraacute falso y en Excepcioacuten estaraacute el motivo deerror
No verifica el certificado (60 SSL certificate problem verify that the CAcert is OK Details error14090086SSLroutinesSSL3_GET_SERVER_CERTIFICATEcertificate verify failed)
bull
No verifica URL (51 SSL certificate subject namewsaahomoafipgovar does not match target host namewsaahomoafipgobar)
bull
El archivo de autoridades certificantes (paraacutemetro cacert) es incorrecto SSLError [Errno185090050] _sslc344 error0B084002x509 certificate
bull
Verificacioacuten del Canal de Comunicacioacuten Seguro 13
routinesX509_load_cert_crl_filesystem lib error (77 )SSLHandshakeError [ SSL CERTIFICATE_VERIFY_FAILED ] certifiacutecateverify failed (_sslc581 ) o WindowsError [Error 2] El sistema nopuede encontrar el archivo especificado IOError [Errno 2] No suchfile or directory (usar alternativamente confafip_ca_infocrt)
Se utiliza una libreriacutea de transporte distinta (pycurl) y posiblemente sea reemplazada en el futuro por lo querecomendamos dejar parametrizado este tema para evitar inconvenientes (pudiendo usar cualquier libreriacutea httpyo deshabilitar la comprobacioacuten de autoridad certificante al no pasarle los nuevos paraacutemetros a Conectarpara mantener compatibilidad con versiones anteriores yo en caso de que AFIP instale un certificadoincompatible en sus servidores)
Tabla comparativa Webservices
A continuacioacuten se presenta un resumen de webservices herramientas atributos y meacutetodos soportados
Caracteriacutestica WSFE v0 WSFE v1 v11 v2 v26 WSBFE v0 y v1 WSFEX v0 y v1 WSMTXCA
Normativa AFIP RG2485RG2485 RG2926 RG2959RG2975 RG3067 RG3571RG3668 RG3749 RG3779
RG2557 RG2758 RG3066RG3689 RG2904 RG2926 RG3536
Reacutegimen Mercado Internooriginal
Mercado interno (sin informardetalle)
Bono Fiscal - Bienes deCapital Exportacioacuten Mercado Interno (informar detalle
codificacioacuten de artiacuteculos)Clases de Facturas A B C M A B C M A B E A B
Sujetos comprendidos RI (obsoleto desde172011)
Responsables InscriptosExentos y MonotributoReacutegimen General
ResponsablesInscriptos inscriptos enla Secretariacutea deComercio
Exportadores inscriptosen los RegistrosEspeciales Aduaneros(V1 obligatorio desde31122011)
Responsables Inscriptos Notificadospor Juez Administrativo AFIP
Objeto COM(Windows) WSFE WSFEv1 WSBFE o WSBFEv1 WSFEX o WSFEXv1 WSMTXCA
Biblioteca COM(Windows) wsfedll wsfev1dll pyafipwsdll o
wsbfev1dllpyafipwsdll owsfexv1dll wsmtxdll
Modulo Python(Linux) wsfepy wsfev1py wsbfepy o wsbfev1py wsfexpy o wsfexv1py wsmtxpy
Herramienta siacutemilSIAPRECE(WindowsLinux)
receexe recepy rece1exe rece1py recebexe recebpy recexexe recexpy recemexe recempy
Informacioacuten General PyAfipWs Proyecto Version 1 Bonos FiscalesElectroacutenicos
Factura ElectroacutenicaExportacioacuten Proyecto Matrix
DocumentacioacutenTeacutecnica (Manual) WSFE WSFEv1 WSBFE WSFEX WSMTXCA
Nombre de servicioparaWSAACreateTRA
wsfe wsfe wsbfe wsfex wsmtxca
Meacutetodo Solicitud deAutorizacioacuten CAE oinformacioacuten deCAEA
Aut (CAE) CAESolicitar CAEARegInformativo
Authorize (CAE) Authorize (CAE) AutorizarComprobante InformarComprobanteCAEA
Tabla comparativa Webservices 14
Meacutetodos para CAEA(anticipado)
CAEASolicitarCAEAConsultar
SolicitarCAEAConsultarCAEAEntreFechasConsultarCAEA (emulado)
Campo ID(identificador uacutenico) en Aut en Authorize en Authorize
Reproceso siacute (realizado por AFIP) automaacutetico (emulado en lainterfaz) siacute (realizado por AFIP) siacute (realizado por AFIP) automaacutetico (emulado en la interfaz)
Campoproductosservicios presta_serv=SN concepto=123 tipo_expo=123 concepto=123
Campomonedacotizacioacuten moneda_id moneda_ctz imp_moneda_id
imp_moneda_ctz moneda_id moneda_ctz moneda_id moneda_ctz
MeacutetodoCrearFactura oAut
id presta_servtipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_totalimp_tot_concimp_neto impto_liqimpto_liq_rniimp_op_exfecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta
concepto tipo_doc nro_doctipo_cbte punto_vtacbt_desde cbt_hastaimp_total imp_tot_concimp_neto imp_iva imp_tribimp_op_ex fecha_cbtefecha_venc_pagofecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz
tipo_doc nro_doczona tipo_cbtepunto_vta cbte_nrofecha_cbte imp_totalimp_neto impto_liqimp_tot_concimpto_liq_rniimp_op_ex imp_percimp_iibbimp_perc_munimp_internosimp_moneda_idImp_moneda_ctz
tipo_cbte punto_vtacbte_nro fecha_cbteimp_total tipo_expopermiso_existentedst_cmp clientecuit_pais_clientedomicilio_clienteid_impositivomoneda_id moneda_ctzobs_comerciales obsforma_pago incotermsidioma_cbteincoterms_dsfecha_pago)
concepto tipo_doc nro_doctipo_cbte punto_vta cbt_desdecbt_hasta imp_total imp_tot_concimp_neto imp_subtotal imp_tribimp_op_ex fecha_cbtefecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_idmoneda_ctz obs
MeacutetodoAgregarItem(detalle de artiacuteculo)
ncm sec ds qtyumed precio bonifiva_id imp_total
codigo ds qty umedprecio imp_total bonif
u_mtx cod_mtx codigo ds qtyumed precio bonif cod_ivaimp_iva imp_subtotal
MeacutetodoAgregarCbteAsoc(comprobantesasociados)
tipo_cbte pto_vta nro_cbteCUIT fecha
tipo_cbte pto_vtanro_cbte cuit_cbte tipo_cbte pto_vta nro_cbte fecha
MeacutetodoAgregarPermiso(permisos deembarque)
permiso_id pais_dst
MeacutetodoAgregarIVA(subtotales de aliacutecuotade iva)
iva_id base_imp importe iva_id base_imp importe
MeacutetodoAgregarTributo(otros impuestos)
tributo_id ds base_imp alicimporte tributo_id ds base_imp alic importe
Meacutetodo para consultarpuntos de ventahabilitados
ParamGetPtosVentaConsultarPuntosVentaCAEConsultarPuntosVentaCAEA
Meacutetodo pararecuperar un
CompConsultar GetCMP GetCMP ConsultarComprobante
Tabla comparativa Webservices 15
comprobanteMeacutetodo para obteneruacutetlimo nordmcomprobante
RecuperaLastCMP CompUltimoAutorizado GetLastCMP GetLastCMP CompUltimoAutorizado
Meacutetodos para obtenertablas de paraacutemetros
ParamGetTiposCbteParamGetTiposConceptoParamGetTiposDocParamGetTiposIvaParamGetTiposMonedasParamGetTiposOpcionalParamGetTiposTributosParamGetCotizacionParamGetPtosVenta
GetParamMonGetParamTipoCbteGetParamUMedGetParamTipoIVAGetParamNCM
GetParamMonGetParamTipoCbteGetParamTipoExpoGetParamIdiomasGetParamUMedGetParamIncotermsGetParamDstPaisGetParamDstCUITGetParamCtz
ConsultarComprobanteConsultarTiposComprobanteConsultarTiposDocumentoConsultarAlicuotasIVAConsultarCondicionesIVAConsultarMonedasConsultarUnidadesMedidaConsultarTiposTributoConsultarCotizacionMoneda
SEUO
Notas Generales
Convencioacuten de nombres si bien por transparencia se tratoacute de utilizar los nombres de los meacutetodosdefinidos en las especificaciones teacutecnicas se han cambiado los nombres de paraacutemetros y meacutetodosauxiliares para simplificar y unificar las interfaces manteniendo cierta coherencia entre los distintoswebservices por lo que algunas denominaciones internas pueden variar respecto a lasespecificaciones teacutecnicas de AFIP
bull
Esta tabla contiene un resumen de las consideraciones generales revisar la normativa vigenteespecificaciones y documentacioacuten teacutecnica actualizada para contemplar los casos particulares Ademaacutesse respetan las descripciones de servicios (WSDL) por ej si bien AFIP publica la especificacioacutenteacutecnica RG 2485 - Manual para el desarrollador V25 el webservice sigue siendo WSFEv1 ver RG 2485 - WSFEV1 - Manual para el desarrollador V26 RG 2904 - WSMTXCA - Manual para elDesarrollador - V02 RG 2758 - wsfex - Manual del desarrollador - V011 WSBFEV1 BonosFiscales Electroacutenicos Manual para el desarrollador V11
bull
Todas las facturas generadas en PDF o formatos similares pueden incluir el detalle de las operaciones(artiacuteculos coacutedigos descripcioacuten precio unitario etc) independientemente de lo que obligue ainformar AFIP en cada webservice No se podriacutea optar por utilizar el WSMTXCA (con detalleRG2904) si no ha recibido notificacioacuten por juez administrativo de AFIP en general corresponde elWSFEv1 (sin detalle RG2485 etal) para la mayoriacutea de los contribuyentes Para emitir facturas conCAEA (coacutedigo de autorizacioacuten electroacutenico anticipado) se deben cumplir ciertas condiciones(cantidad miacutenima de facturas por mes) en general solo aplicable a Auto-Impresores y GrandesContribuyentes
bull
La numeracioacuten de los comprobantes comienza de 1 por cada punto de venta y tipo de comprobante(no se comparten talonarios como con la facturacioacuten tradicional) Incluso cada webservicegeneralmente requiere dar de alta un punto de venta exclusivo No se puede continuar la numeracioacutenprevia ni de otro webservice
bull
La fecha de los comprobantes no puede ser anterior al uacuteltimo emitido pero generalmente se puedeautorizar facturas con fecha entre 5 a 10 diacuteas en el pasado o en el futuro por contingencias(dependiendo del webservice y si es servicios o productos) Ver meacutetodo de consultas y recupero decomprobantes No se podraacute emitir comprobantes antes de la fecha indicada en el formulario deEmpadronamiento (por ej si se eligioacute el inicio en Julio2015 no se pueden emitir facturas con fechade junio)
bull
En caso de inoperatividad del servidor de AFIP se deberiacutea emitir facturas tradicionales y presentar unformulario multinota en la agencia indicando las facturas realizadas manualmente y dejandoconstancia del motivo Para maacutes informacioacuten ver RG2485 Art 33
bull
Notas Generales 16
Se debe confirmar los temas de normativaslegislacioacuten con un Contador Puacuteblico Nacional debidamentehabilitado y con experiencia en el tema
Disclaimer - Aviso Legal
Toda informacioacuten es proporcionada a Titulo Informativo El programa es software libre liberado bajo licenciaGPLv3 y se entrega como estaacute sin garantiacuteas expliacutecitas ni implicitas de ninguacuten tipo incluyendo sin limitacioacutenpeacuterdida de ganancias interrupcioacuten de negocios peacuterdida de programas u otros datos en sistemas decomputacioacuten o cualquier otro reclamo Al usarlo acepta hacerlo bajo su propia responsabilidad conociendo lanormativa y reglamentaciones existentes
Instalacioacuten
Descargas
Bajar y Ejecutar el instalador
Importante ver Actualizaciones para novedades importantes instaladores y cambios recientes
Recomendado Instalador unificado (conteniendo la interfaz para todos los servicios web para homologacioacuten-solo evaluacioacutenpruebas-)
Windows 32 bits
PyAfipWs-272171-32bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSFEv1 WSMTXCAWSFEXv1WSBFEv1 WSCT WSFECred WSCDC WSCOC PyFEPDF PYI25 y PYEMAILWS_SR_Padron COT IIBB Arba Granos -WSLPG y WSCTG- Pecuarios- WSLSP WSLUMWSLTV Trazabilidad Medicamentos Trazabilidad de Productos Meacutedicos Trazabilidad dePrecursores Quiacutenicos Trazabilidad de Productos Agroquiacutemicos Fitosanitarios Trazabilidad deProductos Veterinarios) Recomendado para desarrolloevaluacioacuten
bull
PyAfipWs-271949-32bit+wsaa_211c+wsfev1_119a-typelibexe Instalador de desarrolloactualizado -para referenciar viacutea libreriacutea de tipos- (TypeLib) Soacutelo incluye WSAA y WSFEv1
bull
Windows 64 bits
PyAfipWs-271872-64bit-homoexe (GitHub) Instalador de desarrollo unificado de la interfaz (paratodos los webservices de factura electroacutenica incluye WSAA WSBFE WSFEv1 WSFEXv1WSMTXCA PyFEPDF PYI25 y PYEMAIL Granos -WSLPG y WSCTGv3- COT IIBB ArbaTrazabilidad Medicamentos y Agroquimicos) Recomendado para desarrolloevaluacioacuten
bull
Consultar por otros webservices y sistemas operativos
IMPORTANTE Los instaladores publicados son solo para evaluacioacuten por lo que pueden no estaractualizados con los uacuteltimos ajustes en los servidores yo ejemplos Ver instructivo Instalacioacuten Codigo Fuente( video explicativo) o consultar por soporte comercial
Los ejemplos completos del uso de la interfase en Visual Basic Visual Foxpro y otros lenguajes se puededescargar desde
Disclaimer - Aviso Legal 17
GitHub (repositorio actualizado) o Google Code (histoacuterico)bull
Para guias iniciales ver base de datos con ejemplos completos de WSFEv1 y WSFEX (implementacioacuten dereferencia)
factura_electronicamdb MS Access 2000 o sup programado en VBAbull pyafipwsmdb MS Access 97 programado en VBA (nuevo con FCE)bull pyafipws2kmdb MS Access 2000 o sup programado en VBA (versioacuten anterior)bull
IMPORTANTE las uacuteltimas versiones incorporan nuevas funcionalidades y deben ser testeadas con susistema antes de ser instaladas en produccioacuten De encontrar problemas de instalacioacuten (por causas del sistemaoperativo o similar) que impidan crear el objeto o conectarse al webservice se recomienda utilizar lasversiones anteriores o registrar manualmente los componentes de forma autoacutenoma con --register VerInstalacioacuten Manual para maacutes detalles Recordamos que este tipo de incidentes pueden ser consultados con elsoporte comercial o soporte comunitario ver Maacutes Informacioacuten
Incidencias Conocidas Dado que existen varias versiones dependiendo de que sistema operativo se utiliceen general no deberiacutea haber problemas de instalacioacuten pero puede haber cuestiones de permisos de acceso poliacuteticas de seguridad en algunos entornos Windows (por ej Permission Denied) En esos casosrecomendamos instalarlo como Administrador o darle permisos de modificacioacuten (Propiedades Solapa deSeguridad) al usuario del sistema operativo en la carpeta del componente (generalmente CArchivos deprogramaPyAfipWs o Program Files) Ver Permisos en Windows para mayor informacioacuten
Se recomienda desinstalar cualquier versioacuten anterior y borrar la carpeta de instalacioacuten para evitar archivostemporales residentes o temas similares
Instalacioacuten Manual Avanzada
Para la interfaz COM cada webservice tiene su DLL o EXE que puede ser instalado manualmente (norecomendado en general ya que no verifica si el archivo esta en uso no desinstala automaacuteticamente la versioacutenanterior entre otros temas que pudieran surgir)
Instalacioacuten manual pyafipwsexe --register o utlizar regsvr32 pyafipwsdllbull Desinstalacioacuten manual pyafipwsexe --unregister o utlizar regsvr32 upyafipwsdll
bull
El proceso es similar para instalar la interfaz a otros webservices (cambiando pyafipws por wsfev1wsfexv1 etc seguacuten corresponda por ej wsfexv1exe --register) Tambieacuten se puede registrardirectamente con python python wsaapy --register
Ambos comandos de instalacioacuten son similares pero instalan la interfaz de manera distinta
Embebida (InProcServer) registrando la biblioteca DLL con regsvr32 cuando se invoque a lainterfaz se carga en el mismo proceso del programa principal
bull
Independiente (LocalServer) ejecutando el programa EXE con --register cuando se invoque a lainterfaz se crea un nuevo proceso externo al programa principal (se veraacute el ejecutable por ej en eladministrador de tareas)
bull
NOTA solo es necesario registrar el EXE o la DLL (no ambas) En general es conveniente registrar las DLLpara que se cargue como una libreriacutea compartida embebida (InProcServer) y evitar temas de
Descargas 18
permisosfirewall ya que el EXE registra un proceso independiente (LocalServer) con sus implicancias(pueden surgir temas de permisosfirewall en ciertos sistemas operativos pero se ejecuta independientementeeliminando inconvenientes de dependencias y errores de carga)
Instalacioacuten Silenciosa (Desatendida)
Si bien el instalador muestra un asistente para la instalacioacuten (seleccioacuten del idioma licencia y directorioprogreso) es posible instalarlo sin intervencioacuten del usuario en segundo plano sin mostrar pantalla algunacon
instalador-PyAfipWs-125c-homoexe S D=CPyAfipWS
Las opciones son
S indica instalacioacuten silenciosabull D indica el directorio de instalacioacutenbull
Guiacutea de Instalacioacuten
La interfase se instala automaacuteticamente en CArchivos de Programa en el directorio elegido en elsegundo paso de instalacioacuten como se describe a continuacioacuten
Firma Digital (Editor Comprobado)
Como paso previo de seguridad al ejecutar el instalador verificar que el mismo haya sido firmado pornosotros debiendo aparecer
Editor Comprobado Sistemas Agiles (Mariano Reingart)bull
Consultar en caso de no comprobarse (o mencionar Editor Desconocido) ya que no seriacutea un instaladorcompilado originalmente por nosotros sin alteraciones
Paso 1 Seleccionar idioma
Idiomas disponibles I
Spanish espantildeol (predeterminado)bull English ingleacutesbull
Paso 2 Licencia
Para utilizar el software debe leer y aceptar la licencia
Paso 3 Direcorio de instalacioacuten
De manera predeterminada la interfaz se instalaraacute en una carpeta bajo el directorio estaacutendard de windows (porej CArchivos de Programa o CProgram Files) Se recomienda instalarla directamente en
Instalacioacuten Manual Avanzada 19
el directorio raiz (por ejCPYAFIPWS) para simplificar el acceso a las herramientas por linea de comandos
Paso 3 Finalizar instalacioacuten
Por uacuteltimo el instalador realizaraacute la instalacioacuten
Desinstalar versiones anterioresbull Crear el directorio de destinobull Extraer y copiar los archivosbull Crear desinstaladorbull Copiar configuracioacuten (RECEINI si corresponde)bull Registrar DLLbull
Puede ver el avance y estado final presionando el botoacuten Ver Detalles
Referenciar TypeLib
Ciertos instaladores (-typelib) incluyen una libreriacutea de tipos que es posible referenciar por ej en VB
Importante En general no es necesario referenciar el componente Invocando CreateObject deberiacuteafuncionar y devolveriacutea el objeto dinaacutemico en la mayoriacutea de los lenguajes de programacioacuten (VB VFP etc)
Maacutes informacioacuten
Soporte Comercial (asesoramiento inicial sin cargo de cortesiacutea -limitado y sin compromisos-)Web httpwwwsistemasagilescomartracwikiPyAfipWsdiams Por email facturaelectronicasistemasagilescomardiams Telefoacutenicamente (011) 4450-0716 y (011) 15-3048-921diams
bull
Soporte comunitario (gratuito)Sitio del proyecto httpwwwpyafipwscomardiams Grupo de noticiasdiscusiones httpgroupsgooglecomgrouppyafipwsdiams Coacutedigo Fuente httpsgithubcomreingartpyafipws (actual) y httpcodegooglecomppyafipws (histoacuterico)
diams
Incidencias httpsgithubcomreingartpyafipwsissuesdiams
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA)
Este servicio es necesario para acceder al resto de los servicios de negocios (ej Factura Electroacutenica) ofrecidospor la AFIP
Se debe generar un Ticket de Requerimiento de Acceso (TRA) firmarlo criptograacuteficamente (generando unmensaje CMS) que es enviacutea al servicio web para obtener un Ticket de Acceso (TA)
Esta interfase crea el mensaje en XML lo firma criptograacuteficamente y lo codifica en base-64 como lo requierela AFIP por lo que en general no es necesario realizar ninguno de estos pasos
Paso 3 Direcorio de instalacioacuten 20
Para maacutes informacioacuten oficial ver especificaciones teacutecnicas del WSAA y Arquitectura WS en el sitio de laAFIP
Importante es requerido tramitar los certificados para poder operar este webservice Para maacutes informacioacutenver Instructivos sobre Certificados
Objeto
El objeto COM se crea invocando a CreateObject(WSAA)bull
Meacutetodos
CreateTRA(service ttl) recibe el nombre del servicio (wsfe wsbfe wsfex wsctg etc) y eltiempo de vida (en segundos por defecto 2400) y devuelve un ticket de requerimiento de acceso(string con formato xml) Se puede revisar o modificar el xml devuelto (en general no es necesario)
bull
SignTRA(tra certificado clave_ privada passphrase) recibe el ticket derequerimiento de acceso (string con formato xml creado previamente) y las ubicaciones delcertificado y clave privada (o el contenido de los mismos) Firma el ticket y devuelve el mensaje CMS(string con formato xml) Importante El paraacutemetro opcional passphrase permite protejer la claveprivada por contrasentildea (Disponible a partir de la versioacuten 208) Tambieacuten se puede pasar el contenidode los archivos (como string) en certificado y clave_ privada (pudiendo ser guardados enla base de datos u otro tipo de almacenamiento)
bull
CallWSAA(cms url_webservice) Recibe el mensaje CMS (string con formato xml) y laURL del webservice Se conecta con el servidor remoto ejecuta el meacutetodo remoto LoginCMS ydevuelve el Ticket de Acceso (TA string con formato xml) generado por la AFIP Si no se especifiacutecaurl se utiliza servidores de homologacioacuten
bull
Conectar(cache url_webservice_wsdl proxy wrapper cacert) Nuevo Establece la conexioacuten con el servidor remoto recibe el directorio de archivos temporales la URL delWSDL (descripcioacuten del webservice) y proxy en formato usuarioclaveservidorpuerto Si no seespecifiacuteca url se utiliza servidores de homologacioacuten Parametros adicionales optativos wrapper es lalibreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor (CA)
bull
LoginCMS(cms) Nuevo Recibe el mensaje CMS (string con formato xml) ejecuta el meacutetodoremoto LoginCMS y devuelve el Ticket de Acceso (TA string con formato xml) generado por laAFIP Debe conectarse previamente con Conectar Establece los atributos Token Sign
bull
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido por defecto el ticket deacceso)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Expirado(fecha) Nuevo recibe una fecha (por defecto la fecha de expiracioacuten del uacuteltimo ticketde acceso generado) y verifica contra el reloj del equipo si dicha fecha ha expirado (en cuyo casodevuelve verdadero)
bull
Autenticar(service crt key [wsdl proxy wrapper cacert cachedebug]) Nuevo Meacutetodo unificado para obtener el ticket de acceso Almacena temporalmente elticket de acceso en un archivo en el directorio cache (debe tener permisos de escritura en esedirectorio) y automaacuteticamente lo reutiliza o solicita uno nuevo en caso de que no haya vencidoDisponible a partir de la versioacuten 207
bull
Servicio Web de Autenticacioacuten y Autorizacioacuten (WSAA) 21
Se recomienda comenzar a utilizar Conectar y LoginCMS en reemplazo de CallWSAA ya que los nuevosmeacutetodos tienen mejor manejo de errores pueden reutilizar la conexioacuten etc
Meacutetodos para Certificados
Los meacutetodos adicionales para el manejo de certificado permiten automatizar el procesamiento y generarpedidos de certificado directamente con este componente sin necesidad de utilizar comandos externosNuevo Disponible a partir de la versioacuten 210
AnalizarCertificado(crt) Carga un certificado digital y extrae los campos maacutesimportantes (establece propiedades Identidad Caducidad Emisor)
bull
CrearClavePrivada(self filename=privadakey key_length=2048pub_exponent=0x10001 passphrase=) Crea una clave privada (private key) necesariapara generar un certificado Queda referenciada internamente para poder crear el CSR (ver siguientemeacutetodo) por lo que las dos operaciones deben hacerse en la misma instancia Puede utilizarse unacontrasentildea (passphrase) para mayor seguridad (especialmente si la clave privada va a alojarse enuna carpeta compartida)
bull
CrearPedidoCertificado(self cuit= empresa=nombre=pyafipwsfilename=empresacsr) Crear un certificate signing request(X509 CSR) - pedido de certificado a gestionar por Clave Fiscal de AFIP para obtener el crt Se debeindicar el CUIT del representante nombre de la empresa (tal cual aparece en la constancia deinscripcioacuten) nombre de fantasia alias del certificado (identificando punto de venta sistema defacturacioacuten etc) y nombre del archivo a generar (recomendable ruta absoluta a una carpeta conpermisos de escritura)
bull
wsaaAnalizarCertificado(reingartcrt)print wsaaIdentidadprint wsaaCaducidad (Fecha de vencimiento)print wsaaEmisorprint wsaaCertX509
Por linea de comando puede ejecutarse el moacutedulo wsaapy con el meacutetodo --analizar
WSAA_cliexe --analizar reingartcrt reingartkey
Atributos
Token el el coacutedigo de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Sign el la firma de autorizacioacuten generado por la AFIP necesario para utilizar el resto de losservicios web
bull
Version versioacuten de la interfase (ej 16)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Identidad Caducidad Emisor CertX509 Nuevo campos del certificado analizado(actualizacioacuten 210 o posterior)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Meacutetodos 22
Ejemplo
Dim WSAA As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA)service = wsfe servicio a accederttl = 2400 tiempo de vida en segundostra = WSAACreateTRA(service ttl) Especificar la ubicacion de los archivos certificado y clavesPath = CurDir() + Certificado = reingartcrt certificado es el firmado por la afipClavePrivada = reingartkey clave privada usada para crear el cert
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
WSAALanzarExcepciones = False revisar Excepcion para controlar errores
Llamar al web service para autenticar anteriormente ta = WSAACallWSAA(cms httpswsaaafipgovarwsservicesLoginCms) Hologacioacuten ahora cache = Directorio para archivos temporales (dejar en blanco para usar predeterminado)wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl homologacioacutenproxy = usar usuarioclaveservidorpuertook = WSAAConectar(cache wsdl proxy)ta = WSAALoginCMS(cms) otener ticket de acceso
If WSAAExcepcion ltgt Then MsgBox WSAAExcepcion vbCritical ExcepcioacutenEnd If
Obtener Token y Sign de autorizacioacutenToken = WSAATokenSign = WSAASign
El Ticket de Acceso contiene el Token (coacutedigo) y Sign (firma) son los elementos que se utilizan en los otrosservicios web para lograr acceso a los mismos
Estos datos se pueden usar por un periacuteodo de tiempo (40 minutos modificable ver Reutilizacioacuten de Ticket deAcceso) siendo necesario volver a invocar el WSAA solo al finalizar este periacuteodo para obtener nuevos Tokeny Sign
Errores
El WSAA informa errores alfanumeacutericos (ErrNumber vbObjectError = 0) debiendo verificar la descripcioacuten(ErrDescription) Entre ellos los maacutes comunes son
cmscertexpired cmscertinvalid cmscertuntrusted El certificado no fue firmado por la AFIPexpiroacute es invaacutelido no se confiacutea en su emisor o no coincide la fuente Se debe revisar o emitircorrectamente los certificados Ver traacutemite de Generacioacuten
bull
xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid El tiempo degeneracioacutenexpiracioacuten es invaacutelido Debe sincronizar relojes con el servidor de la AFIP En Windows
bull
Ejemplo 23
propiedades del reloj habilitar Hora de Internet ingresar timeafipgovarwsnunavailable wsaaunavailable servicio no disponible momentaacuteneamentebull coenotAuthorized Computador no autorizado a acceder los servicios de AFIP Ver traacutemite deAsociacioacuten
bull
cmscertuntrusted Certificado no emitido por AC de confianza Revisar URL para ambiente correcto(produccioacutenhomologacioacuten) y Comprobacioacuten de Autenticacioacuten
bull
wsnnotFound Servicio informado inexistente se debe crear el ticket para un servicio vaacutelido (wsfewsfex etc)
bull
coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (verreutilizacioacuten del ticket de acceso abajo)
bull
Para maacutes errores frecuentes ver Falla SOAP WSAA
Reutilizacioacuten de Ticket de Acceso
Ante problemas de timeout y java socket read failed al intentar solicitar ticket de acceso (WSAA) ons1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado (en generalpor sobrecarga o limitacioacuten de AFIP) es posible mitigar el tema reusando un ticket de acceso (token y sign)por hasta 12 hs (40 minutos por defecto) estableciendo el tiempo de vida del ticket pasandolo en el segundoparaacutemetro de CreateTRA (ttl en segundos en este manual esta documentado en secciones previas)
Por ej para un tiempo de vida de 10 hs (103600 segundos valor recomendado para evitar problemas desincronizacioacuten de relojes)
tra = WSAACreateTRA(wsfe 36000)
Luego de solicitar el ticket de acceso el Token y Sign puede ser usado por el periacuteodo especificado (dichosvalores pueden almacenarse en memoria en un archivo o base de datos etc)
Importante se puede guardar WSAAToken y WSAASign en una variable global y luego reutilizarlocada vez que se genera una factura
luego de llamara WSAALoginCMS o WSAACallWSAA o WSAAAutenticar
token = WSAATokensign = WSAASign
guardar token y sign en la base de datos archivo o una variable global
antes de llamar a WSFEv1CAESolicitar WSFEXv1Authorize o similar
WSFEv1Token = tokenWSFEv1Sign = sign
En general no es necesario verificar la fecha del ticket de acceso ya que en general es vaacutelido por 12 horas
Igualmente desde las versiones actualizadas de WSAA (202 o superior) es posible llamar al meacutetodoWSAAExpirado() antes de utilizar el ticket de acceso y este devolveraacute Verdadero si el ticket de accesosigue siendo vaacutelido (dada la fecha del reloj del equipo) o Falso si ha vencido su plazo y debe solicitarse unnuevo ticket de acceso
Errores 24
Por ejemplo luego de obtener el Token y Sign (ya sea por CallWSAA o LoginCMS) obtener y guardar lafecha de expiracioacuten
expiracion = WSAAObtenerTagXml(expirationTime)
Luego antes de usar el Token y Sign (por ej antes de llamar a WSFEv1 WSFEX etc) preguntar si el TA esvaacutelido (no ha expirado)
expiro = WSAAExpirado(expiracion)
Si expiro es True se debe generar otro ticket de acceso porque ha vencido su validez (con este meacutetodo sepuede guardar y verificar independientemente la fecha de expiracioacuten por cada servicio a usar wsfe wsfexwsbfe wsmtxca etc)
Si se comparte el certificado entre distintas maacutequinas o programas debe compartirse el ticket de acceso (porej guardandolo en un archivo o base de datos) y realizar esta verificacioacuten en cada instancia
Ejemplo completo en
reusar_ticket_accesobas (VB) y reusar_ticket_acceso_avanzadoprg (VFP) maacutes avanzadoguardando el TA en un archivo (y poder compartirlo por red o entre varios programas)
bull
reusar_ticket_accesoprg (VFP) y reusar_ticket_acceso_simplebas (VB) simplificado usando el TAen memoria
bull
Nota No es necesario guardar el ticket de acceso completo en un archivo para reutilizarlo Este ejemplo esuacutetil si se debe compartir el ticket entre diferentes programas u equipos en una red Si se usa en un soloprograma y este permanece abierto se puede mantener el valor del Token y Sign directamente en memoria(por ej en una variable) y reusarlo por hasta 12 hs (generalmente solicitandolo al iniciar el programa ymanteniendolo por una jornada de trabajo completa) Tambieacuten se podriacutea almacenar el valor de Token ySign en una base de datos o similar
Ejemplo simple reutilizacioacuten de TA
Ejemplo completo de reuso (usando el ticket de acceso en memoria)
Function Autenticar(TA as String = ) as String Procedimiento para autenticar con AFIP y reutilizar el ticket de acceso Llamar antes de utilizar WSAAToken y WSAASign (WSAA debe estar definido a nivel de moacutedulo)Dim ok expiracion solicitar token sign
cargar ticket de acceso previo (si no se mantiene WSAA instanciado en memoria)If TA ltgt Then
ok = WSAAAnalizarXml(TA)End If
revisar si el ticket es vaacutelido y no ha expirado expiracion = WSAAObtenerTagXml(expirationTime) DebugPrint Fecha Expiracion ticket expiracion
If IsNull(expiracion) Then solicitar = True solicitud inicial
Else solicitar = WSAAExpirado(expiracion) chequear solicitud previa
End If
Reutilizacioacuten de Ticket de Acceso 25
If solicitar Then Generar un Ticket de Requerimiento de Acceso (TRA)
tra = WSAACreateTRA()
uso la ruta a la carpeta de instalaciograven con los certificados de prueba ruta = WSAAInstallDir + DebugPrint ruta ruta
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra ruta + reingartcrt ruta + reingartkey) Cert Demo
ok = WSAAConectar( httpswsaahomoafipgovarwsservicesLoginCms) Homologacion
Llamar al web service para autenticar TA = WSAALoginCMS(cms)
Else DebugPrint no expirado Reutilizando
End If DebugPrint WSAAObtenerTagXml(destination)
Obtener las credenciales del ticket de acceso (desde el XML por si no se conserva el objeto WSAA) token = WSAAObtenerTagXml(token) sign = WSAAObtenerTagXml(sign)
Al retornar se puede utilizar token y sign para WSFEv1 o similar Devuelvo el ticket de acceso (RETURN) para que el programa principal lo almacene si es necesario
Autenticar = TAEnd Function
Importante en este caso WSAA debe ser un objeto global y persistente (al menos por lo que dure elprograma en produccioacuten) no se debe instanciar por cada llamada a Autorizar de lo contrario se perderaacuten elToken y Sign no reutilizando el ticket de acceso Si esto no es posible se debe persistir el Ticket de Accesoen un archivo o base de datos compartida
Ejemplo avanzado reutilizacioacuten de TA
Ejemplo completo de reuso (almacenando el ticket de acceso en un archivo tambieacuten podriacutea usarse una tablaen base de datos sesioacuten u otro medio durable)
inicializo las variablesToken = Sign =
busco un ticket de acceso previamente almacenadoIf Dir(taxml) ltgt Then
leo el xml almacenado del archivo Open taxml For Input As 1 Line Input 1 ta_xml Close 1
analizo el ticket de acceso previo ok = WSAAAnalizarXml(ta_xml)
If Not WSAAExpirado() Then puedo reusar el ticket de acceso
Token = WSAAObtenerTagXml(token) Sign = WSAAObtenerTagXml(sign)
End IfEnd If
Si no reuso un ticket de acceso solicito uno nuevoIf Token = Or Sign = Then
Ejemplo simple reutilizacioacuten de TA 26
Generar un Ticket de Requerimiento de Acceso (TRA) tra = WSAACreateTRA(wsfe 43200) 360012hs
Especificar la ubicacion de los archivos certificado y clave privada cert = reingartcrt certificado de prueba clave = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS) cms = WSAASignTRA(tra cert clave)
If cms ltgt Then Llamar al web service para autenticar (cambiar URL para produccion)
wsdl = httpswsaahomoafipgovarwsservicesLoginCmswsdl ok = WSAAConectar( wsdl) ta_xml = WSAALoginCMS(cms)
If ta_xml ltgt Then guardo el ticket de acceso en el archivo
Open taxml For Output As 1 Print 1 ta_xml Close 1
End If Token = WSAAToken Sign = WSAASign
End If reviso que no haya errores
DebugPrint Excepcion WSAAExcepcionIf WSAAExcepcion ltgt Then
DebugPrint WSAATracebackEnd If
End If
Imprimir los datos del ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint Token + TokenDebugPrint Sign + Sign
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA
Importante A partir de la actualizacioacuten 207 es posible utilizar el meacutetodo unificado Autenticar (queautomaacuteticamente contempla el tema de reutilizacioacuten al guardar el Ticket de Acceso en un archivo temporal enel directorio cache) en conjuncioacuten con SetTicketAcceso
Crear la instancia (usar CreateObject en VB y similares)wsaa = WSAA()
servidor de AFIP para homologacioacuten (cambiar para produccioacuten)wsaa_url = httpswsaahomoafipgovarwsservicesLoginCmswsdl
parametros opcionalesproxy = solo usar si hay servidor intermediowrapper = httplib2 (default) pycurl (depende proxy)cacert = confafip_ca_infocrt autoridades certificantes (servidores)cache = directorio archivos temporales (verificar permisos)debug = False depuracioacuten interna (en VB es palabra reservada usar otro nombre)
obtener el TA para pruebasta = wsaaAutenticar(wsfe reingartcrt reingartkey wsaa_url proxy wrapper cacert cache debug)
utilizar las credencialesprint wsaaTokenprint wsaaSign
establecer Ticket de Acceso en un solo paso (Nuevo meacutetodo)wsfev1SetTicketAcceso(ta)
Ejemplo avanzado reutilizacioacuten de TA 27
Nota dependiendo del sistema operativo deberaacute conceder permisos de acceso de escritura en la carpeta cachepara poder almacenar el ticket de acceso Tambieacuten es posible pasar el 8vo paraacutemetro cache de Autenticar conotro directorio para los archivos temporales Ver Permisos en Windows para maacutes informacioacuten
Obtencioacuten de Atributos Avanzados WSAA
En versiones recientes (204a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosdel ticket de acceso (uacutetiles para depuracioacuten y solucioacuten de errores)
Origen (Source) WSAAObtenerTagXml(source)bull Destino (Destination) WSAAObtenerTagXml(destination)bull ID Uacutenico WSAAObtenerTagXml(uniqueId)bull Fecha de Generacioacuten WSAAObtenerTagXml(generationTime)bull Fecha de Expiracioacuten WSAAObtenerTagXml(expirationTime)bull
Si ha ocurrido error (llamar previamente a WSAAAnalizarXml(XmlResponse) para analizar larespuesta)
Codigo de Fallo WSAAObtenerTagXml(faultcode)bull Mensaje de Fallo WSAAObtenerTagXml(faultstring)bull Servidor WSAAObtenerTagXml(ns3hostname)bull
Estos datos son uacutetiles para determinar problemas con el certificado ver Comprobacioacuten de AutenticacioacutenWSAA
Servicio Web de Factura Electroacutenica (WSFE)
Este servicio es ofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFE en el sitio de la AFIP
httpwswhomoafipgovarfiscaldocsWSFEWSFE-ManualParaElDesarrollador-090317pdf
Objeto
El objeto COM se crea invocando a CreateObject(WSFE)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
Ejemplo del meacutetodo Autenticar para reutilizacioacuten de TA 28
UltNro() recuperar el uacuteltimo nuacutemero de transaccioacuten (id) Devuelve el uacuteltimo valor de secuenciautilizado al pedir autorizacioacuten Uso opcional
bull
Aut(id presta_serv tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto impto_liqimpto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago[fecha_serv_desde] [fecha_serv_hasta]) autoriza la emisioacuten de factura electroacutenicarecibe el id de secuencia (recuperado por UltNro) presta_serv en 1 si se esta facturando servicios (eneste caso es obligatorio el uso de la fecha de servicio desde y hasta) los datos de la factura a emitir ydevuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) Ver ejemplo para el detalle de losparaacutemetros
bull
RecuperaLastCMP(punto_venta tipo_comprobante) recibe el punto de venta y tipode comprobante (stringsenteros) devuelve el uacuteltimo nuacutemero de comprobante autorizado Usoopcional
bull
RecuperaQty() recupera cantidad maacutexima de registros de detalle (por el momento no es demayor utilidad ya que por simplicidad se enviacutea 1 registro de detalle por autorizacioacuten) Uso opcional
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Motivo Reproceso valores complementarios que retorna Autbull CbtDesde CbtHasta FechaCbte` nuacutemeros y fecha de comprobante autorizado queretorna Aut
bull
ImpTotal ImpNeto ImptoLiq` importes total neto e IVA que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 16)bull
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a realizar (ej Factura A solopara tipo_doc = 80 CUIT Facturas B por lote hasta $1000- etc)
bull
Ver especificaciones teacutecnicas del WSFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Meacutetodos 29
Ejemplo
Autorizar una factura electroacutenica nacional a modo de ejemplo (ficticia)
Crear objeto interface Web Service de Factura Electroacutenica
Set WSFE = CreateObject(WSFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEToken = WSAATokenWSFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSFECuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (servidor de homologacioacuten)ok = WSFEConectar(httpswswhomoafipgovarwsfeserviceasmx)
Llamo a un servicio tonto para obtener el estado (opcional)WSFEDummyDebugPrint appserver status WSFEAppServerStatusDebugPrint dbserver status WSFEDbServerStatusDebugPrint authserver status WSFEAuthServerStatus
Recupera cantidad maacutexima de registros (opcional)qty = WSFERecuperarQty()
Recupera uacuteltimo nuacutemero de secuencia IDLastId = WSFEUltNro()
Recupero uacuteltimo nuacutemero de comprobante (opcional)tipo_cbte = 1 punto_vta = 1LastCBTE = WSFERecuperaLastCMP(punto_vta tipo_cbte)
Establezco los valores de la factura o lote a autorizar 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000fecha_cbte = Fecha fecha_venc_pago = Fecha Fechas del periacuteodo del servicio facturado (solo si presta_serv = 1)fecha_serv_desde = Fecha fecha_serv_hasta = Fecha
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEAut(id presta_serv _ tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ impto_liq impto_liq_rni imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desde fecha_serv_hasta) solo pasar si presta_serv=0MsgBox CAE amp cae amp Vencimiento amp WSFEVencimientoExit Sub
ManejoError Si hubo errorDebugPrint ErrDescription descripcioacuten error afipDebugPrint ErrNumber - vbObjectError codigo error afipMsgBox ErrDescription vbCritical + vbRetryCancel _
Error amp (ErrNumber - vbObjectError) amp en amp ErrSource
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz (ver aclaracioacuten)
Ejemplo 30
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE)
Se debe llamar al meacutetodo Aut con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a UltNro puede utilizarse un dato local secuencial
bull
presta_serv 0 o 1 para indicar si es una factura de serviciosbull tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (1 Factura A 6 Factura B etc)bull punto_vta Nordm de punto de venta (debe estar autorizado)bull cbt_desde cbt_hasta Nordm de comprobante (si es un solo comprobante repetir Nordm)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 5 diacuteas)bull fecha_venc_pago Fecha liacutemite de vencimiento para el pago de la facturabull fecha_serv_desde fecha_serv_hasta Fechas del periacuteodo de servicios prestadobull
Ver todos los tipos de comprobante httpwswhomoafipgovarfiscaldocsWSFECodCpbtetxt
Ver todos los tipos de documentos httpwswhomoafipgovarfiscaldocsWSFECodDocIDtxt
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEResultado =A (Aceptado) y WSFEVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o los servidores de la AFIP no funcionan o nodevuelven la respuesta esperada
bull
cae = NULL El servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEResultado = R (Rechazado) y WSFEMotivo con los diversos motivos de rechazoproporcionados por el webservice
WSFEMotivo = 00 o NULL no hay error (solo como referencia)diams WSFEMotivo = 01 CUIT informada no es RIdiams WSFEMotivo = 02 CUIT no autorizada a facturar electroacutenicamentediams WSFEMotivo = 03 CUIT registra inconvenientes con domicilio fiscaldiams WSFEMotivo = 04 Punto de venta no se encuentra declaradodiams WSFEMotivo = 05 Fecha del comprobante incorrectadiams WSFEMotivo = 06 CUIT no puede emitir comprobantes clase Adiams WSFEMotivo = 07 para comprobantes clase A debe indicar CUITdiams WSFEMotivo = 08 CUIT informada es invaacutelidadiams WSFEMotivo = 09 CUIT informada no existe en el padroacutendiams WSFEMotivo = 10 CUIT informada no corresponde a un RIdiams WSFEMotivo = 11 el nordm de comprobante no es correlativo o fecha no correspondediams WSFEMotivo = 12 el rango informado se encuentra autorizadodiams WSFEMotivo = 13 LA CUIT INDICADA SE ENCUENTRA COMPRENDIDA EN ELREGIMEN ESTABLECIDO POR LA RESOLUCION GENERAL Ndeg 2177 YO EN ELTITULO I DE LA RESOLUCION GENERAL Ndeg 1361 ART 24 DE LA RG Ndeg 2177-
diams
bull
Descripcioacuten del Meacutetodo Aut (obtencioacuten de CAE) 31
Para ver la lista completa de coacutedigos de motivos F136 httpwswhomoafipgovarfiscaldocsWSFEF136_MOTIVOStxt
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia En el caso de que la conexioacuten se interrumpa luego de que la AFIP registre la factura y antes deque la informacioacuten del CAE llegue al equipo la uacutenica alternativa es repetir la llamada a Aut con los mismosdatos (incluido el ID original) para obtener el CAE generado anteriormente En ese caso se WSFEReprocesoes S para indicar que el CAE se ha recuperado Por esto es importante guardar el ID o utilizar un dato local
Ver httpwswhomoafipgovarfiscaldocsWSFEWSFE-GuiaAdicionalParaElProgramadorpdf
Servicio Web de Bono Fiscal Electroacutenico (WSBFE)
EL WSBFE (Bonos Fiscales Electroacutenicos) es un Servicio Web de la AFIP para Facturas Electroacutenicas deBienes de Capital correspondiente al Artiacuteculo 3 de la Resolucioacuten General 25572009Este servicio esofrecidos por la AFIP para la facturacioacuten electroacutenica
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de cada item
A su vez el WSBFE devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva producto seguacuten NCM zonas unidades de medida Estas tablaspueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha devigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia delWSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSBFE en el sitio de la AFIP
httpwwwafipgovarwsWSBFEWSBFE-ManualParaElDesarrolladorpdf
httpwwwafipgovarwsWSBFEWSBFE-GuiaAdicionalParaElProgramadorpdf
La programacioacuten de la interfase WSBFE es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSBFE)bull
Servicio Web de Bono Fiscal Electroacutenico (WSBFE) 32
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica ur se utiliza servidores de homologacioacuten
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(tipo_doc nro_doc zona tipo_cbte punto_vtacbte_nro fecha_cbte imp_total imp_neto impto_liq imp_tot_concimpto_liq_rni imp_op_ex imp_perc imp_iibb imp_perc_munimp_internos imp_moneda_id Imp_moneda_ctz) crea internamente una factura paraluego poder autorizarla recibe los datos de la factura a emitir Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarItem(ncm sec ds qty umed precio bonif iva_idimp_total) agrega internamente un item (linea de factura) a una factura para luego poderautorizarla recibe los datos del item a factura a emitir Ver ejemplo para el detalle de los paraacutemetros
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoIVA() GetParamUMed()GetParamNCM() recupera valores referenciales de coacutedigos de las tablas de paraacutemetros devuelveuna lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde- (verejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpNeto importe neto del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImptoLiq impuesto liquidado (IVA) del comprobante (del comprobante recuperado devuelto porGetCmp)
bull
Meacutetodos 33
Errores
La interfase procesa los errores WSFE y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSBFE para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura de bienes de capital (bono fiscal electroacutenico) a modo de ejemplo (ficticia)
Dim WSAA As Object WSBFE As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSBFEtra = WSAACreateTRA(wsbfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada) Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten Una vez obtenido se puede usar el mismo token y sign por 24 horas
Crear objeto interface Web Service de Factura ElectroacutenicaSet WSBFE = CreateObject(WSBFE)
Setear tocken y sing de autorizacioacuten (pasos previos)WSBFEToken = WSAATokenWSBFESign = WSAASign CUIT del emisor (debe estar registrado en la AFIP)WSBFECuit = 20267565393
Conectar al Servicio Web de Facturacioacutenok = WSBFEConectar(httpwswhomoafipgovarwsbfeserviceasmx) homologacioacuten
Establezco los valores de la factura a autorizarfecha = 20090530tipo_doc = 80 nro_doc = 23111111113zona = 0 Ver tabla de zonas
Errores 34
tipo_cbte = 1 Ver tabla de tipos de comprobantepunto_vta = 2 cbte_nro = 16fecha_cbte = fechaimp_total = 12100 imp_tot_conc = 000 imp_neto = 10000impto_liq = 2100 impto_liq_rni = 000 imp_op_ex = 000imp_perc = 000 imp_iibb = 000 imp_perc_mun = 000imp_internos = 000imp_moneda_id = 10 Ver tabla de tipos de monedaImp_moneda_ctz = 10000 cotizacioacuten de la moneda
Creo una factura (internamente no se llama al WebService)ok = WSBFECrearFactura(tipo_doc nro_doc _ zona tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total imp_neto impto_liq _ imp_tot_conc impto_liq_rni imp_op_ex _ imp_perc imp_iibb imp_perc_mun imp_internos _ imp_moneda_id Imp_moneda_ctz)
Agrego un itemncm = 73081000 Ver tabla de coacutedigos habilitados del NCMsec = Coacutedigo de la Secretariacutea (no usado por el momento)ds = Prueba Descripcioacuten completa del artiacuteculo (hasta 4000 car)umed = 1 kg Ver tabla de unidades de medidaqty = 10 cantidadprecio = 1050 precio neto (FacA) precio final (Facuras B)bonif = 500 descuentos (en positivo)iva_id = 5 21 ver tabla aliacutecuota de ivaimp_total = 12100 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSBFEAgregarItem(ncm sec ds qty umed precio bonif iva_id imp_total)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSBFEAuthorize(id)
If cae = Or WSBFEResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyElseIf WSBFEObs ltgt And WSBFEObs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp WSBFEObs _ vbInformation + vbOKOnlyEnd If
MsgBox Resultado amp WSBFEResultado amp CAE amp cae amp _ Reproceso amp WSBFEReproceso amp _ Obs amp WSBFEObs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)
For Each evento In WSBFEEventosIf evento ltgt 0 Then
MsgBox Evento amp evento vbInformationEnd If
Next
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales del Nomenclador Comuacuten Mercosur habilitados
recupero tabla del nomenclador comuacuten del mercosur
Ejemplo 35
(codigo descripcioacuten (vigencia desde - hasta)) Ej 99999999 (item no incluiacutedo en el Beneficio Fiscal) (20070524 - 20091231)For Each x In WSBFEGetParamNCM() DebugPrint x Next
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSBFE)bull cbt_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull zona_id Zona (seguacuten tabla de paraacutemetros) - Por el momento 0bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull impto_liq Importe del IVA liquidado (incluyendo percepciones de IVA)bull impto_liq_rni Importe IVA RNI (no se utiliza mas dejar 000)bull imp_op_ex Importe de operaciones exentasbull imp_moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull imp_moneda_ctz Cotizacioacuten de la moneda de la facturabull imp_perc Importe de las precepcionesbull imp_iibb Importe de las percepciones de ingresos brutosbull imp_perc_mun Importe de las percepciones municipalesbull imp_internos Importe de los impuestos internosbull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
ncm coacutedigo habilitado seguacuten el Nomenclador Comuacuten del Mercosur (NCM)bull sec coacutedigo de la secretariacutea (no utilizado por el momento pasar )bull ds Descripcioacuten completabull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull bonif Bonificacioacutenbull iva_id Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_total Importe total (incluyendo descuentos e IVA)bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEUltNro puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSBFEResultado =A (Aceptado) y WSBFEVencimiento Sino devuelve
Descripcioacuten de la obtencioacuten de CAE 36
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSBFEObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX)
EL WSFEX es un Servicio Web de la AFIP para Facturas Electroacutenicas de Exportacioacutencorrespondiente a la Resolucioacuten General 27582010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSBFE (con un ID secuencial observacionesreproceso etc) teniendo en cuenta esta mayor complejidad por tener que informar los datos de exportacioacutenpermisos comprobantes asociados y el detalle de cada item
A su vez el WSFEX devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
Al igual que el WSBFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda idiomas terminos de comercio exterior paises y cuits unidades de medida etc Estastablas pueden sufrir modificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen unafecha de vigencia (desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (adiferencia del WSFE que las tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEX en el sitio de la AFIP
Manual para el desarrolladorpdf (version 0) Informacioacuten importante sobre la operatoriabull Manual para el desarrolladorpdf (version 1) Informacioacuten importante sobre la operatoria ( NuevaVersioacuten)
bull
FacturaElectronicaExportacion Informacioacuten general cambios ejemplos descargas y paraacutemetrosvigentes (puede estar ligeramente desactualizado)
bull
La programacioacuten de la interfase WSFEX es similar a WSBFE se recomienda revisarlo
WSFEX Versioacuten 1 (WSFEXv1)
Seguacuten RG306611 AFIP publicoacute una nueva versioacuten 1 (WSFEXv1) a entrar en vigencia obligatoria el31-12-2011 para maacutes informacioacuten ver Cambios WSFEXv1 respecto a WSFEXv0
Servicio Web de Factura Electroacutenica Exportacioacuten (WSFEX) 37
Ambos webservices son muy similares por lo que se documenta en esta seccioacuten solo las diferenciasintroducidas
Importante Si bien se mantiene retrocompatibilidad para conectarse al nuevo webservice es necesarioutilizar el objeto WSFEXv1 y usar las nuevas URL
httpswswhomoafipgovarwsfexv1serviceasmxWSDL (homologacioacuten)bull httpsservicios1afipgovarwsfexv1serviceasmxWSDL (producciograven)bull
Aclaracioacuten WSFEXv1 es un nuevo webservice y AFIP ha agregado campos (bonificacioacuten) ha cambiadovarios tipos de datos (en importes cantidad de decimales) ha agregado coacutedigos de tablas de paraacutemetros(unidades de medida) y comprobantes asociados (remitos de tabaco) y ademaacutes realiza nuevas validacionespor lo que recomendamos probar exhaustivamente la interfaz con el desarrollo para exportacioacuten
Ajustes desarrollos de WSFEX a WSFEXv1
Si no utiliza las caracteriacutesticas nuevas es posible utilizar el coacutedigo desarrollado para WSFEX con nuestrainterfaz WSFEXv1
Coacutedigo Anterior (WSFEX)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEX)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar(httpswswhomoafipgovarwsfexserviceasmx) homologacioacuten
Coacutedigo Nuevo (WSFEXv1)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1)
Conectar al Servicio Web de Facturacioacutenok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL) homologacioacuten
RECEX vs RECEX1
Por linea de comando tenemos disponible la herramienta RECEX1EXE que reemplaza a RECEXEXE yutiliza praacutecticamente el mismo formato de archivo y campos El nuevo formato esta documentado la seccioacutenRECEX1 - WSFEXv1
Objeto
El objeto COM se crea invocando a CreateObject(WSFEX) para Versioacuten 0 (hasta 30-12-2011)bull El objeto COM se crea invocando a CreateObject(WSFEXv1) para Versioacuten 1 (desde 31-12-2011)bull
Meacutetodos
Conectar(url) realiza la conexioacuten a los servidores de la AFIP (primer paso esencial) Si no seespecifica url se utiliza servidores de homologacioacuten Importante para WSFEXv1 los paraacutemetros soncache url proxy httpwrapper y cacert ver WSFEv1 Nuevo
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull
WSFEX Versioacuten 1 (WSFEXv1) 38
CrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte imp_totaltipo_expo permiso_existente dst_cmp cliente cuit_pais_clientedomicilio_cliente id_impositivo moneda_id moneda_ctzobs_comerciales obs forma_pago incoterms idioma_cbteincoterms_ds fecha_pago) crea internamente una factura para luego poder autorizarlarecibe los datos de la factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importantefecha_pago se agrega en WSFEXv1 Modificado
bull
AgregarItem(ncodigo ds qty umed precio imp_total bonif) agregainternamente un item (linea de factura) a una factura para luego poder autorizarla recibe los datos delitem a factura a emitir Ver ejemplo para el detalle de los paraacutemetros Importante bonif se agrega enWSFEXv1 Modificado
bull
AgregarPermiso(id dst) agrega internamente un permiso de exportacioacuten a una factura paraluego poder autorizarla recibe identificacioacuten y paiacutes destino de la mercaderia Ver ejemplo para eldetalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccuit_cbte_asoc) agrega internamente un comprobante asociado a una factura para luego poderautorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de losparaacutemetros Importante cuit_cbte_asoc se agrega en WSFEXv1 Nuevo
bull
Authorize(id) autoriza la emisioacuten de factura electroacutenica para bono fiscal electroacutenico recibe elid de secuencia (recuperado por WSFEUltNro) y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico(CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
GetCMP(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto ImptoLiq) Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
GetLastCMP(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de factura autorizadarecibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
GetLastID() recupera el mayor nuacutemero de secuencia (id) utilizado Ver WSFEUltNrobull GetParamMon() GetParamTipoCbte() GetParamTipoExpo()GetParamIdiomas() GetParamUMed() GetParamIncoterms()GetParamDstPais() GetParamDstCUIT() recupera valores referenciales de coacutedigos de lastablas de paraacutemetros devuelve una lista de strings con el idcoacutedigo o CUIT y descripcioacuten delparaacutemetro (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
GetParamCtz(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada como paraacutemetrobull GetParamMonConCotizacion(fecha) devuelve la cotizacioacuten consultada de la base de datosaduanera de todas las monedas que posean cotizacioacuten a la fecha indicada Nuevo
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retorna Autbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacuten retorna Autbull Vencimiento fecha devuelta junto con el CAEbull CbteNro nuacutemero de comprobante (del comprobante autorizado)bull
Meacutetodos 39
FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importe total del comprobante (del comprobante recuperado devuelto por GetCmp)bull Version versioacuten de la interfase (ej 111)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Errores
La interfase procesa los errores WSFEX y los informa con coacutedigos numeacutericos (ErrNumber vbObjectError =nordm de error de AFIP) y su correspondiente descripcioacuten (ErrDescription) Entre ellos los maacutes comunes son
500 Error interno DB - FEXGetLadt_CMP - get_last problemas internos de los servidores de AFIP(se debe esperar a que lo solucionen)
bull
Operation FEXGetLast_CMP not found in WSDL la URL que se estaacute utilizando no es correcta(verificar URL para el ambiente que se estaacute utilizando)
bull
505 Error general (lockeo) problemas internos de los servidores de AFIP (se debe esperar a que losolucionen)
bull
1000 Usuario no autorizado a realizar esta operacioacuten Revisar Token y Sign obtenido del WSAAbull 1001 CUIT no autorizado Revisar en el sitio de la AFIP si se asocioacute el CUIT del emisor al serviciode factura electroacutenica con el correspondiente certificado
bull
101210141016101710181019 Inconsistencia en los datos enviados Revisar formatos (fechasnuacutemeros etc usar fechas YYYYMMDD y nuacutemeros separados por puntos ambos pasarlos comostring para evitar errores) Revisar tipo de datos (tipo_cbte tipo_doc) que correspondan a las tablasusadas por la AFIP Revisar que los datos sean vaacutelidos para la operacioacuten a
bull
Ver especificaciones teacutecnicas del WSFEX para maacutes informacioacuten sobre el uso del servicio web su formatocondiciones y errores
Ejemplo
Autorizar una factura electroacutenica de exportacioacuten a modo de ejemplo (ficticia)
Dim WSAA As Object WSFEX As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEXtra = WSAACreateTRA(wsfex)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service para autenticar (Homologacioacuten)ta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms)
Atributos 40
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet WSFEX = CreateObject(WSFEXv1) Setear tocken y sing de autorizacioacuten (pasos previos)WSFEXToken = WSAATokenWSFEXSign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEXCuit = 20267565393
Conectar al Servicio Web de Facturacioacuten (homologacioacuten)ok = WSFEXConectar( httpswswhomoafipgovarwsfexv1serviceasmxWSDL)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEXDummyDebugPrint appserver status WSFEXAppServerStatusDebugPrint dbserver status WSFEXDbServerStatusDebugPrint authserver status WSFEXAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 19 FC Expo (ver tabla de paraacutemetros)punto_vta = 7 Obtengo el uacuteltimo nuacutemero de comprobante y le agrego 1cbte_nro = WSFEXGetLastCMP(tipo_cbte punto_vta) + 1 16fecha_cbte = Format(Date yyyymmdd)tipo_expo = 1 tipo de exportacioacuten (ver tabla de paraacutemetros)permiso_existente = Ndst_cmp = 203 paiacutes destinocliente = Joao Da Silvacuit_pais_cliente = 50000000016domicilio_cliente = Rua 76 km 345 Alagoasid_impositivo = PJ54482221-lmoneda_id = 012 para reales DOL o PES (ver tabla de paraacutemetros)moneda_ctz = 05obs_comerciales = Observaciones comercialesobs = Sin observacionesforma_pago = 30 diasincoterms = FOB (ver tabla de paraacutemetros)idioma_cbte = 1 (ver tabla de paraacutemetros)imp_total = 25000
Creo una factura (internamente no se llama al WebService)ok = WSFEXCrearFactura(tipo_cbte punto_vta cbte_nro fecha_cbte _ imp_total tipo_expo permiso_existente dst_cmp _ cliente cuit_pais_cliente domicilio_cliente _ id_impositivo moneda_id moneda_ctz _ obs_comerciales obs forma_pago incoterms _ idioma_cbte incoterms_ds fecha_pago )
Agrego un itemcodigo = PRO1ds = Producto Tipo 1 Exportacion MERCOSUR ISO 9001qty = 2precio = 12500umed = 1 Ver tabla de paraacutemetros (unidades de medida)imp_total = 25000 importe total final del artiacuteculo lo agrego a la factura (internamente no se llama al WebService)ok = WSFEXAgregarItem(codigo ds qty umed precio imp_total)
Ejemplo 41
Agrego un permiso (ver manual para el desarrollador)id = 99999AAXX999999Adst = 225 paiacutes destino de la mercaderiaok = WSFEXAgregarPermiso(id dst)
Agrego un comprobante asociado (ver manual para el desarrollador)tipo_cbte_asoc = 19punto_vta_asoc = 2cbte_nro_asoc = 1ok = WSFEXAgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc)
id = 99000000000100 nuacutemero propio de transaccioacuten obtengo el uacuteltimo ID y le adiciono 1 (advertencia evitar overflow y almacenar)id = CStr(CCur(WSFEXGetLastID()) + 1)
Llamo al WebService de Autorizacioacuten para obtener el CAEcae = WSFEXAuthorize(id)
Verifico que no haya rechazo o advertencia al generar el CAEIf cae = Or WSFEXResultado ltgt A Then MsgBox No se asignoacute CAE (Rechazado) Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyElseIf WSFEXobs ltgt And WSFEXobs ltgt 00 Then MsgBox Se asignoacute CAE pero con advertencias Observacioacuten (motivos) amp _ WSFEXobs vbInformation + vbOKOnlyEnd If
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato) si es posible almacenar para referencias futurasDebugPrint WSFEXXmlRequest DebugPrint WSFEXXmlResponse
MsgBox Resultado amp WSFEXResultado amp CAE amp cae amp _ Reproceso amp WSFEXReproceso amp _ Obs amp WSFEXobs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEXEventos
If evento ltgt 0 Then MsgBox Evento amp evento vbInformation
End IfNext
Recuperar la facturacae2 = WSFEXGetCMP(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEXFechaCbteDebugPrint Importe Total WSFEXImpTotal
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIPElse MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
Nota no es necesario (ni recomendado) recuperar el uacuteltimo ID yo uacuteltimo nuacutemero de comprobante Dichosdatos deberiacutean estar almacenados de manera permanente en la aplicacioacuten que use la interfaz(ver aclaracioacuten)
Ejemplo para obtener coacutedigos referenciales de paiacuteses destino habilitados
Ejemplo 42
recupero tabla de coacutedigo de pais destino (codigo descripcioacuten) Ej 203 BRASILFor Each x In WSFEXGetParamDstPais() DebugPrint xNext
Ejemplo para obtener la fecha y cotizacioacuten de una moneda
busco la cotizacioacuten del dolar (ver Parametro Mon) Ej 20100708 3937moneda_id = DOLctz = WSFEXGetParamCtz(moneda_id)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_cbte coacutedigo de comprobante (19 Facturas de Exportacioacuten 20 Nota de Deacutebito por Operacionescon el Exterior 21 Nota de Creacutedito por Operaciones con el Exterior
bull
punto_vta Nordm de punto de venta (debe estar autorizado para WSFEX)bull cbte_nro Nordm de comprobantebull fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull imp_total Importe total de la facturabull tipo_expo Tipo de exportacion (1 Exportacioacuten definitiva de Bienes 2 Servicios 4 Otros)bull permiso_existente Indica si se posee documento aduanero de exportacioacuten (permiso de embarque)Posibles Valores S N NULL (vaciacuteo)
bull
dst_cmp Paiacutes de destino del comprobante (200 ARGENTINA 203 BRASIL 212 ESTADOSUNIDOS etc)
bull
cliente Apellido y Nombre oacute Razoacuten Social del compradorbull cuit_pais_cliente CUIT del paiacutes destinoContribuyente (Ej 50000000059 BRASIL - PersonaFxedsica 51600000059 BRASIL - Otro tipo de Entidad etc)
bull
domicilio_cliente Domicilio comercial clientebull id_impositivo Clave de identificacioacuten tributaria del compradorbull moneda_id Moneda de la factura (DOL Doacutelar Estadounidense PES Pesos Argentinos 012Real etc)
bull
moneda_ctz Cotizacioacuten de la moneda de la facturabull obs_comerciales observaciones comerciales (texto arbitrario)bull obs observaciones (texto arbitrario)bull forma_pago texto arbitrario (ej 30 diacuteas)bull incoterms clausula de venta terminos de comercio exterior (DAF DDP CIF FCA FAS DESCPT EXW CIP DDU FOB DEQ CFR)
bull
incoterms_ds informacioacuten adicional de terminos comercialesbull idioma_cbte idioma del comprobante 1 Espantildeol 2 Ingleacutes 3 Portugueacutesbull fecha_pago Fecha de pago (yyyymmdd)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
codigo coacutedigo del productobull ds Descripcioacuten completabull precio Precio Unitariobull
Descripcioacuten de la obtencioacuten de CAE 43
qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull imp_total Importe totalbull bonif bonificacion sobre el producto (importe)bull
Consideraciones especiales (soacutelo WSFEXv1 Nuevo )
Para descuentos utilizar umed 99 y los importes en negativo sin cantidad ni preciobull Para sentildeas o adelantos utilizar umed 97 y los importes en negativo o positivo (seguacuten corresponda)sin cantidad ni precio
bull
Para gratificaciones utilizar umed 0 sin importes cantidad ni preciobull Para bonificaciones por item el caacutelculo es precio qty - bonifbull
Adicionalmente se puede llamar al meacutetodo AgregarPermiso para detallar los permisos de embarque ydestinaciones de la mercaderiacutea con los siguientes paraacutemetros
id Coacutedigo de despacho Permiso de Embarque formato 99999AAXX999999A (donde XX podraacutenser nuacutemeros o letras)
bull
dst Paiacutes de destino de la mercaderiacuteabull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los permisos de embarque y destinacionesde la mercaderiacutea con los siguientes paraacutemetros
cbte_tipo Coacutedigo de tipo de comprobante (remitos solo WSFEXv1 Nuevo )bull cbte_punto_venta Punto de ventabull cbte_numero Numero de comprobantebull cbte_cuit CUIT emisor del comprobante (solo WSFEXv1 Nuevo )bull
Como uacuteltimo paso se debe llamar al meacutetodo Authorize con los siguiente paraacutemetros
id Nuacutemero de identificacioacuten secuencial (debe almacenarse en el sistema local) No es obligatoriollamar a WSFEXGetLastID puede utilizarse un dato local secuencial
bull
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEXResultado =A (Aceptado) y WSFEXVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSFXEResultado = R (Rechazado) y WSFEXObs conlos diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 01) que funcionan comoadvertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Revisar las consideraciones de reproceso al igual que con WSFE
IMPORTANTE Revisar las especificaciones teacutecnicas de la AFIP en el Manual para el desarrolladorpdf porlo relativo a tablas de paraacutemetros meacutetodos adicionales y operatoria en general (incluyendo obligatoriedadformatos de los campos y validaciones)
Descripcioacuten de la obtencioacuten de CAE 44
Servicio Web de Factura Electroacutenica Mercado InternoVersioacuten 1 (WSFEv1)
EL WSFEv1 es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten B (sin detalle de factura) de la Resolucioacuten General 29042010 -RG248508 obligatorio a partir de 1-7-2011
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYYMMDD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los impuestos(IVA) y tributos
A su vez el WSFEv1 devuelve mensajes de eventos (mantenimiento programado advertencias etc) los quedeben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva Estas tablas pueden sufrir modificaciones realizadas por la AFIP conaltas y bajas loacutegicas por lo que tienen una fecha de vigencia (desde hasta) y se proveen meacutetodos paraconsultarlas por el mismo servicio web (a diferencia del WSFE que las tablas eran documentadasestaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiProyectoWSFEv1
La programacioacuten de la interfase WSFEv1 es similar a WSFE se recomienda revisarlo
Objeto
El objeto COM se crea invocando a CreateObject(WSFEv1)bull
Meacutetodos
Meacutetodos baacutesicos de WSFEv1
Conectar(cache wsdl proxy wrapper cacert) realiza la conexioacuten a losservidores de la AFIP (primer paso esencial) Si no se especifica url del wsdl se utiliza servidores dehomologacioacuten El paraacutemetro cache es un directorio donde se almacenan internamente la descripcioacutendel servicio (archivo WSDL) para mayor optimizacioacuten Parametros adicionales optativos wrapper esla libreriacutea HTTP a utilizar y cacert la ruta al certificado de la autoridad de certificante del servidor(CA)
bull
Servicio Web de Factura Electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 45
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto imp_ivaimp_trib imp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz caea fecha_hs_gen) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetros
bull
AgregarIva(iva_id base_imp importe) agrega internamente un subtotal de IVA auna factura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible eimporte Ver ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(tributo_id Desc base_imp alic importe) agregainternamente un subtotal de tributo a una factura para luego poder autorizarla recibe los datos delimpuesto nacional provincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo parael detalle de los paraacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoc cuitfecha) agrega internamente un comprobante asociado a una factura para luego poder autorizarlarecibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detalle de los paraacutemetrosEl campo cuit fueacute agregado seguacuten FEv29 13-03-2017 disponible desde actualizacioacuten 119a yrefiere al CUIT emisor del comprobante asociado El campo fecha fueacute agregado seguacuten FEv21320-02-2019 disponible desde actualizacioacuten 122a y refiere a la fecha del comprobante asociado
bull
AgregarOpcional(opcional_id valor) agrega internamente un dato opcional a unafactura para luego poder autorizarla recibe el id del tipo de dato opcional y valor (dependiendo de sise trata de proyectos promovidos bienes usados RG 3411 DDJJ F8001 presuncioacuten de novinculacioacuten con la actividad gravada RG366814) Ver tabla de paraacutemetros Disponible desdeactualizacioacuten 115a
bull
AgregarComprador(doc_tipo=80 doc_nro=0 porcentaje=10000) agregainternamente un dato de comprador a una factura para luego poder autorizarla recibe el tipo dedocumento (80 CUIT) nuacutemero de documento y porcentaje (Bienes Usados Registrables RG 4109 E)Ver COMPG 210 Disponible desde actualizacioacuten 120a
bull
EstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura (ver paraacutemetros del meacutetodo CrearFactura) devuelve True siel campo pertenece al encabezado y se ha actualizado correctamente (ver ejemplo) Disponible desdeactualizacioacuten 116a
bull
ObtenerCampoFactura(campo [[campo2 [campo3]]) devuelve individualmente elvalor de un campo del encabezado u otras sub-estructuras de la factura (ver ejemplo) Uacutetil luego dellamara a CompConsultar Disponible desde actualizacioacuten 117a
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125b 200620
bull
Meacutetodos principales de WSFEv1
CAESolicitar() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo de AutorizacioacutenElectroacutenico (CAE) Ver ejemplo para el detalle de los paraacutemetros
bull
CompConsultar(tipo_cbte punto_vta cbte_nro) recupera los datos de una facturaautorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobante original y devuelveel Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vez establece los datosde la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle de los paraacutemetros yvalores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos baacutesicos de WSFEv1 46
CAEASolicitar(periodo orden) solicita un CAE Anticipado para la quincenacorrespondiente Devuelve cadena vacia si no se ha solicitado A partir de COMPGv26 estableceel campo Observaciones
bull
CAEAConsultar(periodo orden) recupera un CAE Anticipado emitido con anterioridadDevuelve cadena vacia si no se ha solicitado
bull
CAEARegInformativo informa un comprobante emitido con CAE Anticipado Se debe crear elcomprobante previamente con CrearFactura consignando el CAEA Actualiza los atributos(Resultado Obs etc) de manera similar a CAESolicitar Ver ejemplo para el detalle de losparaacutemetros y valores devueltos
bull
Meacutetodos alternativos para solicitud de muacuteltiples CAE
IniciarFacturasX() inicializa lista interna de facturas (comprobantes) para Solicitar muacuteltiplesCAE (llamar una uacutenica vez antes de CrearFacturaAgregarFacturaX)
bull
AgregarFacturaX() agrega el uacuteltimo comprobante cargado internamente con CrearFacturaa la lista para Solicitar muacuteltiples CAE
bull
CAESolicitarX() autoriza la emisioacuten de muacuteltiples facturas electroacutenicas (varios CAE porsolicitud) devuelve la cantidad de registros enviadosrecibidos a AFIP
bull
LeerFacturaX(indice) activa internamente una factura (dada su posicioacuten en la lista) pararevisar los datoss devuelto por AFIP usando ObtenerCampoFactura luego de haber llamado aCAESolicitarX
bull
Meacutetodos Auxiliares del webservice
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull ParamGetTiposMonedas() ParamGetTiposCbte() ParamGetTiposDoc()ParamGetTiposIva() ParamGetTiposOpcional() ParamGetTiposTributos()ParamGetTiposPaises() recupera valores referenciales de coacutedigos de las tablas de paraacutemetrosdevuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -si corresponde-(ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros ParamGetTiposPaises agregadopara COMPGv26
bull
ParamGetCotizacion(moneda_id) devuelve cotizacioacuten y fecha de la moneda indicada comoparaacutemetro
bull
ParamGetPtosVenta() devuelve los puntos de venta autorizados para factura electroacutenicabull
Meacutetodos Utilitarios provistos por este componente
AnalizarXml(xml) Nuevo analizar el mensaje xml para poder extraer atributos puntuales (xmlpuede ser XmlRequest XmlResponse o cualquier texto xml vaacutelido)
bull
ObtenerTagXml(tag1 tag2 ) Nuevo busca en el mensaje xml analizado la etiquetatag1 luego tag2 y asiacute sucesivamente devolviendo el contenido (texto) del dato si fue encontrada onulo en caso contrario
bull
Atributos
El componente tiene las siguientes propiedades que pueden ser consultadas o modificadas
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull
Meacutetodos principales de WSFEv1 47
AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones Nuevo establece si se deben emitir errores al lenguaje de programacioacuten(habilitado por defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luegode cada meacutetodo)
bull
Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull CAEA coacutedigo de autorizacioacuten anticipado (si corresponde)bull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTribimportes del comprobante
bull
ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull Reprocesar habilita reproceso automaacutetico (habilitado por defecto ver abajo)bull EmisitonTipo tipo de coacutedigo de autorizacioacuten (CAE o CAEA)bull
Errores
La interfase procesa los errores WSFEv1 y los almacena en las propiedades Errores y ErrCodeErrMsg (porej motivo de rechazo al intentar solicitar CAE) AFIP tambieacuten puede enviar errrores o advertencias por lacomo Observaciones propiedad Obs Se recomienda revisarlos luego de llamar a los Webservices
Ver ejemplos y especificaciones teacutecnicas del WSFEv1 para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ver Manejo de Excepciones para conocer las tecnicas para controlar las distintas excepciones que puedenocurrir (ver atributos Excepcion y Traceback en general por problemas de conectividad) y como proceder yalmacenar los mensajes XML para depuracioacuten y futuras consultas (atributos XmlRequest y XmlResponse)
Validaciones WSFEv1
AFIP realiza varias validaciones a los datos enviados muchas agregadas recientemente por lo que para evitarinconvenientes se recomienda revisar las siguientes validaciones y consideraciones generales
10063 Factura individual DocTipo 80 DocNro XXXXXXXXX no se encuentra inscripto encondicion ACTIVA en el impuesto Las facturas A solo pueden ser emitidas a ResponsablesInscriptos consignando el CUIT vaacutelido y registrado (tipo_doc=80)
bull
10014 Para facturas B (CbteDesde distinto a CbteHasta) el resultado de la operacioacuten ImpTotal (CbteHasta - CbteDesde + 1 ) debe ser menor a $1000 y 10015 Para facturas B (CbteDesde distintoa CbteHasta) menor a $1000 el campo DocNro deberaacute ser cero (0) y el campo DocTipo 99 Los lotesde facturas B menores a $1000- pueden ser emitidos a soacutelo a Consumidor Final (tipo_doc=99 ynro_doc=0) indicando el importe total del reango de facturas
bull
10043 El campo ImpTotConc (Importe Total del Concepto) para comprobantes tipo C debe ser iguala cero (0) y 10047 El campo ImpIVA (Importe de IVA) para comprobantes tipo C debe ser igual a
bull
Atributos 48
cero (0) 10071 Para comprobantes tipo C el objeto IVA no debe informarse Para emitir FacturasC no se informa iva ni imp_tot_conc ver caso especial Monotributo10048 El campo Importe Total ImpTotal debe ser igual a la suma de ImpTotConc + ImpNeto +ImpOpEx + ImpTrib + ImpIVA La sumatoria de los campos imp_neto impto_iva imp_op_eximp_tot_conc imp_trib contra imp_total no debe diferir en maacutes de 1 centavo (o 001)
bull
10051 Los importes informados en AlicIVA no se corresponden con los porcentajes La baseimponible por la aliacutecuota de IVA no debe diferir en maacutes de 1 centavo con el impuesto liquidado deIVA (para cada tasa ver AgregarIVA)
bull
10020 El campo BaseImp en AlicIVA es obligatorio y debe ser mayor a 0 cero Si el imp_neto es 0no se debe enviar subtotal de IVA ni para la tasa 0 (no usar AgregarIVA)
bull
10018Si ImpIva es igual a 0 el objeto Iva y AlicIva son obligatorios Id iva = 3 (iva 0) Si elimp_neto es ltgt0 y el iva liquidado es 0 se debe enviar coacutedigo de alicuota 3 (0) -por ej casoespecial de hacer factura de 1 centavo- Si no corresponde IVA (exento o no gravado) se debe enviarimp_iva NULO (vbNull null o similar) y no enviar aliacutecuotas
bull
Consideraciones especiales
Para emitir Facturas B a Responsables No Inscriptos debe informarse en Tributos el importecorrespondiente (ver AgregarTributo)
bull
Para factura E no corresponde este webservice por maacutes que sea a Tierra del Fuego Ver WSFEXbull imp_tot_conc debe utilizarse para los importes no gravados (por ej cheques rechazados)bull IVA 0 es distinto a No Gravado (seriacutea imp_tot_conc) o Exento (imp_op_ex) En esos casos no vaalicuota de iva e imp_iva = NULL y imp_neto = 0 (ver validaciones arriba)
bull
Si se usa IVA 0 en el subtotal de la aliacutecuota iva_id=3 se debe pasar base_imp = 100 e importe = 0Ademaacutes imp_neto = 100 (gravado aunque no liquide IVA)
bull
Recordamos que si la AFIP detecta una validacioacuten no obligatoria (por ej no corresponde emitir factura A)devolvera un mensaje (en el atributo WSFEv1Obs) y el IVA liquidado no puede computarse como creacuteditofiscal (la factura debe incorporar dichos mensajes)
Dependiendo del caso los mensajes de validacioacuten pueden ser enviados por AFIP tanto en WSFEv1Obs o enWSFEv1ErrMsg se deben revisar ambos campos
Nota estas consideraciones pueden variar en cada caso dependiendo de cada situacioacuten particular frente aAFIP Recomendamos consultar con el contador los aspectos legales y la normativa vigente
Ejemplo
Ejemplo Solicitud CAE WSFEv1
Autorizar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSFEv1 As Object
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1tra = WSAACreateTRA(wsfe)
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() +
Validaciones WSFEv1 49
Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)
Llamar al web service WSAA para autenticarcache = directorio temporal (usar predeterminado)url_wsdl = httpswsaahomoafipgovarwsservicesLoginCms usar wsaaafipgovar en produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSAAConectar(cache url_wsdl proxy wrapper)ta = WSAALoginCMS(cms)
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSFEv1 = CreateObject(WSFEv1)DebugPrint WSFEv1version
Setear tocken y sing de autorizacioacuten (pasos previos)WSFEv1Token = WSAATokenWSFEv1Sign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSFEv1Cuit = 20267565393
Conectar al Servicio Web de Facturacioacutencache = directorio temporal (usar predeterminado)url_wsdl = httpswswhomoafipgovarwsfev1serviceasmxWSDL usar servicios1 para produccioacutenproxy = informacioacuten de servidor intermedio (si corresponde)ok = WSFEv1Conectar(cache url_wsdl proxy) homologacioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSFEv1DummyDebugPrint appserver status WSFEv1AppServerStatusDebugPrint dbserver status WSFEv1DbServerStatusDebugPrint authserver status WSFEv1AuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4001cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta) + 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 20267565393cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Ejemplo Solicitud CAE WSFEv1 50
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
datos de compradores RG 4109-E bienes muebles registrables ()If False Then solo productos y si hay maacutes de un comprador ok = WSFEv1AgregarComprador(80 30500010912 9999) ok = WSFEv1AgregarComprador(80 30999032083 001)End If
Solicito CAEcae = WSFEv1CAESolicitar()
DebugPrint Resultado WSFEv1ResultadoDebugPrint CAE WSFEv1cae
DebugPrint Numero de comprobante WSFEv1CbteNro
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSFEv1XmlRequestDebugPrint WSFEv1XmlResponse
MsgBox Resultado amp WSFEv1Resultado amp CAE amp cae amp Venc amp WSFEv1Vencimiento amp Obs amp WSFEv1obs vbInformation + vbOKOnly
Muestro los eventos (mantenimiento programados y otros mensajes de la AFIP)For Each evento In WSFEv1eventos MsgBox evento vbInformation EventoNext
Ejemplo Consultar CAE WSFEv1
Recuperar una factura electroacutenica de mercado interno (versioacuten 1) a modo de ejemplo (ficticia continua elejemplo anterior) CAE normal
Buscar la facturacae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)
DebugPrint Fecha Comprobante WSFEv1FechaCbteDebugPrint Fecha Vencimiento CAE WSFEv1VencimientoDebugPrint Importe Total WSFEv1ImpTotal
comparar con los datos del ejemplo anterior
Ejemplo Consultar CAE WSFEv1 51
If cae ltgt cae2 Then MsgBox El CAE de la factura no concuerdan con el recuperado en la AFIP amp cae amp vs amp cae2Else MsgBox El CAE de la factura concuerdan con el recuperado de la AFIPEnd If
obtener datos del encabezado (a partir de actualizacioacuten 117a)cae = wsfev1ObtenerCampoFactura(cae)tipo_doc = wsfev1ObtenerCampoFactura(tipo_doc)nro_doc = wsfev1ObtenerCampoFactura(nro_doc)imp_total = wsfev1ObtenerCampoFactura(imp_total) obtener primer alicuota de IVAimp_iva1 = wsfev1ObtenerCampoFactura(iva 0 importe) obtener primer tributoimp_trib1 = wsfev1ObtenerCampoFactura(tributos 0 importe) obtener primer opcionalvalor_opcional1 = wsfev1ObtenerCampoFactura(opcionales 0 valor) obtener primer coacutedigo de observacion de AFIPobs_code1 = wsfev1ObtenerCampoFactura(obs 0 code) pruebo obtener el segundo mensaje de observacion inexistenteobs_code2 = wsfev1ObtenerCampoFactura(obs 1 msg)debugPrint wsfev1Excepcion El campo 1 solicitado no existe
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1
Ejemplo para obtener las tablas de parametros en este caso puntos de venta habilitados (uacutetil en produccioacutenpara verificar el acceso al webservice)
recupero tabla de paraacutemetros de punto de venta habilitado (3|EmisionTipoCAE|BloqueadoN|FchBajaNULL)For Each x In WSFEv1ParamGetPtosVenta() DebugPrint xNext
Ejemplo Solicitud CAEA y registro informativo WSFEv1
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE Anticipado
PASO 1 Solicito CAE Anticipado para el periacuteodo NOTA solicitar por uacutenica vez para un determinado periacuteodo consultar si se ha solicitado previamente
periodo = 201102 Antildeo y mesorden = 2 Segunda Quincena
consulto CAEA ya solicitadoCAEA = WSFEv1CAEAConsultar(periodo orden)If CAEA = Then
solicito nuevo CAEA CAEA = WSFEv1CAEASolicitar(periodo orden)End If
MsgBox Periodo amp periodo amp Orden amp orden amp vbCrLf amp CAEA amp CAEA amp vbCrLf amp _Obs amp WSFEv1Obs amp vbCrLf amp _Errores amp WSFEv1ErrMsg
Si no tengo CAEA terminoIf CAEA = Then End
PASO 2 Establezco los valores de la factura a informar
Ejemplo Consulta Puntos de Venta Autorizados WSFEv1 52
tipo_cbte = 6punto_vta = 4005cbte_nro = WSFEv1CompUltimoAutorizado(tipo_cbte punto_vta)If cbte_nro = Then cbte_nro = 0 no hay comprobantes emitidosElse cbte_nro = CLng(cbte_nro) convertir a entero largoEnd Iffecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000imp_iva = 2100 imp_trib = 100 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
creo una factura (con CAEA)ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz CAEA fecha_hs_gen)
Agrego los comprobantes asociadosIf False Then solo ncnd tipo = 19 pto_vta = 2 nro = 1234 ok = WSFEv1AgregarCmpAsoc(tipo pto_vta nro cuit fecha)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSFEv1AgregarTributo(id Desc base_imp alic importe)
Agrego tasas de IVAid = 5 21base_imp = 10000importe = 2100ok = WSFEv1AgregarIva(id base_imp importe)
Informo comprobante emitido con CAE anticipadocae = WSFEv1CAEARegInformativo()
DebugPrint Resultado WSFEv1Resultado
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura o completar el registro de encabezado (ver archivo deintercambio) con los siguiente paraacutemetros
Ejemplo Solicitud CAEA y registro informativo WSFEv1 53
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc seguacuten tabla de paraacutemetros de AFIP) y nuacutemero deDocumento del cliente (receptor de la factura) Usar tipo_doc=99 y nro_doc=0 para consumidoresfinales (Factura B lt $1000)
bull
tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSFE)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta generalmente el mismo nuacutemero si es unafactura individual o un rango si son Factura B lt $ 1000 a Consumidor Final -en este uacuteltimo caso seobtiene un uacutenico CAE para el lote-)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la factura (debe ser igual a la suma de imp_tot_conc + imp_op_ex +imp_neto + imp_iva + imp_trib)
bull
imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la factura (igual a la suma de base_imp para todas lasalicuotas)
bull
imp_iva Importe del IVA liquidado (igual a la suma de importe_iva para todas las aliacutecutoas) Enviarnull o similar si no corresponde y no se enviacutean subtotales por aliacutecuota
bull
imp_trib Importe de otros tributos (incluyendo percepciones de IVA retenciones IVA no inscriptoetc)
bull
imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros actualmente solo PES)bull moneda_ctz Cotizacioacuten de la moneda de la factura (actualmente solo 100)bull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull caea codigo de autorizacioacuten anticipado (si corresponde)bull
Luego por cada alicuota de IVA (excepto para no gravado y exento) se debe llamar al meacutetodo AgregarIva ocompletar el registro respectivo con los siguientes paraacutemetros
iva_id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros AFIP)bull base_imp base imponible (importe)bull importe_iva importe liquidado (base_imp por alicuota)bull
De existir otros tributos (percepcionesretenciones o similares) se debe llamar al meacutetodo AgregarTributo ocompletar el registro respectivo con los siguientes paraacutemetros
tributo_id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros AFIP)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc o completar el registro respectivo para detallar loscomprobantes asociados a una nota de creacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobante (seguacuten tabla de paraacutemetros AFIP)bull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo CAESolicitar o CAEARegInformativo dependiendo de lamodalidad (o ejecutar el programa RECE1 si se esta utilizando la herramienta por linea de comando)
Descripcioacuten de la obtencioacuten de CAE CAEA 54
Si no hubiere inconvenientes la llamada debe devolver el CAE y se establece el atributo WSFEv1Resultado= A (Aceptado) y WSFEv1Vencimiento del CAE (fch_venc_cae) Sino devuelve cae = La interfase nopudo procesar la respuesta del WebService o bien la conexioacuten a internet esta caiacuteda las direcciones de losservidores son incorrectas o el servicio web rechazo los datos de la factura a generar Se establece el atributoWSFEv1Resultado = R (Rechazado) y WSFEv1Obs (o WSFEv1ErrMsg) con los diversos motivos derechazo proporcionados por el webservice (ver WSFEMotivo)
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Como requisito previo para la modalidad CAE Anticipado se debe llamar a CAEASolicitar oCAEAConsultar con los datos del periodo y orden (antes de comenzar la quincena) para obtener el uacutenicoCAEA para los comprobantes del periacuteodo
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (CompConsultar) o usar la rutina deReproceso Automaacutetico incluida en este componente
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSFEV1 en el sitio de la AFIP
Minisitio Factura Electroacutenica AFIP informacioacuten generalbull Manual para el desarrolladorpdf Informacioacuten importante sobre la operatoriabull
Reproceso Automaacutetico
Importante En el caso de que la conexioacuten se interrumpa al llamar a CAESolicitar luego de que la AFIPregistre la factura y antes de que la informacioacuten del CAE llegue al equipo se debe llamada aCompConsultar con los paraacutemetros de la factura (tipo_cbte punto_vta cbte_nro) para recuperar el CAEgenerado anteriormente (ver ejemplo pseudocoacutedigo y por RECE1 get)
Este procedimiento puede ser realizado automaacuteticamente por la interfaz (de manera similar a como realizabaAFIP originalmente en WSFEv0) habilitando el atributo Reprocesar = True (valor predeterminado) conlo que la interfaz automaticamente
Solicita un nuevo CAE en caso de que no exista en los registros de la AFIPbull Consulta y obtiene el CAE anterior en caso de que ya exista en los registros de AFIPbull
En ese caso si se da un reprocesamiento automaacutetico como se mencionoacute en el primer parrafoWSFEReproceso se establece a S para indicar que el CAE se ha recuperado
Si bien no se utiliza un ID por lo que se minimizan los errores al reprocesar los comprobantes igualmente serecomienda revisar el atributo de Reproceso ya que un incorrecto uso puede generar inconvenientes alregistrar los comprobantes en AFIP Para ello la interfaz cuenta con los atributos CbteNro FechaCbteImpTotal ImpNeto ImptoLiq ImpOpEx ImpIVA ImpOpEx ImpTrib o XmlRequest yXmlResponse que deben ser contrastados contra la informacioacuten enviada en el caso de interrupciones oinconvenientes en la comunicacioacuten (a partir de la versioacuten 107d si Reproceso = S la interfaz verificoacuteautomaacuteticamente todos los datos enviados con los registrados en la AFIP y estos concuerdan)
Se recomienda almacenar los datos en un medio durable para poder enviar la misma factura que fuera
Reproceso Automaacutetico 55
interrumpida salvo que se tenga certeza de que la misma no ha sido procesada por AFIP Especialmente sedeberiacutea guardar el nuacutemero de factura antes de solicitar CAE y no utilizar ult o el meacutetodoCompUltimoAutorizado para consultar el uacuteltimo nuacutemero de comprobante emitido ya que ante cualquierinterrupcioacuten se no se podriacutea recuperar los datos registrados en AFIP (o se podriacutean generar duplicados)
En siacutentesis al re-enviar los datos de un comprobante que por alguacuten motivo no ha devuelto CAE (cuando lacomunicacioacuten se ha interrumpido y no ha sido aceptado o rechazado formalmente con Resultado=A o R)se recomienda revisar el reproceso y los datos registrados (devueltos por la interfaz) o en su defectodeshabilitar Reprocesar con False e implementar un procedimiento propio de recuperacioacuten ante fallas
Si el reproceso estaacute habilitado no es necesario modificar la aplicacioacuten en caso de fallas simplementereintentar la solicitud de CAE o informacioacuten de CAEA y la interfaz realizaraacute los meacutetodos pertinentes seguacutense describioacute anteriormente
En caso de que no haya sido necesario reprocesar el requerimiento el atributo Reproceso quedaraacute vacioEn caso de que haya sido necesario reprocesar pero no ha sido exitoso (ocurrioacute un error o validacioacuten que nopermitioacute recuperar el CAE o los datos enviados no concuerdan con los registrados en AFIP) Reprocesoseraacute N y se informaraacute el error original
Lo expuesto anteriormente aplica tambieacuten a CAEA -anticipado- al informar los comprobantes emitidos(CAEARegInformativo)
En ambas ocasiones se puede consultar el atributo EmisionTipo que contiene CAE o CAEA dependiendodel caso
Nota El Reproceso automaacutetico estaacute incluido internamente en CAESolicitar y CAEARegInformativopor lo que estaacute disponible tanto en la biblioteca Python Interfaz COM la herramienta por liacutenea de comandoRECE1EXE y al aplicativo PyRece
Advertencia El Reproceso automaacutetico es una caracteriacutestica adicional propia de la interface por lo tantopuede sufrir variaciones o mejoras se recuerda que la informacioacuten expuesta en esta documentacioacuten aplica a lauacuteltima versioacuten de los instaladores
Factura C Monotributo Exento
Seguacuten RG 30672011 se adiciona la posibilidad de autorizar comprobantes clase C (monotributistas) aWSFEv1 (RG2485)
Seguacuten RG 37492015 se incluye a los sujetos exentos en el impuesto al valor agregado Para poder emitircomprobantes clase C ademaacutes de seguir las pautas sentildealadas en esta seccioacuten el punto de venta debe estardado de alta como Factura Electroacutenica - Exento en IVA - Web Services
Los siguientes coacutedigos de comprobantes (tipo_cbte) pueden ser utilizados en este caso
11 Factura Cbull 12 Nota de Deacutebito Cbull 13 Nota de Creacutedito Cbull 15 Recibo Cbull
Los requisitos fundamentales para poder validar un comprobante informado son las los siguientes
Factura C Monotributo Exento 56
Ingresar siempre imp_tot_conc = 01 Ingresar siempre imp_op_ex = 02 Ingresar siempre imp_iva = 03 Informar en imp_neto el importe subtotal de la factura4 No informar subtotales de IVA (AgregarIVA)5
Coacutedigo de Ejemplo
Establezco los valores de la factura a autorizartipo_cbte = 11punto_vta = 4002cbte_nro = 1fecha = Format(Date yyyymmdd)concepto = 1tipo_doc = 80 nro_doc = 33693450239cbte_nro = cbte_nro + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 10000 imp_tot_conc = 000 imp_neto = 10000imp_iva = 000 imp_trib = 000 imp_op_ex = 000fecha_cbte = fecha fecha_venc_pago = Fechas del periacuteodo del servicio facturado (solo si concepto = 2 o 3)fecha_serv_desde = fecha_serv_hasta = moneda_id = PES moneda_ctz = 1000
ok = WSFEv1CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz)
Solicito CAECAE = WSFEv1CAESolicitar()
Documentacioacuten Oficial Facturacioacuten Electroacutenica RG 2485 Proyecto FE v25 - Manual para el desarrollador(Revisioacuten correspondiente al 01 de Abril de 2015)
Datos Opcionales AFIP WSFEv1
El componente permite enviar los datos opcionales requeridos por las diversas resoluciones de AFIP seguacuten latabla de paraacutemetros Disponible desde actualizacioacuten 115b
Datos opcionales para proyectos promovidos
WSFEv1AgregarOpcional(2 1234) identificador del proyecto
Datos opcionales para RG Bienes Usados 3411 (del vendedor)
WSFEv1AgregarOpcional(91 Juan Perez) Nombre y Apellido WSFEv1AgregarOpcional(92 200) Nacionalidad (coacutedigo de paiacutes)WSFEv1AgregarOpcional(93 Balcarce 50) Domicilio
Datos opcionales para RG 3668 Impuesto al Valor Agregado - Art12 (presuncioacuten de no vinculacioacuten con laactividad gravada FORM 8001)
WSFEv1AgregarOpcional(5 02) IVA Excepciones (01 LocadorPrestador 02 Conferencias 03 RG 74 04 Bienes de cambio 05 Ropa de trabajo 06 Intermediario)
Datos Opcionales AFIP WSFEv1 57
WSFEv1AgregarOpcional(61 80) Firmante Doc Tipo (80 CUIT 96 DNI etc)WSFEv1AgregarOpcional(62 20267565393) Firmante Doc NroWSFEv1AgregarOpcional(7 01) Caraacutecter del Firmante (01 Titular 02 DirectorPresidente 03 Apoderado 04 Empleado)
Datos opcionales para RG 3749 (RG 3368 Establecimientos de educacioacuten puacuteblica de gestioacuten privada)
WSFEv1AgregarOpcional(10 1) Actividad ComprendidaWSFEv1AgregarOpcional(1011 80) Tipo de Documento (titular del pago)WSFEv1AgregarOpcional(1012 20267565393) Nuacutemero de Documento (titular del pago)
Datos opcionales para RG4520
WSFEv1AgregarOpcional(5 01) Actividad
Datos opcionales para FEv213 (RG 4367 Factura de Creacutedito Electroacutenica MiPyMEs (FCE))
WSFEv1AgregarOpcional(2101 2850590940090418135201) CBUWSFEv1AgregarOpcional(2102 pyafipws) aliasWSFEv1AgregarOpcional(27 SCA) tipo de transmisioacuten (desde el 01042021) if tipo_cbte in (203 208 213) WSFEv1AgregarOpcional(22 S) Anulacioacuten
Obtencioacuten de Atributos Avanzados WSFEv1
En versiones recientes (112a o superior) si no hubo excepcioacuten es posible revisar y obtener datos avanzadosde la respuesta (uacutetiles para depuracioacuten y solucioacuten de errores) con los meacutetodos AnalizarXml yObtenerTagXml
Ejemplo para recuperar datos puntuales de un comprobante emitido (moneda cotizacioacuten CUIT etc)
cae2 = WSFEv1CompConsultar(tipo_cbte punto_vta cbte_nro)ok = WSFEv1AnalizarXml(XmlResponse)If ok Then
datos del encabezado DebugPrint CAE WSFEv1ObtenerTagXml(CodAutorizacion) WSFEv1CAE DebugPrint CbteFch WSFEv1ObtenerTagXml(CbteFch) WSFEv1FechaCbte DebugPrint Moneda WSFEv1ObtenerTagXml(MonId) DebugPrint Cotizacion WSFEv1ObtenerTagXml(MonCotiz) DebugPrint DocTipo WSFEv1ObtenerTagXml(DocTipo) DebugPrint DocNro WSFEv1ObtenerTagXml(DocNro)
ejemplos con arreglos (primer elemento = 0 segundo = 1 etc) DebugPrint Primer IVA (alci id) WSFEv1ObtenerTagXml(Iva AlicIva 0 Id) DebugPrint Primer IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 0 Importe) DebugPrint Segundo IVA (alic id) WSFEv1ObtenerTagXml(Iva AlicIva 1 Id) DebugPrint Segundo IVA (importe) WSFEv1ObtenerTagXml(Iva AlicIva 1 Importe) DebugPrint Primer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 0 Desc) DebugPrint Primer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 0 Importe) DebugPrint Segundo Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 1 Desc) DebugPrint Segundo Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 1 Importe) DebugPrint Tercer Tributo (ds) WSFEv1ObtenerTagXml(Tributos Tributo 2 Desc) DebugPrint Tercer Tributo (importe) WSFEv1ObtenerTagXml(Tributos Tributo 2 Importe)End If
Obtencioacuten de Atributos Avanzados WSFEv1 58
Servicio Web de Factura Electroacutenica Mercado InternoPrograma Matrix (WSMTXCA)
EL WSMTXCA es un Servicio Web de la AFIP para Facturas Electroacutenicas de Mercado Internocorrespondiente al Artiacuteculo 4 Opcioacuten A (con detalle de factura) de la Resolucioacuten General 29042010
Para poder acceder se debe obtener un Ticket de Acceso (TA) previamente (para utlizar el Token y Sign yenviarlos a los meacutetodos de facturacioacuten electroacutenica)
Esta interfase recibe los valores y crea los mensaje en XML lo enviacutea y analiza la respuesta XML por lo queno es necesario modificar XML Se recomienda pasar los valores en formato string nuacutemeros separados porpunto y fechas YYYY-MM-DD
La operatoria es bastante similar al meacutetodo de autorizacioacuten del WSFE (pero SIN un ID secuencial nireproceso) teniendo en cuenta esta mayor complejidad por tener que informar el detalle de los artiacuteculos losimpuestos (IVA) y tributos (similar a WSFEX y WSBFE)
A su vez el WSMTXCA devuelve mensajes de eventos (mantenimiento programado advertencias etc) losque deben ser capturados e informados al usuario
A diferencia del WSFE este nuevo servicio funciona con tablas dinaacutemicas de paraacutemetros para los coacutedigos decomprobante moneda aliacutecuotas de iva tributos unidades de medida Estas tablas pueden sufrirmodificaciones realizadas por la AFIP con altas y bajas loacutegicas por lo que tienen una fecha de vigencia(desde hasta) y se proveen meacutetodos para consultarlas por el mismo servicio web (a diferencia del WSFE quelas tablas eran documentadas estaacuteticamente en el sitio web)
Para maacutes informacioacuten ver
httpwwwsistemasagilescomartracwikiFacturaElectronicaMTXCAService
La programacioacuten de la interfase WSMTXCA es similar a WSFE WSFEX WSBFE y WSFEv1 serecomienda revisarlos
Objeto
El objeto COM se crea invocando a CreateObject(WSMTXCA)bull
Meacutetodos
Meacutetodos principales
Conectar(cache wsdl proxy) realiza la conexioacuten a los servidores de la AFIP (primerpaso esencial) Si no se especifica url del wsdl se utiliza servidores de homologacioacuten El paraacutemetrocache es un directorio donde se almacenan internamente la descripcioacuten del servicio (archivo WSDL)para mayor optimizacioacuten Proxy es un string con la informacioacuten del servidor intermediousuarioclaveservidorpuerto
bull
Dummy() servicio de prueba para obtener el estado de los servidores de la AFIPbull CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbt_desde cbt_hasta imp_total imp_tot_conc imp_neto
bull
Servicio Web de Factura Electroacutenica Mercado Interno Programa Matrix (WSMTXCA) 59
imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pagofecha_serv_desde fecha_serv_hasta moneda_id moneda_ctz obs) creainternamente una factura para luego poder autorizarla recibe los datos de la factura a emitir Verejemplo para el detalle de los paraacutemetrosEstablecerCampoFactura(campo valor) establece individualmente el valor de uncampo del encabezado de la factura devuelve True si el campo pertenece al encabezado y se haactualizado correctamente (ver ejemplo)
bull
AgregarIva(id base_imp importe) agrega internamente un subtotal de IVA a unafactura para luego poder autorizarla recibe los datos del tipo de aliacutecuota base imponible e importeVer ejemplo para el detalle de los paraacutemetros
bull
AgregarTributo(id Desc base_imp alic importe) agrega internamente unsubtotal de tributo a una factura para luego poder autorizarla recibe los datos del impuesto nacionalprovincial o municipal (descripcioacuten) base imponible e importe Ver ejemplo para el detalle de losparaacutemetros
bull
AgregarCmpAsoc(tipo_cbte_asoc punto_vta_asoc cbte_nro_asoccbte_cuit fecha) agrega internamente un comprobante asociado a una factura para luegopoder autorizarla recibe tipo de comprobante punto de venta y nuacutemero Ver ejemplo para el detallede los paraacutemetros El campo cuit fueacute agregado seguacuten Release v05 15-03-2017 disponible desdeactualizacioacuten 113a El campo fecha fue agregado en Realse v010 01072019
bull
AgregarItem(u_mtx cod_mtx codigo ds qty umed precio bonifcod_iva imp_iva imp_subtotal) agrega internamente un item (linea de factura) a unafactura para luego poder autorizarla recibe los datos del item a factura a emitir Ver ejemplo para eldetalle de los paraacutemetros
bull
EstablecerCampoItem(campo valor) establece individualmente el valor de un campo deldetalle de la factura (uacuteltimo item agregado) devuelve True si el campo pertenece al encabezado y seha actualizado correctamente (ver ejemplo)
bull
AutorizarComprobante() autoriza la emisioacuten de factura electroacutenica devuelve el Coacutedigo deAutorizacioacuten Electroacutenico (CAE) Ver ejemplo
bull
AutorizarAjusteIVA() autoriza un ajuste de IVA (notas de creacutedito deacutebito) Se debe informarel coacutedigo 7790001001139 e informar solo el importe de IVA ajustado
bull
SolicitarCAEA(periodo orden) permite obtener un CAEA y su respectivo periacuteodo devigencia (fecha de validez desde y fecha de validez hasta)
bull
ConsultarCAEA(periodo orden caea) permite consultar la informacioacutencorrespondiente a un CAEA previamente otorgado (recibe periacuteodoorden o CAEA)
bull
InformarComprobanteCAEA() enviacutea la informacioacuten del comprobante emitido y asociado a unCAEA (ver AutorizarComprobante)
bull
InformarAjusteIVACAEA() enviacutea la informacioacuten del comprobante de ajuste de IVA emitidospara un CAEA (ver AutorizarAjusteIVA)
bull
AgregarPeriodoComprobantesAsociados(fecha_desde fecha_hasta) agregainternamente un periodo asociado a un comprobante NC o ND para luego poder autorizarla recibefecha desde y hasta Disponible desde actualizacioacuten 125a 200620
bull
Meacutetodos secundarios
ConsultarComprobante(tipo_cbte punto_vta cbte_nro) recupera los datos deuna factura autorizada recibe tipo de comprobante punto de venta y nuacutemero de comprobanteoriginal y devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) obtenido en su momento A su vezestablece los datos de la factura (Cae FechaCbte ImpTotal ImpNeto) Ver ejemplo para el detalle delos paraacutemetros y valores devueltos
bull
CompUltimoAutorizado(tipo_cbte punto_vta) recupera el uacuteltimo nuacutemero de facturaautorizada recibe tipo de comprobante y punto de venta Ver WSFERecuperaLastCMP
bull
Meacutetodos 60
ConsultarMonedas() ConsultarTiposComprobante()ConsultarTiposDocumento() ConsultarAlicuotasIVA()ConsultarCondicionesIVA() ConsultarUnidadesMedida()ConsultarTiposTributo() recupera valores referenciales de coacutedigos de las tablas deparaacutemetros devuelve una lista de strings con el idcoacutedigo descripcioacuten del paraacutemetro y vigencia -sicorresponde- (ver ejemplos) Maacutes informacioacuten en Tablas de Paraacutemetros
bull
ConsultarCotizacionMoneda(moneda_id) devuelve cotizacioacuten y fecha de la monedaindicada como paraacutemetro
bull
ConsultarPuntosVentaCAE() permite consultar los puntos de venta habilitados para CAE eneste WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPuntosVentaCAEA() permite consultar los puntos de venta habilitados para CAEAen este WS devuelve una lista (array de strings) con los datos con numero_punto_venta bloqueadofecha_baja
bull
ConsultarPtosVtaCAEANoInformados(caea) permite consultar que puntos de venta auacutenno fueron informados para un CAEA determinado devuelve una lista (array de strings) con los datosdel numero_punto_venta
bull
Atributos
Token es el coacutedigo de autorizacioacuten generado por la AFIP (WSAA)bull Sign es la firma de autorizacioacuten generado por la AFIP (WSAA)bull Cuit es el nuacutemero de CUIT del emisor de facturas formato string sin guionesbull AppServerStatus DbServerStatus AuthServerStatus estados de los servidores deAFIP (string OK en caso de estar funcionales)
bull
XmlRequest XmlResponse requerimiento y respuesta XML (para depuracioacuten)bull InstallDir Nuevo directorio de instalacioacuten (ej CArchivos de ProgramaWSAA)bull Excepcion Traceback Nuevo mensaje de error y traza de rastreo (para depuracioacuten)bull Respuesta Obs Reproceso valores complementarios que retornan los meacutetodosbull CAE Vencimiento CAE y Fecha de vencimiento autorizacioacutenbull Version versioacuten de la interfase (ej 111)bull FechaCbte fecha del comprobante (del comprobante recuperado devuelto por GetCmp)bull ImpTotal importes del comprobantebull ErrCode coacutedigo de error (si corresponde)bull ErrMsg mensaje de error (si corresponde)bull Errores lista de errores (si corresponde)bull Eventos lista de eventos (si corresponde)bull
Errores
La interfase procesa los errores WSMTXCA y los almacena en las proipedades Errores y ErrCodeErrMsgVer especificaciones teacutecnicas del WSMTXCA para maacutes informacioacuten sobre el uso del servicio web suformato condiciones y errores
Ejemplo
Autorizar una factura de mercado interno (version 1) a modo de ejemplo (ficticia) CAE normal
Dim WSAA As Object WSMTXCA As Object
Atributos 61
On Error GoTo ManejoError
Crear objeto interface Web Service Autenticacioacuten y AutorizacioacutenSet WSAA = CreateObject(WSAA)
Generar un Ticket de Requerimiento de Acceso (TRA) para WSMTXCAtra = WSAACreateTRA(wsmtxca)DebugPrint tra
Especificar la ubicacion de los archivos certificado y clave privadaPath = CurDir() + Certificado certificado es el firmado por la AFIP ClavePrivada la clave privada usada para crear el certificadoCertificado = reingartcrt certificado de pruebaClavePrivada = reingartkey clave privada de prueba
Generar el mensaje firmado (CMS)cms = WSAASignTRA(tra Path + Certificado Path + ClavePrivada)DebugPrint cms
Llamar al web service para autenticarta = WSAACallWSAA(cms httpswsaahomoafipgovarwsservicesLoginCms) Homologacioacuten (cambiar para produccioacuten)
Imprimir el ticket de acceso ToKen y Sign de autorizacioacutenDebugPrint taDebugPrint Token WSAATokenDebugPrint Sign WSAASign
Una vez obtenido se puede usar el mismo token y sign por 24 horas (este periacuteodo se puede cambiar)
Crear objeto interface Web Service de Factura Electroacutenica de Mercado InternoSet WSMTXCA = CreateObject(WSMTXCA)DebugPrint WSMTXCAversion
Setear tocken y sing de autorizacioacuten (pasos previos)WSMTXCAToken = WSAATokenWSMTXCASign = WSAASign
CUIT del emisor (debe estar registrado en la AFIP)WSMTXCACuit = 20267565393
Conectar al Servicio Web de FacturacioacutenWSDL = httpsserviciosjavaafipgovarwsmtxcaservicesMTXCAServicewsdlok = WSMTXCAConectar( WSDL) produccioacuten
Llamo a un servicio nulo para obtener el estado del servidor (opcional)WSMTXCADummyDebugPrint appserver status WSMTXCAAppServerStatusDebugPrint dbserver status WSMTXCADbServerStatusDebugPrint authserver status WSMTXCAAuthServerStatus
Establezco los valores de la factura a autorizartipo_cbte = 1punto_vta = 4000cbte_nro = WSMTXCACompUltimoAutorizado(tipo_cbte punto_vta)fecha = Format(Date yyyy-mm-dd)concepto = 3tipo_doc = 80 nro_doc = 30000000007cbte_nro = CLng(cbte_nro) + 1cbt_desde = cbte_nro cbt_hasta = cbte_nroimp_total = 12200 imp_tot_conc = 000 imp_neto = 10000
Ejemplo 62
imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs = Observaciones Comerciales libre
ok = WSMTXCACrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbt_desde cbt_hasta imp_total imp_tot_conc imp_neto _ imp_subtotal imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz obs)
Agrego los comprobantes asociadosIf False Then solo si es nc o nd tipo = 19 pto_vta = 2 nro = 1234 ok = WSMTXCAAgregarCmpAsoc(tipo pto_vta nro)End If
Agrego impuestos variosid = 99Desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100ok = WSMTXCAAgregarTributo(id Desc base_imp alic importe)
Agrego subtotales de IVAid = 5 21base_im = 10000importe = 2100ok = WSMTXCAAgregarIva(id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890codigo = P0001ds = Descripcion del producto P0001qty = 10000umed = 7precio = 10000bonif = 000cod_iva = 5imp_iva = 2100imp_subtotal = 12100ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx codigo ds qty _ umed precio bonif cod_iva imp_iva imp_subtotal)ok = WSMTXCAAgregarItem(u_mtx cod_mtx DESC Descuento 0 _
99 0 0 cod_iva -2100 -12100)
Solicito CAEcae = WSMTXCAAutorizarComprobante()
verifico que no haya erroresFor Each er In WSMTXCAErrores MsgBox er vbInformation ErrorNext
Ejemplo 63
Imprimo pedido y respuesta XML para depuracioacuten (errores de formato)DebugPrint WSMTXCAXmlRequestDebugPrint WSMTXCAXmlResponse
MsgBox Resultado amp WSMTXCAResultado amp CAE amp cae amp _ Venc amp WSMTXCAVencimiento amp Obs amp WSMTXCAobs _
vbInformation + vbOKOnly
Ejemplo para obtener coacutedigos referenciales (tabla moneda)
recupero tabla de paraacutemetros de moneda (id descripcioacuten)For Each x In WSMTXCAConsultarMonedas() DebugPrint xNext
busco la cotizacioacuten del dolar (ver Param Mon)ctz = WSMTXCAConsultarCotizacionMoneda(DOL)MsgBox Cotizacioacuten Doacutelar amp ctz
Descripcioacuten de la obtencioacuten de CAE CAEA
Como primer paso se debe crear una factura (utilizada internamente por la interfase para contener los valoresa autorizar) llamando al meacutetodo CrearFactura con los siguiente paraacutemetros
tipo_doc nro_doc Tipo (80 CUIT 96 DNI etc) y nuacutemero de Documentobull tipo_cbte Tipo de comprobante (seguacuten tabla de paraacutemetros)bull punto_vta Nordm de punto de venta (debe estar autorizado para WSMTX factura electroacutenica con detalle)bull cbt_desde cbt_hasta Nordm de comprobante (desde hasta ambos el mismo nuacutemero si es una facturaindividual)
bull
fecha_cbte Fecha del comprobante (no puede ser mayor o menor a 10 diacuteas)bull concepto tipo de factura (1 productos 2 servicios etc)bull imp_total Importe total de la facturabull imp_tot_conc Importe total de conceptos no gravados por el IVAbull imp_neto Importe neto (gravado por el IVA) de la facturabull imp_subtotal subtotal sin ivabull imp_trib Importe de otros tributosbull imp_op_ex Importe de operaciones exentasbull moneda_id Moneda de la factura (seguacuten tabla de paraacutemetros)bull moneda_ctz Cotizacioacuten de la moneda de la facturabull fecha_vto_pago Fecha de vencimiento de pago (si es de servicios)bull fecha_serv_desde fecha_serv_hasta fecha del serviciosbull obs observaciones comerciales (campo libre)bull caea debe completarse si se informa una factura en esta modalidad (obtenido con SolicitarCAEA)bull
Luego por cada artiacuteculo vendido (iacutetem) se debe llamar al meacutetodo AgregarItem con los siguientes paraacutemetros
u_mtx cantidad de unidades(ej 123456)bull cod_mtx codigo mtx del producto (ej 1234567890)bull codigo codigo opcional del producto (ej P0001)bull ds Descripcioacuten completabull qty Cantidadbull umed Unidad de medida (seguacuten tabla de paraacutemetros)bull precio Precio Neto Unitario (facturas A) o precio final (facturas B)bull
Descripcioacuten de la obtencioacuten de CAE CAEA 64
bonif Bonificacioacutenbull cod_iva Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull imp_iva importe liquidado de IVAbull imp_subtotal = Importe total (incluyendo descuentos e IVA)bull
Para items descriptivos utilizar umed = 0 Para anticipos o descuentos utilizar umed = 99
Por cada alicuota de IVA se debe llamar al meacutetodo AgregarIva con los siguientes paraacutemetros
id coacutedigo Aliacutecuota de IVA (seguacuten tabla de paraacutemetros)bull base_imp base imponible (importe)bull importe importe liquidadobull
De existir otros tributos se debe llamar al meacutetodo AgregarTributo con los siguientes paraacutemetros
id coacutedigo tipo de impuesto (seguacuten tabla de paraacutemetros)bull desc descripcioacuten del tributo (por ej Impuesto Municipal Matanza)bull base_imp base imponible (importe)bull alic alicuota (porcentaje)bull importe importe liquidadobull
Tambieacuten se puede llamar al meacutetodo AgregarCmpAsoc para detallar los comprobantes asociados a una nota decreacutedito con los siguientes paraacutemetros
tipo Coacutedigo de tipo de comprobantebull pto_vta Punto de ventabull nro Numero de comprobantebull
Como uacuteltimo paso se debe llamar al meacutetodo AutorizarComprobante o InformarComprobanteCAEA
Si no hubiere inconvenientes la llamada debe devolver el CAE CAEA y se establece el atributoWSMTXCAResultado = A (Aceptado) y WSMTXCAVencimiento Sino devuelve
cae = La interfase no pudo procesar la respuesta del WebService o bien la conexioacuten a internet estacaiacuteda las direcciones de los servidores son incorrectas o el servicio web rechazo los datos de lafactura a generar Se establece el atributo WSBFEResultado = R (Rechazado) y WSMTXCAObscon los diversos motivos de rechazo proporcionados por el webservice (ver WSFEMotivo)
bull
Auacuten devolviendo el CAE y con el resultado Aceptado puede haber un motivo (ej 10017 Factura individualDocTipo 80 DocNro 33693450239 no se encuentra en condicion activa en los padrones de AFIP) quefuncionan como advertencia para revisar la base de datos y corregir posibles irregularidades
Advertencia Este servicio web no tiene reproceso (a diferencia de WSFE) En caso de falla o peacuterdida decomunicacioacuten usar el meacutetodo para recuperar un comprobante emitido (ConsultarComprobante)
Para maacutes informacioacuten ver especificaciones teacutecnicas del WSMTX en el sitio de la AFIP
Manual Desarrollador Informacioacuten importante sobre la operatoriabull
Descripcioacuten de la obtencioacuten de CAE CAEA 65
Establecer campos individualmente (ejemplo WSMTXCA)
Para lenguajes que no soporten el pasaje de varios parametros a un meacutetodo (por ej SERVOY por sulimitacioacuten de 6 argumentos) desde la versioacuten 106a es posible crear la factura en blanco (todos los camposvacios) y luego establecer los campos individualmente
ok = WSMTXCACrearFactura()ok = WSMTXCAEstablecerCampoFactura(concepto concepto)ok = WSMTXCAEstablecerCampoFactura(tipo_doc tipo_doc)ok = WSMTXCAEstablecerCampoFactura(nro_doc nro_doc)ok = WSMTXCAEstablecerCampoFactura(tipo_cbte tipo_cbte)ok = WSMTXCAEstablecerCampoFactura(punto_vta punto_vta)ok = WSMTXCAEstablecerCampoFactura(cbt_desde cbt_desde)ok = WSMTXCAEstablecerCampoFactura(cbt_hasta cbt_hasta)ok = WSMTXCAEstablecerCampoFactura(imp_total imp_total)ok = WSMTXCAEstablecerCampoFactura(imp_tot_conc imp_tot_conc)ok = WSMTXCAEstablecerCampoFactura(imp_neto imp_neto)ok = WSMTXCAEstablecerCampoFactura(imp_subtotal imp_subtotal)ok = WSMTXCAEstablecerCampoFactura(imp_trib imp_trib)ok = WSMTXCAEstablecerCampoFactura(imp_op_ex imp_op_ex)ok = WSMTXCAEstablecerCampoFactura(fecha_cbte fecha_cbte)ok = WSMTXCAEstablecerCampoFactura(fecha_venc_pago fecha_venc_pago)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_desde fecha_serv_desde)ok = WSMTXCAEstablecerCampoFactura(fecha_serv_hasta fecha_serv_hasta)ok = WSMTXCAEstablecerCampoFactura(moneda_id moneda_id)ok = WSMTXCAEstablecerCampoFactura(moneda_ctz moneda_ctz)ok = WSMTXCAEstablecerCampoFactura(observaciones Obs)ok = WSMTXCAEstablecerCampoFactura(caea CAEA)ok = WSMTXCAEstablecerCampoFactura(vencimiento vencimiento)
Para los items de detalle seriacutea similar
ok = WSMTXCAAgregarItem()ok = WSMTXCAEstablecerCampoItem(u_mtx u_mtx)ok = WSMTXCAEstablecerCampoItem(cod_mtx cod_mtx)ok = WSMTXCAEstablecerCampoItem(codigo codigo)ok = WSMTXCAEstablecerCampoItem(ds ds)ok = WSMTXCAEstablecerCampoItem(qty qty)ok = WSMTXCAEstablecerCampoItem(umed umed)ok = WSMTXCAEstablecerCampoItem(precio precio)ok = WSMTXCAEstablecerCampoItem(bonif bonif)ok = WSMTXCAEstablecerCampoItem(iva_id cod_iva)ok = WSMTXCAEstablecerCampoItem(imp_iva imp_iva)ok = WSMTXCAEstablecerCampoItem(imp_subtotal imp_subtotal)
Interfase por archivos de texto siacutemil SIAP - RECE
Para lenguajes donde no es posible utilizar objetos COM se desarrolloacute una interfaz de texto (command lineinterfase) para poder utilizar los Web Services de la AFIP que funciona como un programa independientemanteniendo las ventajas y caracteriacutesticas presentadas anteriormente
Formatos de archivos de intercambio soportados
Archivos TXT de Texto plano estilo COBOL y aplicativos SIAP AFIPbull Tablas DBF para dBase III Fox Clipper Harbour (xBase) etcbull Formato JSON para lenguajes de programacioacuten maacutes modernos (PHP JAVA JavaScript etc)bull
Establecer campos individualmente (ejemplo WSMTXCA) 66
La herramienta es multiplataforma (LinuxWindows)
Ver secciones anteriores sobre la descripcioacuten de las opciones de configuracioacuten campos y procedimientos
Consideraciones Generalesbull Autenticacioacuten (WSAA) ticket de acceso certificados y claves privadasbull Gestioacuten de CAE (WSFEv1) mercado interno sin detalle (version 1)bull Gestioacuten de CAE (WSMTXCA) mercado interno con detalle (matrix)bull Gestioacuten de CAE (WSFEX) exportacioacutenbull
Configuracioacuten
Editar el archivo RECEINI en la carpeta de la intefase (CPYAFIPWS)
CERT ubicacioacuten del archivo certificado (ver WSAA)bull PRIVATEKEY ubicacioacuten del archivo de la clave privada (ver WSAA)bull CUIT CUIT del emisorbull ENTRADA ubicacioacuten del archivo de texto de entrada (para cada webservice)bull SALIDA ubicacioacuten del archivo de texto de salida (para cada webservice)bull URL direccioacuten de los servicios web de produccioacuten (para cada webservice)bull Seccion [DBF] configura los nombres de archivos con las tablas requeridasbull
Ejemplo
[WSAA]CERT=CSISTEMAempresacrtPRIVATEKEY= CSISTEMAempresakeyURL=httpswsaaafipgovarwsservicesLoginCmswsdl[WSFEv1]CUIT=30000000000CBU=2222222222222222222222ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfev1serviceasmxWSDL
[WSMTXCA]CUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtReprocesar= SURL=httpsserviciosjavaafipgobarwsmtxcaservicesMTXCAService
[WSBFE] aplica tambieacuten a WSBFEv1CUIT=30000000000ENTRADA= CSISTEMAentradatxtSALIDA= CSISTEMAsalidatxtURL=httpsservicios1afipgovarwsbfev1serviceasmxWSDL
[WSFEXv1] aplica tambieacuten a WSFEXCUIT=30000000000ENTRADA=entradatxtSALIDA=salidatxtURL=httpsservicios1afipgovarwsfexv1serviceasmxWSDL
Interfase por archivos de texto siacutemil SIAP - RECE 67
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalles = detallesdbfDatos Opcionales = opcionalesdbf
Seccioacuten [WSAA]
Configuracioacuten referente al web service de autenticacioacuten
CERT ubicacioacuten del archivo que contiene el certificadobull PRIVATEKEY ubicacioacuten de la clave privada correspondiente al certificadobull URL direccioacuten del servidor de AFIP Por ej para produccioacuten httpswsaaafipgovarwsservicesLoginCmswsdl
bull
Seccioacuten [WSFEv1]
Configuracioacuten referente al web service de factura nacional
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfev1serviceasmxWSDL
bull
Seccioacuten [WSFEX]
Configuracioacuten referente al web service de factura exportacioacuten
CUIT nordm de cuit del emisor (sin guiones) Por ej 20267565393bull ENTRADA nombre de archivo con datos para autorizargenerar (si corresponde) Por ej entradatxtbull SALIDA nombre de archivo para almacenar el resultado (si corresponde) Por ej salidatxtbull URL direccioacuten del servidor de AFIP Por ej para produccioacutenURL= httpsservicios1afipgovarwsfexserviceasmx
bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull
Seccioacuten [PROXY]
Configuracioacuten referente al servidor intermedio de salida a internet (firewall antivirus proxy etc) ej
Configuracioacuten 68
HOST = localhostbull PORT = 8000bull USER = marianobull PASS = reingartbull
NOTA solo debe configurarse esta seccioacuten si corresponde contactar al administrador de red de la empresapara determinar los paraacutemetros correctos de cada caso Para maacutes informacioacuten ver Errores de Conectividad
Formato de archivos de entrada y salida
Factura electroacutenica normal (WSFE)
El formato utilizado es similar a RECE pero extendido con algunos campos necesarios para utilizar losServicios Web A continuacioacuten se detalla nombre del campo posicioacuten inicial longitud y tipo
fecha_cbte (28A)bull tipo_cbte (102N)bull punto_vta (134N)bull cbt_desde (178N)bull cbt_hasta (258N)bull tipo_doc (362N)bull nro_doc (3811N)bull imp_total (7915I)bull imp_tot_conc (9415I)bull imp_neto (10915I)bull impto_liq (12415I)bull impto_liq_rni (13915I)bull imp_op_ex (15415I)bull cae (26114N)bull fecha_vto (2758A)bull resultado (2911A)bull motivo (2922A)bull reproceso (2941A)bull fecha_venc_pago (2958A)bull presta_serv (3031N)bull fecha_serv_desde (3048A)bull fecha_serv_hasta (3128A)bull id (32015N)bull
Tipos de campo
A Alfanumericobull N Numericobull I Importes con 2 decimales (sin incluir punto)bull
Los espacios no definidos se ignoran (completar con un espacio en blanco)
Para maacutes informacioacuten sobre los campos ver paraacutemetros y valores que retorna el meacutetodo Aut en el presentemanual
Seccioacuten [PROXY] 69
Como formato de entrada es posible utilizar el mismo archivo generado para el aplicativo SIAPRECE perono se podraacuten facturar servicios ya que los campo presta_serv y fecha_serv_desde y fecha_serv_hasta no estaacutencontemplados en dicho formato
Factura electroacutenica bienes de capital (WSBFE)
El formato es similar al de factura electroacutenica normal pero variacutea el tipo de registro (0 Encabezado 1 Detallede cada Item)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 0bull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numericobull Campo tipo_doc Posicioacuten 24 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 26 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 37 Longitud 15 Tipo Importebull Campo imp_tot_conc Posicioacuten 52 Longitud 15 Tipo Importebull Campo imp_neto Posicioacuten 67 Longitud 15 Tipo Importebull Campo impto_liq Posicioacuten 82 Longitud 15 Tipo Importebull Campo impto_liq_rni Posicioacuten 97 Longitud 15 Tipo Importebull Campo imp_op_ex Posicioacuten 112 Longitud 15 Tipo Importebull Campo impto_perc Posicioacuten 127 Longitud 15 Tipo Importebull Campo imp_iibb Posicioacuten 142 Longitud 15 Tipo Importebull Campo impto_perc_mun Posicioacuten 157 Longitud 15 Tipo Importebull Campo imp_internos Posicioacuten 172 Longitud 15 Tipo Importebull Campo imp_moneda_id Posicioacuten 187 Longitud 3 Tipo Alfanumericobull Campo imp_moneda_ctz Posicioacuten 190 Longitud 10 Tipo Importebull Campo zona Posicioacuten 200 Longitud 5 Tipo Alfanumericobull Campo cae Posicioacuten 205 Longitud 14 Tipo Numericobull Campo fecha_vto Posicioacuten 219 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 227 Longitud 1 Tipo Alfanumericobull Campo obs Posicioacuten 228 Longitud 2 Tipo Alfanumericobull Campo reproceso Posicioacuten 230 Longitud 1 Tipo Alfanumericobull Campo id Posicioacuten 231 Longitud 15 Tipo Numericobull
Detalle (por cada item)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Valor 1bull Campo ncm Posicioacuten 2 Longitud 15 Tipo Alfanumericobull Campo sec Posicioacuten 17 Longitud 15 Tipo Alfanumericobull Campo qty Posicioacuten 32 Longitud 15 Tipo Importebull Campo umed Posicioacuten 47 Longitud 5 Tipo Numericobull Campo precio Posicioacuten 52 Longitud 15 Tipo Importebull Campo bonif Posicioacuten 67 Longitud 15 Tipo Importebull Campo imp_total Posicioacuten 82 Longitud 15 Tipo Importebull Campo iva_id Posicioacuten 97 Longitud 5 Tipo Numericobull Campo ds Posicioacuten 102 Longitud 200 Tipo Alfanumericobull
Factura electroacutenica normal (WSFE) 70
Si se informa el campo ID la factura se genera con dicho nuacutemero de secuencia De lo contrario para evitarproblemas y poder reprocesar el CAE se genera con un nuacutemero de secuencia del formatoTPPPPNNNNNNNN (tipo de comprobante punto de venta y nuacutemero de comprobante)
Factura electroacutenica exportacioacuten (WSFEX)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Formato
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 3bull Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo obs Posicioacuten 1618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 2618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 2668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 2671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 2691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 2692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 2706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 2714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 2715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 2716 Longitud 40 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 2756 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 2771 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 32 Longitud 12 Tipo Importe Decimalesbull Campo umed Posicioacuten 44 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 46 Longitud 12 Tipo Importe Decimales 3bull Campo imp_total Posicioacuten 58 Longitud 14 Tipo Importe Decimales 3bull Campo ds Posicioacuten 72 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica bienes de capital (WSBFE) 71
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Nota se utilizan 3 decimales para los importes y 6 para la cotizacioacuten de la moneda
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Tributo 2 IVA 3 Comprobante asociado 6 Opcionales 8 Periodo Comprobante asociado) y no tienedetalle de artiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numericobull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numericobull Campo cbt_desde Posicioacuten 16 Longitud 8 Tipo Numericobull Campo cbt_hasta Posicioacuten 24 Longitud 8 Tipo Numericobull Campo concepto Posicioacuten 32 Longitud 1 Tipo Numericobull Campo tipo_doc Posicioacuten 33 Longitud 2 Tipo Numericobull Campo nro_doc Posicioacuten 35 Longitud 11 Tipo Numericobull Campo imp_total Posicioacuten 46 Longitud 15 Tipo Importe Decimales 2bull Campo no_usar Posicioacuten 61 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 76 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 91 Longitud 15 Tipo Importe Decimales 2bull Campo imp_iva Posicioacuten 106 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 121 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 136 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 151 Longitud 3 Tipo Alfanumericobull Campo moneda_ctz Posicioacuten 154 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 164 Longitud 8 Tipo Alfanumericobull Campo cae Posicioacuten 172 Longitud 14 Tipo Alfanumericobull Campo fch_venc_cae Posicioacuten 186 Longitud 8 Tipo Alfanumericobull Campo resultado Posicioacuten 194 Longitud 1 Tipo Alfanumericobull Campo motivos_obs Posicioacuten 195 Longitud 1000 Tipo Alfanumericobull Campo err_code Posicioacuten 1195 Longitud 6 Tipo Alfanumericobull Campo err_msg Posicioacuten 1201 Longitud 1000 Tipo Alfanumericobull Campo reproceso Posicioacuten 2201 Longitud 1 Tipo Alfanumericobull Campo emision_tipo Posicioacuten 2202 Longitud 4 Tipo Alfanumericobull Campo fecha_serv_desde Posicioacuten 2206 Longitud 8 Tipo Alfanumericobull
Factura electroacutenica exportacioacuten (WSFEX) 72
Campo fecha_serv_hasta Posicioacuten 2214 Longitud 8 Tipo Alfanumericobull Campo tipo_cbte Posicioacuten 2222 Longitud 3 Tipo Numericobull Campo punto_vta Posicioacuten 2225 Longitud 5 Tipo Numericobull Campo fecha_hs_gen Posicioacuten 2230 Longitud 14 Tipo Alfanumerico formato yyyymmddhhmiss(pCAEA contingencia)
bull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tributo_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo desc Posicioacuten 18 Longitud 100 Tipo Alfanumericobull Campo base_imp Posicioacuten 118 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 133 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 148 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo iva_id Posicioacuten 2 Longitud 16 Tipo Numericobull Campo base_imp Posicioacuten 18 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 33 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numericobull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numericobull Campo nro Posicioacuten 9 Longitud 8 Tipo Numericobull Campo fecha Posicioacuten 17 Longitud 8 Tipo Numericobull Campo cuit Posicioacuten 25 Longitud 11 Tipo Numericobull
Opcionales Disponible desde actualizacioacuten 133b
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Compradores Disponible desde actualizacioacuten 137a (RG-4109-E Bienes Muebles Registrables)
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo doc_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo doc_nro Posicioacuten 5 Longitud 80 Tipo Numerico Decimalesbull Campo porcentaje Posicioacuten 85 Longitud 6 Tipo Importe Decimales 2bull
Periodo Cbte Asoc Disponible desde actualizacioacuten 138a
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo fecha_desde Posicioacuten 2 Longitud 8 Tipo Numericobull Campo fecha_hasta Posicioacuten 10 Longitud 8 Tipo Numericobull
Factura electroacutenica Mercado Interno Versioacuten 1 (WSFEv1) 73
Factura electroacutenica Mercado Interno Matrix (WSMTXCA)
El formato es similar al de factura electroacutenica mercado interno version 1 pero variacutea el tipo de registro (0Encabezado 1 Tributo 2 IVA 3 Comprobante asociado 4 Detalle de cada item) y tiene detalle deartiacuteculos
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 10 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 12 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 14 Longitud 4 Tipo Numerico Decimalesbull Campo cbt_desde Posicioacuten 18 Longitud 8 Tipo Numerico Decimalesbull Campo cbt_hasta Posicioacuten 26 Longitud 8 Tipo Numerico Decimalesbull Campo concepto Posicioacuten 34 Longitud 1 Tipo Numerico Decimalesbull Campo tipo_doc Posicioacuten 35 Longitud 2 Tipo Numerico Decimalesbull Campo nro_doc Posicioacuten 37 Longitud 11 Tipo Numerico Decimalesbull Campo imp_total Posicioacuten 48 Longitud 15 Tipo Importe Decimales 2bull Campo imp_tot_conc Posicioacuten 63 Longitud 15 Tipo Importe Decimales 2bull Campo imp_neto Posicioacuten 78 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 93 Longitud 15 Tipo Importe Decimales 2bull Campo imp_trib Posicioacuten 108 Longitud 15 Tipo Importe Decimales 2bull Campo imp_op_ex Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo moneda_id Posicioacuten 138 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 141 Longitud 10 Tipo Importe Decimales 6bull Campo fecha_venc_pago Posicioacuten 151 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_desde Posicioacuten 161 Longitud 10 Tipo Alfanumerico Decimalesbull Campo fecha_serv_hasta Posicioacuten 171 Longitud 10 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 181 Longitud 14 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 195 Longitud 10 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 205 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 206 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 1206 Longitud 6 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 1212 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo reproceso Posicin 2212 Longitud 1 Tipo Alfanumerico Decimalesbull Campo emision_tipo Posicin 2213 Longitud 4 Tipo Alfanumerico Decimalesbull Campo observaciones Posicioacuten 2217 Longitud 1000 Tipo Alfanumerico Decimalesbull
Tributo
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tributo_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull Campo desc Posicioacuten 5 Longitud 100 Tipo Alfanumerico Decimalesbull Campo base_imp Posicioacuten 105 Longitud 15 Tipo Importe Decimales 2bull Campo alic Posicioacuten 120 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 135 Longitud 15 Tipo Importe Decimales 2bull
Iva
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo iva_id Posicioacuten 2 Longitud 3 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Mercado Interno Matrix (WSMTXCA) 74
Campo base_imp Posicioacuten 5 Longitud 15 Tipo Importe Decimales 2bull Campo importe Posicioacuten 20 Longitud 15 Tipo Importe Decimales 2bull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo pto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull
Opcionales
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numericobull Campo opcional_id Posicioacuten 2 Longitud 4 Tipo Alfanumericobull Campo valor Posicioacuten 6 Longitud 250 Tipo Alfanumericobull
Detalle de item
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo u_mtx Posicioacuten 2 Longitud 10 Tipo Numerico Decimalesbull Campo cod_mtx Posicioacuten 12 Longitud 30 Tipo Alfanumerico Decimalesbull Campo codigo Posicioacuten 42 Longitud 30 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 72 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo umed Posicioacuten 87 Longitud 3 Tipo Numerico Decimalesbull Campo precio Posicioacuten 90 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo bonif Posicioacuten 105 Longitud 15 Tipo Importe Decimales 3 (hasta 6 decimales con )bull Campo iva_id Posicioacuten 120 Longitud 3 Tipo Numerico Decimalesbull Campo imp_iva Posicioacuten 123 Longitud 15 Tipo Importe Decimales 2bull Campo imp_subtotal Posicioacuten 138 Longitud 15 Tipo Importe Decimales 2bull Campo ds Posicioacuten 153 Longitud 4000 Tipo Alfanumerico Decimalesbull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1)
El formato es similar al de factura electroacutenica bienes de capital pero variacutea el tipo de registro (0 Encabezado1 Detalle de cada Item 2 Permiso 3 Comprobante asociado)
Encabezado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo fecha_cbte Posicioacuten 2 Longitud 8 Tipo Alfanumerico Decimalesbull Campo tipo_cbte Posicioacuten 10 Longitud 2 Tipo Numerico Decimalesbull Campo punto_vta Posicioacuten 12 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 16 Longitud 8 Tipo Numerico Decimalesbull Campo tipo_expo Posicioacuten 24 Longitud 1 Tipo Numerico Decimalesbull Campo permiso_existente Posicioacuten 25 Longitud 1 Tipo Alfanumerico Decimalesbull Campo pais_dst_cmp Posicioacuten 26 Longitud 3 Tipo Numerico Decimalesbull Campo nombre_cliente Posicioacuten 29 Longitud 200 Tipo Alfanumerico Decimalesbull Campo cuit_pais_cliente Posicioacuten 229 Longitud 11 Tipo Numerico Decimalesbull Campo domicilio_cliente Posicioacuten 240 Longitud 300 Tipo Alfanumerico Decimalesbull Campo id_impositivo Posicioacuten 540 Longitud 50 Tipo Alfanumerico Decimalesbull Campo imp_total Posicioacuten 590 Longitud 15 Tipo Importe Decimales 2bull
Factura electroacutenica Exportacioacuten Version 1 (WSFEXv1) 75
Campo moneda_id Posicioacuten 605 Longitud 3 Tipo Alfanumerico Decimalesbull Campo moneda_ctz Posicioacuten 608 Longitud 10 Tipo Importe Decimales 6bull Campo obs_comerciales Posicioacuten 618 Longitud 4000 Tipo Alfanumerico Decimalesbull Campo obs_generales Posicioacuten 4618 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo forma_pago Posicioacuten 5618 Longitud 50 Tipo Alfanumerico Decimalesbull Campo incoterms Posicioacuten 5668 Longitud 3 Tipo Alfanumerico Decimalesbull Campo incoterms_ds Posicioacuten 5671 Longitud 20 Tipo Alfanumerico Decimalesbull Campo idioma_cbte Posicioacuten 5691 Longitud 1 Tipo Alfanumerico Decimalesbull Campo cae Posicioacuten 5692 Longitud 14 Tipo Numerico Decimalesbull Campo fecha_vto Posicioacuten 5706 Longitud 8 Tipo Alfanumerico Decimalesbull Campo resultado Posicioacuten 5714 Longitud 1 Tipo Alfanumerico Decimalesbull Campo reproceso Posicioacuten 5715 Longitud 1 Tipo Alfanumerico Decimalesbull Campo motivos_obs Posicioacuten 5716 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo id Posicioacuten 6716 Longitud 15 Tipo Numerico Decimalesbull Campo fch_venc_cae Posicioacuten 6731 Longitud 8 Tipo Alfanumerico Decimalesbull Campo excepcion Posicioacuten 6739 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_code Posicioacuten 6839 Longitud 100 Tipo Alfanumerico Decimalesbull Campo err_msg Posicioacuten 6939 Longitud 1000 Tipo Alfanumerico Decimalesbull Campo fecha_pago Posicioacuten 7939 Longitud 8 Tipo Alfanumerico Decimalesbull
Detalle
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo codigo Posicioacuten 2 Longitud 50 Tipo Alfanumerico Decimalesbull Campo qty Posicioacuten 52 Longitud 12 Tipo Importe Decimales 6bull Campo umed Posicioacuten 64 Longitud 2 Tipo Numerico Decimalesbull Campo precio Posicioacuten 66 Longitud 12 Tipo Importe Decimales 6bull Campo importe Posicioacuten 78 Longitud 13 Tipo Importe Decimales 2bull Campo bonif Posicioacuten 91 Longitud 12 Tipo Importe Decimales 6bull Campo ds Posicioacuten 103 Longitud 4000 Tipo Alfanumerico Decimalesbull
Permiso
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo id_permiso Posicioacuten 2 Longitud 16 Tipo Alfanumerico Decimalesbull Campo dst_merc Posicioacuten 18 Longitud 3 Tipo Numerico Decimalesbull
Comprobante Asociado
Campo tipo_reg Posicioacuten 1 Longitud 1 Tipo Numerico Decimalesbull Campo cbte_tipo Posicioacuten 2 Longitud 3 Tipo Numerico Decimalesbull Campo cbte_punto_vta Posicioacuten 5 Longitud 4 Tipo Numerico Decimalesbull Campo cbte_nro Posicioacuten 9 Longitud 8 Tipo Numerico Decimalesbull Campo cbte_cuit Posicioacuten 17 Longitud 11 Tipo Numerico Decimalesbull
Formato Tablas xBase DBF (dBase III Fox Clipper)
Las ultimas versiones de la interfaz ademas de manejo por archivo de texto soporta manejo por tablas DBFEstas tablas pueden ser generadas con cualquier libreriacutea o aplicacioacuten compatible (incluso pueden ser abiertascon planillas de caacutelculo)
Formato Tablas xBase DBF (dBase III Fox Clipper) 76
Los tipos de campos son
C(l) caracter (longitud)bull N(ld) numerico (longitud y decimales)bull M camos memo (usado para errores y mensajes extensos gt250 caracteres)bull D campos fechabull
Los nombres de los campos son los mismos que se manejan para el archivo de texto pero sin el guioacuten bajo yrecortados a 10 caracteres
Se utiliza la libreriacutea Python dBase (dbf-08819) que soporta los siguientes tipos de archivos
dBase III Plusbull dBase III Plus wmemosbull dBase IVbull dBase IV SQLbull dBase IV wmemosbull dBase IV wmemosbull dBase IV wSQL tablebull dBase Vbull FoxBASEbull FoxPro wmemosbull Visual FoxProbull Visual FoxPro (auto increment field)bull
Reconoce archivos con extensioacuten DBF DBT FPT entre otros
Factura electroacutenica mercado interno (WSFEv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
IMPORTANTE algunos campos han cambiado su denominacioacuten en las uacuteltimas versiones para hacerloscompatibles con las tablas PDF (solo se muestra el nombre de campo perteneciente a la uacuteltima actualizacioacuten)
Encabezado (encabezadbf)
Encabezado (datos generales de la factura)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtdesde N(80)bull Campo cbthasta N(80)bull Campo concepto N(10)bull Campo tipodoc N(20)bull Campo nrodoc N(110)bull Campo imptotal N(152)bull Campo nousar N(152)bull Campo imptotconc N(152)bull
Factura electroacutenica mercado interno (WSFEv1) 77
Campo impneto N(152)bull Campo impiva N(152)bull Campo imptrib N(152)bull Campo impopex N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo fechavencp C(8)bull Campo cae C(14)bull Campo fchvenccae C(8)bull Campo resultado C(1)bull Campo motivosobs Mbull Campo errcode C(6)bull Campo errmsg Mbull Campo reproceso C(1)bull Campo emisiontip C(4)bull Campo fechaservd C(8)bull Campo fechaservh C(8)bull
Tributo (tributodbf)
Detalle de otros tributos
Campo tiporeg N(10)bull Campo tributoid N(160)bull Campo desc C(100)bull Campo baseimp N(152)bull Campo alic N(152)bull Campo importe N(152)bull
Iva (ivadbf)
Detalle de subtotales por aliacutecuota de IVA
Campo tiporeg N(10)bull Campo ivaid N(160)bull Campo baseimp N(152)bull Campo importe N(152)bull
Comprobante Asociado (comprobadbf)
Comprobante Asociado
Campo tiporeg N(10)bull Campo tipo N(30)bull Campo ptovta N(40)bull Campo nro N(80)bull
Opcionales (opcionaldbf)
Datos opcionales (adicionales seguacuten cada nueva RG 3411 3668 4004-E etc)
Encabezado (encabezadbf) 78
Campo tiporeg N(10)bull Campo opcionalid C(4)bull Campo valor C(250)bull
Compradores (compradodbf)
Datos para Venta de bienes muebles registrables (RG 4109-E)
Campo tiporeg N(10)bull Campo doctipo N(30)bull Campo docnro N(800)bull Campo porcentaje N(62)bull
Factura electroacutenica mercado interno matrix (WSMTXCA)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Tabla Encabezadbf Encabezado (datos generales de la factura)
tiporeg N(10)bull fechacbte C(10)bull tipocbte N(20)bull puntovta N(40)bull cbtdesde N(80)bull cbthasta N(80)bull concepto N(10)bull tipodoc N(20)bull nrodoc N(110)bull imptotal N(152)bull imptotconc N(152)bull impneto N(152)bull impsubtota N(152)bull imptrib N(152)bull impopex N(152)bull monedaid C(3)bull monedactz N(106)bull fechavencp C(10)bull fechaservd C(10)bull fechaservh C(10)bull cae N(140)bull fchvenccae C(10)bull resultado C(1)bull motivosobs Mbull errcode C(6)bull errmsg Mbull reproceso C(1)bull emisiontip C(4)bull observacio Mbull
Tabla Tributodbf Detalle de otros tributos
Opcionales (opcionaldbf) 79
tiporeg N(10)bull tributoid C(3)bull desc C(100)bull baseimp N(152)bull alic N(152)bull importe N(152)bull
Tabla Ivadbf Detalle de subtotales por aliacutecuota de IVA
tiporeg N(10)bull ivaid C(3)bull baseimp N(152)bull importe N(152)bull
Tabla Comprobadbf Comprobante Asociado
tiporeg N(10)bull tipo N(30)bull ptovta N(40)bull nro N(80)bull
Tabla Detallesdbf Detalles del item
tiporeg N(10)bull umtx N(100)bull codmtx C(30)bull codigo C(30)bull qty N(153)bull umed N(30)bull precio N(153)bull bonif N(153)bull ivaid N(30)bull impiva N(152)bull impsubtota N(152)bull ds Mbull
Factura electroacutenica exportacioacuten (WSFEXv1)
El formato utilizado es similar al formato de texto de ancho fijo explicado anteriormente y cada tipo deregistro se almacena en una tabla separada
Encabezado (encabezadbf)
Campo tiporeg N(10)bull Campo fechacbte C(8)bull Campo tipocbte N(20)bull Campo puntovta N(40)bull Campo cbtenro N(80)bull Campo tipoexpo N(10)bull Campo permisoexi C(1)bull Campo paisdstcmp N(30)bull
Factura electroacutenica mercado interno matrix (WSMTXCA) 80
Campo nombreclie C(200)bull Campo cuitpaiscl N(110)bull Campo domicilioc Mbull Campo idimpositi C(50)bull Campo imptotal N(152)bull Campo monedaid C(3)bull Campo monedactz N(102)bull Campo obscomerci Mbull Campo obsgeneral Mbull Campo formapago C(50)bull Campo incoterms C(3)bull Campo incotermsd C(20)bull Campo idiomacbte C(1)bull Campo cae N(140)bull Campo fechavto C(8)bull Campo resultado C(1)bull Campo reproceso C(1)bull Campo motivosobs Mbull Campo id N(150)bull Campo fchvenccae C(8)bull Campo excepcion C(100)bull Campo errcode C(100)bull Campo errmsg Mbull
Detalle (detalledbf)
Campo tiporeg N(10)bull Campo codigo C(50)bull Campo qty N(122)bull Campo umed N(20)bull Campo precio N(122)bull Campo importe N(132)bull Campo bonif N(122)bull Campo ds Mbull
Permiso (permisodbf)
Campo tiporeg N(10)bull Campo idpermiso C(16)bull Campo dstmerc N(30)bull
Comprobante Asociado (comprobadbf)
Campo tiporeg N(10)bull Campo cbtetipo N(30)bull Campo cbtepuntov N(40)bull Campo cbtenro N(80)bull Campo cbtecuit N(110)bull
Encabezado (encabezadbf) 81
Formato JSON
Factura electroacutenica mercado interno (WSFEv1)
Para lenguajes modernos (PHP JAVA JavaScript etc) se pueden utilizar archivos de intercambio en formatoJSON
Ejecutar rece1exe json
Ejemplo archivo de entrada faactura_electronicajson
[ tipo_cbte 3 punto_vta 4002 cbt_desde 447 cbt_hasta 447 fecha_cbte 20190511 tipo_doc 80 nro_doc 30500010912
concepto 1 fecha_venc_pago null fecha_vto 20190521
imp_neto 10000 imp_iva 2100 imp_op_ex 000 imp_tot_conc 000 imp_trib 100 imp_total 12200
moneda_id PES moneda_ctz 1000
ivas [ iva_id 5 base_imp 100 importe 21 ] tributos [ tributo_id 99 alic 1 base_imp 100 importe 1 desc Impuesto Municipal Matanza ] cbtes_asoc [ nro 1234 pto_vta 2 tipo 1 ] opcionales [] compradores [] ]
La resupuesta del webservice de AFIP es agregada al mismo formato (ejemplo editado)
[ resultado A cae 69193742426586 fch_venc_cae 20190521 emision_tipo CAE motivos_obs err_code err_msg
Formato JSON 82
reproceso ]
Forma de uso
Llamar al ejecutable RECEEXE (factura electroacutenica normal WSFE) RECEBEXE (factura electroacutenicaBienes de Capital WSBFE) RECEXEXE (factura electroacutenica Exportacioacuten) RECE1EXE (facturaelectroacutenica mercado interno WSFE versioacuten 1) en la carpeta de la intefase (CPYAFIPWS)
En caso de ejecucioacuten correcta informara por pantalla los ID y CAE obtenidos y el coacutedigo de retorno es 0
ID 1000200000063 CAE 59033567692234 Motivo 00 Reproceso NID 1000200000064 CAE 59033693441244 Motivo 00 Reproceso NID 1000200000065 CAE 59033880026543 Motivo 00 Reproceso N
El CAE obtenido fecha de vencimiento y demaacutes valores devueltos por WSFE (resultado reproceso motivode rechazo u observacioacuten) son escritos en el archivo de salida con la misma informacioacuten de la factura que enel archivo de entrada
En el caso de error informa por pantalla el motivo y el coacutedigo de retorno es distinto de 0
ns1coenotAuthorized Computador no autorizado a acceder los servicio de AFIP
1000 FERecuperaLastCMPRequestSRV_RA Usuario no autorizado a realizar esta operacionValidacionDeToken No aparecioacute CUIT en lista de relaciones 30000000000
Paraacutemetros
RECEEXE RECEBEXE RECEXEXE RECE1EXE y RECEMEXE reciben los siguientes argumentospor liacutenea de comando
ayuda lista los paraacutemetros habilitadosbull prueba Teniendo los certificados instalados se puede realizar una prueba donde la interface generaraacuteun archivo de entrada para las tres proacuteximas facturas obteniendo los uacuteltimos nuacutemeros de transaccioacuteny comprobante
bull
ult Solicita Tipo de comprobante y Punto de Venta y devuelve el uacuteltimo numero de comprobanteregistrado
bull
dummy consulta estado de servidores (deberiacutean ser OK los 3 servidores)bull ptosventa devuelve los puntos de venta habilitados para emitir facturas electroacutenicas (soloWSFEv1RECE1)
bull
debug modo depuracioacuten (detalla y confirma las operaciones)bull formato muestra el formato de los archivos de entradasalidabull get recupera datos de un comprobante autorizado previamente (verificacioacuten solo para RECEXRECE1 y RECEM)
bull
xml almacena los requerimientos y respuestas XML (uacutetil para depuracioacuten y registro)bull dbf modo de trabajo con tablas Dbase IIIFoxPro o similares (solo RECE1 y RECEM)bull json modo de trabajo con formato JSON (JavaScript PHP Java) (solo RECE1)bull
Se puede especificar como primer paraacutemetro un nombre de archivo RECEINI alternativo para cargardistintas configuraciones por ej
Factura electroacutenica mercado interno (WSFEv1) 83
RECE1EXE rece-empresaxini
Si no se especifica accion por defecto se enviacutea la informacioacuten del archivo de intercambio para autorizar laemisioacuten de factura electroacutenica devuelve el Coacutedigo de Autorizacioacuten Electroacutenico (CAE) y demaacutes datos queresponde AFIP
Para CAEA (CAE Anticipado) aplican las siguientes opciones (RECEMRECE1)
solicitarcaea obtiene un CAEA y su respectivo periacuteodo de vigencia (fecha de validez desde y fechade validez hasta)
bull
consultarcaea consulta la informacioacuten correspondiente a un CAEA previamente otorgado (recibeperiacuteodoorden o CAEA)
bull
informarcaeanoutilizado informarcaeanoutilizadoptovta registra en AFIP un CAEA no utilizadobull informarcaea enviacutea la informacioacuten del comprobante emitido y asociado a un CAEAbull
Ejemplo RECE1 para autorizar una factura electroacutenica
Al ejecutar la herramienta sin paraacutemetros se autoriza la factura en el archivo de entrada guardando elresultado de AFIP en el archivo de salida
CPYAFIPWSgt RECE1EXE
Procesando FAC A 4002 00002067 00002067 CUIT 30628789661 $ 12200 IVA $ 2100NRO 2067 Resultado A CAE 65253261906700 Obs Err Reproceso S
Ante cualquier dificultad agregar los paraacutemetros --trace debug para ver los mensajes de depuracioacuten y xmldetallados
Ejemplo RECE1 consulta ultimo comprobante
Ejemplo para obtener el uacuteltimo nuacutemero de factura emitida
CPYAFIPWSgt RECE1EXE ultConsultar ultimo numeroTipo de comprobante 19Punto de venta 2Ultimo numero 62
Si se pasa el tipo de comprobante y punto de venta por linea de comando (luego de ult) en el archivo desalida guardaraacute el dato devuelto por AFIP
CPYAFIPWSgt RECE1EXE ult 1 4001Consultar ultimo numeroUltimo numero 222
Ejemplo RECE1 consulta de comprobante
Es posible recuperar los datos de un comprobante indicando get y tipo de comprobante punto de venta ynuacutemero de comprobante
CPYAFIPWSgt RECE1EXE get 1 5 478Recuperar comprobanteFechaCbte = 20150703
Paraacutemetros 84
CbteNro = 478PuntoVenta = 5TipoDoc = 80NroDoc = 27269434894ImpTotal = 226875CAE = 65273821773505Vencimiento = 20150713EmisionTipo = CAE
Es posible agregar xml yo --trace para ver el mensaje enviado y recibido desde AFIP con datos completosLos datos del comprobante recuperado tambieacuten se guardaraacuten en el archivo de intercambio (salida)
Ejemplo RECE1 consulta puntos de venta
Ejemplo para consultar los puntos de venta habilitados por AFIP
CPYAFIPWSgt RECE1EXE ptosventa
=== Puntos de Venta ===3|EmisionTipoCAE|BloqueadoN|FchBajaNULL4|EmisionTipoCAE|BloqueadoN|FchBajaNULL
Ejemplo RECEX1 consulta monedas con cotizacioacuten
Retorna la cotizacioacuten a la fecha consultada de la base de datos aduanera de todas las monedas que poseancotizacioacuten a la fecha indicada
CPYAFIPWSgt RECEX1EXE monctz Fecha (AAAAMMDD) |024|1757370|2202019||030|10991355|2202019||034|2833349|2202019||009|39777268|2202019||012|10663978|2202019||028|21977839|2202019||014|6073274|2202019||023|0012042|2202019||018|30185896|2202019||019|0358860|2202019||032|0012749|2202019||DOL|3967|2202019||016|4295104|2202019||026|28471159|2202019||033|0060760|2202019||035|11955998|2202019||063|27265191|2202019||015|4659463|2202019||060|451564|2202019||062|0605559|2202019||010|2068376|2202019||029|0006557|2202019||011|1214078|2202019||021|520470|2202019||025|0381832|2202019||031|5761801|2202019||061|5902659|2202019|0 OK
Ejemplo RECE1 consulta de comprobante 85
Entorno
Algunas versiones de COBOL cambian el directorio u otras variables del entorno (codificacioacuten zona horariaetc) En este caso se recomienda armar un archivo RECEBAT
ECHO OFFREM limpiar la zona horaria y cambiar al directorio de la interfaseSET TZ=CD CPYAFIPWSRECEEXE
PyFEPDF generador de PDF de facturas electroacutenicas
La herramienta PyFEPDF permite generar archivos PDF con el contenido de las Facturas Electroacutenicas paraponerlos a disposicioacuten de los clientes o ser enviados electroacutenicamente viacutea email con cualquier servicio decorreos o por web
Utiliza un enfoque similar a las interfaces para webservices por lo que su uso es muy simple totalmenteautomatizado (sin intervencioacuten del usuario) y no necesita herramientas externas (ni impresoras PDF nitipografiacuteas para el coacutedigo de barras)
Cubre toda la operatoria de Factura Electroacutenica seguacuten AFIP dada la Resolicioacuten General 24852006 ynormativa relacionada (RG141503 y RG1361) aplicable a
merado interno (WSFEv1 y WSMTXCA incluyendo importacioacuten con y sin detalle)bull exportacioacuten (WSFEX)bull bono fiscal electroacutenico (WSBFE)bull
Ver muestra baacutesica en facturapdf
La interfaz maneja automaacuteticamente
Logotipos e informacioacuten particular de cada empresabull Disentildeo en PDF libre modificable (incluye disentildeador visual faacutecil e intuitivo)bull Paginado y transporte con muacuteltiples copias (Original Duplicado etc)bull Textos ilimitados (detalles observaciones etc)bull IVA discriminado (subtotales facturas A)bull Coacutedigo de barras Interleaved 2 of 7 con diacutegito verificador (reemplazado por coacutedigo QR)bull Coacutedigo QR (Obligatorio a partir de Marzo 2021 - ver cronograma de implementacioacuten)bull Metadatos en las propiedades del PDF para buacutesquedas y archivamientobull Impresioacuten directa sin intervencioacuten del usuariobull
Nota algunas caracteriacutesticas pueden no estar disponible dado limitaciones del lenguaje de programacioacuten yosistema operativo
De manera similar a las otras interfaces y herramientas el instalador de PyFEPDF para homologacioacuten(evaluacioacuten y pruebas) estaacute disponible en la seccioacuten Descargas
Importante PyFEPDF es una herramienta adicional independiente del resto de los webservices yherramientas y los costos del soporte comercial variacutean dependiendo de las necesidades para implementarlaVer Costos y Condiciones
Entorno 86
Aclaraciones PDF
Coacutedigo de Barras es recomendable generarlo especialmente si se imprime (dependiendo del casoseriacutea obligatorio) Este componente contempla internamente la generacioacuten directa de la imaacutegen demanera vectorial (escalable en cualquier resolucioacuten) seguacuten el formato que requiere AFIP (Interleaved2 of 5) y no es necesario utilizar ninguna tipografia ni cuestioacuten adicional Simplemente debecompletarse el CUIT emisor punto de venta tipo de comprobante CAE y fecha de vencimiento delCAE (esta uacuteltima en formato AFIP AAAAMMDD) El componente contempla tambieacuten el caacutelculo deldiacutegito verificador De no estar todos los datos correctos no se generaraacute el coacutedigo de barras Parainformacioacuten general ver nuestro componente auxiliar PyI25
bull
Observaciones AFIP Si esta presente motivos_obs (respuesta de AFIP en WSFEv1Obs osimilar) deberiacutea agregarse la leyenda El IVA discriminado no puede computarse como CreacuteditoFiscal (RG248508 Art 27) -esto estaacute contemplado internamente en el componente- Por ej unmensaje de observacioacuten de AFIP seriacutea Factura individual DocTipo 80 DocNro 30000000007 nose encuentra registrado en los padrones de AFIP Anteriormente AFIP solo informaba el coacutedigo (09en este caso) para maacutes informacioacuten ver WSFE F136
bull
Discriminacioacuten de IVA el programador es responsable de enviar los datos correctos seguacuten lasdiferentes normativas de AFIP Generalmente el importe de IVA solo se debe discriminar parafacturas clase A o M En las facturas clase B por lo general solo se muestra la tasa pero no el neto niIVA liquidado En las facturas clase C y E generalmente no se muestra la columna de IVA ni NETOEsta loacutegica esta contemplada internamente pero es responsabilidad de la aplicacioacuten que utilice elcomponente el revisar por la consistencia de los datos Salvo en la Factura A para el resto se debeindicar el precio unitario IVA Incluido (de corresponder) y el importe total de cada artiacuteculo tambieacutendeberiacutea ser IVA Incluido en todos los casos (de manera similar a como se emiten los comprobantespor el sitio de clave fiscal de AFIP) Recomendamos utilizar el campo imp_subtotal para evitardiferencias de calculo y redondeo (deberiacutea ser la suma del neto + importes no gravado y exento paracomprobantes clase A e incluir el importe de IVA para los comprobantes clase B)
bull
Descuentos si bien se provee un campo descuento para los importes generales es recomendableque se utilice un artiacuteculo de bonificacioacuten general en el detalle con coacutedigo de unidad de medidaumed=99 y el importe en negativo para un correcto caacutelculo de los subtotales (especialmente si lafactura se extiende por varias paacuteginas) y contemplar la normativa de almacenamientoinformacioacuten yformatos de otros webservices como WSMTXCA WSBFEv1 y WSFEXv1
bull
Logotipo AFIP en las uacuteltimas actualizaciones (107q) se incluye el logotipo de AFIP (similar al quese incluye en las facturas emitidas por clave fiscal) Para que muestre la leyenda ComprobanteAutorizado debe establecerse el campo resultado = A y no debe ser un instalador dehomologacioacuten Proacuteximamente se agregaraacuten maacutes validaciones en este sentido (la constatacioacuten delcomprobante es responsabilidad de la aplicacioacuten que utilice el componente ver WSCDC) Verejemplos y formatos a continuacioacuten para mayor informacioacuten
bull
Requisitos formato de Facturaver httpwwwafipgovarafip259IIcap1bhtmbull
Interfaz COM PyFEPDFDLL
PyFEPDFDLL es una interfaz COM (AutomatizacionActiveX) similar a un Control OCX pero que nonecesita un formulario visual por lo que se puede usar desde desde cualquier lenguaje compatible enWindows (VB VFP Delphi etc) Tambieacuten puede utilizarce desde aplicaciones como MS Excel MS Accessetc
Aclaraciones PDF 87
Objeto COM PyFEPDF propiedades y meacutetodos
El objeto COM se crea invocando a CreateObject(PyFEPDF)
Las propiedades del objeto son
CUIT cuit del emisorbull Version versioacuten de la herramienta (ej 101b)bull InstallDir directorio de instalacioacutenbull
Los meacutetodos generales del objeto para crear una factura son los siguientes (ver ejemplo en VB a continuacioacutenpara maacutes detalles)
CrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vtacbte_nro imp_total imp_tot_conc imp_neto imp_iva imp_tribimp_op_ex fecha_cbte fecha_venc_pago fecha_serv_desdefecha_serv_hasta moneda_id moneda_ctz cae fecha_vto_caeid_impositivo nombre_cliente domicilio_cliente pais_dst_cmpobs_comerciales obs_generales forma_pago incoterms idioma_cbtemotivos_obs) recibe toda la informacioacuten del encabezado de una factura seguacuten la legislacioacutenvigente
bull
AgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed preciobonif iva_id imp_iva importe despacho) agrega un item de detalle de artiacuteculoAdicionalmente puede pasarse los paraacutemetros dato_a dato_b dato_c dato_d dato_edespacho tambieacuten es opcional
bull
AgregarIva(iva_id base_imp importe) agrega un subtotal de iva (por cada aliacutecuota)bull AgregarTributo(tributo_id Desc base_imp alic importe) agrega otrosimpuestos (uno por cada ingresos brutos retenciones y percepciones etc)
bull
AgregarCmpAsoc(tipo pto_vta nro) agrega un comprobante asociado a la facturabull
Una vez creada la factura con todos los items se debe especificar el formato mediante los siguientes meacutetodos(ver ejemplo en VB a continuacioacuten para maacutes detalles)
CargarFormato(archivo_csv) crea todos los campos del disentildeo de la factura (layout)leyendolos desde el archivo especificado
bull
AgregarCampo(nombre tipo x1 y1 x2 y2 font size bold italicunderline foreground background align text priority) agrega uncampo manualmente al disentildeo de la factura (layout)
bull
AgregarDato(campo valor pagina) con campo = nombre usado en plantilla el valorpara cada hoja y en pagina el nro de paacutegina o T todas P primera U ultima
bull
Luego se debe crear la plantilla que seraacute rellenada con los datos de la factura y por uacuteltimo se generaraacute ymostraraacute el PDF (ver ejemplo en VB a continuacioacuten para maacutes detalles)
CrearPlantilla(papel orientacion) crea una plantilla con el papel (A4 legal o letter)y orientacioacuten (portrait landscape)
bull
ProcesarPlantilla(num_copias lineas_max qty_pos) procesa los datos de lafactura dentro de la plantilla indicando la cantidad de copioas (1 original 2 duplicado 3triplicado)la cantidad de liacuteneas maacuteximas por paacutegina
bull
GenerarPDF(salida) genera el archivo PDF terminado con el nombre dado en salidabull
Objeto COM PyFEPDF propiedades y meacutetodos 88
MostrarPDF(salida imprimir) muestra el contenido del PDF generado (usando AdobeAcrobat Reader o similar) y opcionalmente lo enviacutea directo a la impresora
bull
AtributosPropiedades especiacuteficos de configuracioacuten
CUIT cuit del emisor (para generar el coacutedigo de barras)bull FmtCantidad formato numeacuterico para cantidades por ej 04 (4 decimales)bull FmtPrecio formato numeacuterico para precios unitarios por ej 02 (2 decimales)bull Locale configuracioacuten regional a utilizar para formatear importes y fechas por ejSpanish_Argentina1252 (Windows) es_ARutf8 (Linux)
bull
Atributos geneacutericos (similares a otros componentes)
Version versioacuten de la interfase (ej 107q)bull InstallDir directorio de instalacioacuten (ej CArchivos de ProgramaPyAfipWs)bull Excepcion Traceback mensaje de error y traza de rastreo (para depuracioacuten)bull LanzarExcepciones establece si se deben emitir errores al lenguaje de programacioacuten (habilitadopor defecto) o seraacuten controlados por el programa (revisando el atributo Excepcion luego de cadameacutetodo)
bull
Ver Formato de Intercambio PDF y los otros componentes a los webservices para informacioacuten adicional sobrecada campo
Ejemplo PyFEPDF en VB
A modo de demostracioacuten a continuacioacuten se detalla un ejemplo simple (lenguaje Visual Basic) comentando elfuncionamiento baacutesico de la interfaz para generacioacuten de Facturas Electroacutenicas en formato PDF
Crear objeto interface para generacioacuten de FE en PDFSet PyFEPDF = CreateObject(PyFEPDF)DebugPrint PyFEPDFVersionDebugPrint PyFEPDFInstallDir
CUIT del emisorPyFEPDFCUIT = 33693450239
establezco formatos (cantidad de decimales)PyFEPDFFmtCantidad = 04PyFEPDFFmtPrecio = 02
Datos del encabezado de la facturatipo_cbte = 1 Factura Apunto_vta = 40000 prefijocbte_nro = 12345678 nuacutemero de facturafecha = 20110327concepto = 3 datos del clientetipo_doc = 80 nro_doc = 30000000007nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16 coacutedigo para exportacioacutenid_impositivo = PJ54482221-l totales del comprobanteimp_total = 12200 imp_tot_conc = 000imp_neto = 10000 imp_iva = 2100imp_trib = 100 imp_op_ex = 000 imp_subtotal = 10000
Ejemplo PyFEPDF en VB 89
fecha_cbte = fecha fecha_venc_pago = fecha Fechas del periacuteodo del servicio facturadofecha_serv_desde = fecha fecha_serv_hasta = fechamoneda_id = PES moneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libremoneda_id = 012moneda_ctz = 05forma_pago = 30 diasincoterms = FOB termino de comercio exterior para exportacioacutenidioma_cbte = 1 idioma para exportacioacuten (no usado por el momento)motivos_obs = 11 motivo de observacioacuten (F136 y otros)
Coacutedigo de Autorizacioacuten Electroacutenica y fecha de vencimiento (para facturas tradicionales no imprimir el CAE ni coacutedigo de barras)cae = 61123022925855fecha_vto_cae = 20110320
Creo la factura (internamente en la interfaz)ok = PyFEPDFCrearFactura( _ concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fecha_vto_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivos_obs)
Parametros adicionales del encabezado
ok = PyFEPDFEstablecerParametro(localidad_cliente Hurlingham)ok = PyFEPDFEstablecerParametro(provincia_cliente Buenos Aires)
Leyenda Comprobante Autorizado (verificar previamente con WSCDC o similar)
ok = PyFEPDFEstablecerParametro(resultado A)
Agregar comprobantes asociados (si es una NCND)tipo = 19pto_vta = 2nro = 1234pyfepdfAgregarCmpAsoc(tipo pto_vta nro)
Agrego subtotales de IVA (uno por alicuota)iva_id = 5 coacutedigo para aliacutecuota del 21base_imp = 100 importe neto sujeto a esta aliacutecuotaimporte = 21 importe liquidado de ivaok = PyFEPDFAgregarIva(iva_id base_imp importe)
Agregar cada impuesto (por ej IIBB retenciones percepciones etc)tributo_id = 99 codigo para 99-otros tributosDesc = Impuesto Municipal Matanzabase_imp = 10000 importe sujeto a este tributoalic = 100 alicuota (porcentaje) de este tributoimporte = 100 importe liquidado de este tributook = PyFEPDFAgregarTributo(tributo_id Desc base_imp alic importe)
Agrego detalles de cada item de la facturau_mtx = 123456 unidadescod_mtx = 1234567890123 coacutedigo de barrascodigo = P0001 codigo interno a imprimir (ej articulo)
Ejemplo PyFEPDF en VB 90
ds = Descripcion del producto P0001qty = 2 cantidadumed = 7 coacutedigo de unidad de medida (ej 7 para unidades)precio = 100 precio neto (A) o iva incluido (B)bonif = 0 importe de descuentosiva_id = 5 coacutedigo para aliacutecuota del 21imp_iva = 42 importe liquidado de ivaimporte = 242 importe total del itemdespacho = Nordm 123456 numero de despacho de importacioacutenok = PyFEPDFAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
ds = Descuento generalumed = 99precio = -100imp_iva = -21importe = -121ok = PyFEPDFAgregarDetalleItem( ds 0 umed _ precio 0 iva_id imp_iva importe)
Agrego datos adicionales fijosok = PyFEPDFAgregarDato(logo PyFEPDFInstallDir + fpdfpng)ok = PyFEPDFAgregarDato(EMPRESA Empresa de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE1 Direccion de Prueba)ok = PyFEPDFAgregarDato(MEMBRETE2 Capital Federal)ok = PyFEPDFAgregarDato(ObservacionesGenerales1 Nota al pie1)
Cargo el formato desde el archivo CSV (opcional) (carga todos los campos a utilizar desde la planilla)ok = PyFEPDFCargarFormato(PyFEPDFInstallDir + facturacsv)
Agrego campos manualmente (opcional)nombre = prueba tipo = T T texto L lineas I imagen etcX1 = 50 Y1 = 150 X2 = 150 Y2 = 255 coordenadas (en milimetros)Font = Arial Size = 20 Bold = 1 Italic = 1 Underline = 1 tipo de letraforeground = 000000 background = FFFFFF colores de frente y fondoAlign = C Alineacioacuten Centrado Izquierda Derechaprioridad = 2 Orden Z menor prioridad se dibuja primero (para superposiciones)Text = iexclpruebaok = PyFEPDFAgregarCampo(nombre tipo X1 Y1 X2 Y2 _ Font Size Bold Italic Underline _ foreground background _ Align Text priority)
completo campos personalizados de la plantillaok = PyFEPDFAgregarDato(custom-nro-cli Cod123)ok = PyFEPDFAgregarDato(custom-pedido 1234)ok = PyFEPDFAgregarDato(custom-remito 12345)ok = PyFEPDFAgregarDato(custom-transporte Camiones Ej SRL)
Creo plantilla para esta factura (papel A4 vertical)papel = A4 o letter para carta legal para oficioorientacion = portrait o landscape (apaisado)ok = PyFEPDFCrearPlantilla(papel orientacion)num_copias = 3 original duplicado y triplicadolineas_max = 24 cantidad de linas de items por paacuteginaqty_pos = izq (cantidad a la izquierda de la descripcioacuten del artiacuteculo) Proceso la plantillaok = PyFEPDFProcesarPlantilla(num_copias lineas_max qty_pos) Genero el PDF de salida seguacuten la plantilla procesadasalida = facturapdfok = PyFEPDFGenerarPDF(salida)
Ejemplo PyFEPDF en VB 91
Abro el visor de PDF y muestro lo generado (es necesario tener instalado Acrobat Reader o similar)imprimir = False cambiar a True para que lo envie directo a la impresoraok = PyFEPDFMostrarPDF(salida imprimir)
Ver pyfepdfbas (ejemplo completo)
Herramienta PyFEPDFEXE por liacutenea de comando (consola)
La herramienta dispone de un programa PyFEPDFEXE que puede ser utilizado desde la consola y generarfacturas en formato PDF dado archivos de entada en texto o DBF
Los paraacutemetros son
--ayuda este mensajebull --licencia muestra la licencia del programabull --debug modo depuracioacuten (detalla y confirma las operaciones)bull --formato muestra el formato de los archivos de entradasalidabull --prueba genera y autoriza una factura de prueba (no usar en produccioacuten)bull --cargar carga un archivo de entrada (txt o dbf) con los datos del comprobantebull --grabar graba un archivo de salida (txt o dbf) con los datos de los comprobantesbull --pdf genera la imaacutegen de factura en PDFbull --dbf utiliza tablas DBF en lugar del archivo de entrada TXTbull
Ver receini para paraacutemetros de configuracioacuten
Ejemplos
Ver el formato de archivos de entrada
PYFEPDFEXE --formato
1
Realizar una prueba (genera facturatxt y facturapdf)
PYFEPDFEXE --prueba --mostrar --grabar
2
Realizar una prueba de DBF (genera encabezadbf detallesdbf ivadbfpermisodbf tributodbf cbteasocdbf datodbf y facturapdf)
PYFEPDFEXE --prueba --dbf --mostrar --grabar
3
Cargar archivo de entrada (leer facturatxt y generar facturapdf) mostrando la factura
PYFEPDFEXE --cargar --mostrar
4
Cargar tablas DBF (leer encabezadbf detallesdbf ivadbf permisodbftributodbf cbteasocdbf datodbf y generar facturapdf) imprimiendo la factura
PYFEPDFEXE --cargar --dbf --mostrar --imprimir
5
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYFEPDF_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico
Herramienta PyFEPDFEXE por liacutenea de comando (consola) 92
PYFEPDFEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Formato de Intercambio PDF
Para lenguajes donde no es posible utilizar objetos COM como en algunas versiones de COBOL sedesarrolloacute una interfase de texto para poder generar PDF con esta herramienta Adicionalmente laherramienta para generacioacuten de PDF soporta manejo por tablas DBF Estas tablas pueden ser generadas concualquier libreriacutea o aplicacioacuten compatible (dBase FoxPro Clipper incluso pueden ser abiertas con planillasde caacutelculo)
Los nombres de los campos y funcionamiento son los mismos entre los meacutetodos y archivos de texto perorecortados por compatibilidad con DBF
En este caso se puede utilizar un uacutenico archivo de texto (facturatxt) o varias tablas DBF (ver meacutetodorelacionado a la interfaz COM para maacutes informacioacuten) Los tipos de registros son
0 para encabezado (encabezadbf) - meacutetodo CrearFactura y EstablecerParametrobull 1 para detalles (detalle dbf) - meacutetodo AgregarDetalleItembull 2 para permisos (permisosdbf) - meacutetodo AgregarPermisobull 3 para comprobantes asociados (comprobadbf) - meacutetodo AgregarCmpAsocbull 4 para iva (ivadbf) - meacutetodo AgregarIvabull 5 para tributos (tributodbf) - meacutetodo AgregarTributobull 6 para datos opcionales (AFIP) -no utilizado-bull 9 para datos adicionales (datosdbf) -soacutelo PDF- - meacutetodo AgregarDatobull
A continuacioacuten se detalla el formato de cada registro y una breve descripcioacuten
Encabezado PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 1 tiporeg N(10) valor 0 (encabezado)
webservice Alfanumerico 6 2 webserviceC(6) wsfe wsbfe wsfex etc
fecha_cbte Alfanumerico 8 8 fechacbteC(8) ej 20100308
tipo_cbte Numerico 2 16 tipocbteN(20)
ej 1 para Facturas A (seguacuten tabla deparaacutemetros de AFIP Mercado Interno Exportacioacuten)
punto_vta Numerico 5 18 puntovtaN(40) ej 0001
cbte_nro Numerico 8 23 cbtenroN(80) ej 00000001
tipo_expo Numerico 1 31 tipoexpoN(10)
tipo de exportacioacuten (1 bienes 2 servicios 3otros)
permiso_existente Alfanumerico 1 32 permisoexiC(1) permiso de exportaioacuten S o N o nulo
pais_dst_cmp Numerico 3 33
Formato de Intercambio PDF 93
paisdstcmpN(30)
coacutedigo de paiacutes seguacuten tabla de paraacutemetros deAFIP (200 ARGENTINA 203 BRASIL212 ESTADOS UNIDOS etc)
nombre_cliente Alfanumerico 200 36 nombreclieC(200)
tipo_doc Numerico 2 236 tipodocN(20)
coacutedigo de tipo de documento seguacuten tablaAFIP WSFEv1 (80 CUIT)
nro_doc Numerico 11 238 nrodocN(110)
nuacutemero de documento (DNI CUIT etc) -ocorresponde a cuit_pais_cliente enexportacioacuten-
domicilio_cliente Alfanumerico 300 249 domicilioc M
id_impositivo Alfanumerico 50 549 idimpositiC(50)
categoriacutea frente al IVA (Resp InscriptoMonotributo etc) o identificacioacutenimpositiva en paiacutes destino (por ej CNJPRUC VAT ID etc)
imp_total Importe 153 599 imptotalN(153) importe total (con hasta 3 decimales)
imp_tot_conc Importe 153 614 imptotconcN(153)
importe conceptos no gravados (con hasta 3decimales)
imp_neto Importe 153 629 impnetoN(153)
importe neto sujeto a caacutelculo de IVA (conhasta 3 decimales)
impto_liq Importe 153 644 imptoliqN(153)
importe de IVA liquidado (con hasta 3decimales)
impto_liq_nri Importe 153 659 imptoliqnrN(153)
importe de IVA liquidado a RNI (con hasta 3decimales) -obsoleto-
imp_op_ex Importe 153 674 impopexN(153)
importe de operaciones exentas de IVA (conhasta 3 decimales)
impto_perc Importe 15 689 imptopercN(152)
importe de percepciones (con hasta 3decimales) -obsoleto ver tributos-
imp_iibb Importe 153 704 impiibbN(153)
mporte de ingresos brutos (con hasta 3decimales) -obsoleto ver tributos-
impto_perc_mun Importe 153 719 imptopercmN(153)
importe de percepciones municipales (conhasta 3 decimales) -obsoleto ver tributos-
imp_internos Importe 153 734 impinternoN(153)
importe de impuestos internos (con hasta 3decimales) -obsoleto ver tributos-
imp_trib Importe 153 749 imptribN(153)
importe total de impuestos y tributos (noincluye IVA)
moneda_id Alfanumerico 3 764 monedaidC(3)
coacutedigo de moneda seguacuten tabla de paraacutemetrosde AFIP (PES peso DOL doacutelares etc)
moneda_ctz Importe 106 767 monedactzN(106)
cotizacioacuten de la moneda (con hasta 6decimales)
obs_comerciales Alfanumerico 1000 777 obscomerci M observaciones comercialesobs_generales Alfanumerico 1000 1777 obsgeneral M observaciones generales
forma_pago Alfanumerico 50 2777 formapagoC(50)
descripcioacuten de la forma de pago (ejEfectivo)
incoterms Alfanumerico 3 2827 teacutermino de comercio exterior (ej FOB)
Encabezado PDF 94
incotermsC(3)
incoterms_ds Alfanumerico 20 2830 incotermsdC(20)
descripcioacuten de termino de comercio exterior(Free on board)
idioma_cbte Alfanumerico 1 2850 idiomacbteC(1)
idioma del comprobante seguacuten tabla deparaacutemetros de AFIP (1 espantildeol etc)
zona Alfanumerico 5 2851 zona C(5) -no utilizado-
fecha_venc_pago Alfanumerico 8 2856 fechavencpC(8)
fecha de vencimiento del pago (soloservicios)
presta_serv Numerico 1 2864 prestaservN(10) prestacioacuten de servicio (S o N)
fecha_serv_desde Alfanumerico 8 2865 fechaservdC(8) fecha de inicio del servicio facturado
fecha_serv_hasta Alfanumerico 8 2873 fechaservhC(8) fecha de finalizacioacuten del servicio facturado
cae Alfanumerico 14 2881 cae C(14) Coacutedigo de Autorizacioacuten Electroacutenicootorgado por AFIP
fecha_vto Alfanumerico 8 2895 fechavto C(8) fecha de vencimiento del CAE otorgado porAFIP
resultado Alfanumerico 1 2903 resultado C(1) resultado A aceptado R rechazado(respuesta AFIP)
reproceso Alfanumerico 1 2904 reprocesoC(1)
S si hubo reprocesamiento N si esprocesamiento original (respuesta AFIP)
motivos_obs Alfanumerico 1000 2905 motivosobs M
coacutedigo o descripcioacuten del motivo de rechazo uobservacioacuten del comprobante ej 11 -numeracioacuten 02 cuit no autorizada (respuestaAFIP)
id Numerico 15 3905 id N(150) identificador secuencial de la factura (usar 0)
telefono_cliente Alfanumerico 50 3920 telefonoclC(50)
localidad_cliente Alfanumerico 50 3970 localidadcC(50)
provincia_cliente Alfanumerico 50 4020 provinciacC(50)
formato_id Numerico 10 4070 formatoidN(100) -no utilizado-
email Alfanumerico 100 4080 email C(100) destinatario del PDFpdf Alfanumerico 100 4180 pdf C(100) ruta y nombre de archivo PDF a generar
err_code Alfanumerico 6 4280 errcode C(6) coacutedigo de error informado por AFIP (EjfexerrorErrCode=505)
err_msg Alfanumerico 1000 4286 errmsg M mensaje de error informado por AFIP (EjfexerrorErrMsg=Error de Lockeo)
Dato_adicional1 Alfanumerico 30 5286 datoadic01C(30) datos extra optativos
Dato_adicional2 Alfanumerico 30 5316 datoadic02C(30) datos extra optativos
Encabezado PDF 95
Dato_adicional3 Alfanumerico 30 5346 datoadic03C(30) datos extra optativos
Dato_adicional4 Alfanumerico 30 5376 datoadic04C(30) datos extra optativos
Campos extra (por compatibilidad con otras herramientas y formatos)
Nombre Tipo Long Pos DBF Descripcioacuten
descuento Importe 153 5405 descuentoN(153)
importe general de descuento (no recomendadousar descuento por itemdetalle)
cbt_desde Numerico 8 5420 cbtdesdeN(80)
nuacutemero de comprobante inicial del lote (usarcbte_nro)
cbt_hasta Numerico 8 5428 cbthastaN(80)
nuacutemero de comprobante final del lote (usarcbte_nro)
concepto Numerico 1 5436 conceptoN(10)
1 productos 2 servicios 3 productos + servicios(ver presta_serv)
no_usar Importe 153 5437 nousarN(153) -reservado-
imp_iva Importe 153 5452 impivaN(153) iacutedem impto_liq
emision_tipo Alfanumerico 4 5467 emisiontipC(4) CAE o CAEA
imp_subtotal Importe 153 5471 impsubtotaN(153)
se calcula internamente si no es pasado imp_neto+ imp_tot_conc + imp_op_ex - descuento(subtotal sin IVA ni otros tributos)
cat_iva Numerico 2 5486 cativa N(20) -reservado-NOTA estos campos pueden no utilizarse o tener el mismo valor que los campos originales estaacuten paracontemplar casos especiales y en general no deben utilizarse
Detalle Item PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 1
codigo Alfanumerico 30 2 codigoC(30) coacutedigo del artiacuteculo
qty Importe 122 32 qty N(122) cantidad (con 2 decimales)
umed Numerico 2 44 umed N(20) coacutedigo de unidad de medida seguacuten tabla de paraacutemetrosAFIP WSMTXCA (ej 1 - kg)
precio Importe 123 46 precioN(123) importe unitario (con hasta 3 decimales)
importe Importe 143 58 importeN(143) importe subtotal (con hasta 3 decimales)
iva_id Numerico 5 72 ivaid N(50) coacutedigo de aliacutecuota de IVA seguacuten tabla de paraacutemetrosAFIP WSFEv1 WSMTXCA (ej 5 - IVA RI Tasa
Detalle Item PDF 96
General 21 )
ds Alfanumerico 4000 77 ds M descripcioacuten del artiacuteculo (usar ltbrgt para salto delinea)
ncm Alfanumerico 15 4077 ncm C(15) coacutedigo habilitado del Nomenclador Comuacuten deMercosur -soacutelo WSBFEv1-
sec Alfanumerico 15 4092 sec C(15) coacutedigo habilitado de la Secretariacutea de Comercio-reservado-
bonif Importe 15 4107 bonifN(152)
importe de descuento (con 2 decimales) para estearticulo
imp_iva Importe 15 4122 impivaN(152) importe liquidado de IVA para este articulo
despacho Alfanumerico 20 4137 despachoC(20) -soacutelo importacioacuten-
u_mtx Numerico 10 4157 umtxN(100) unidades MTX
cod_mtx Alfanumerico 30 4167 codmtxC(30) coacutedigo de barras MTX
dato_a Alfanumerico 15 4197 datoa C(15) dato extra optativodato_b Alfanumerico 15 4212 datob C(15) dato extra optativodato_c Alfanumerico 15 4227 datoc C(15) dato extra optativodato_d Alfanumerico 15 4242 datod C(15) dato extra optativodato_e Alfanumerico 15 4257 datoe C(15) dato extra optativoNota en los campos numeacutericos (archivo de texto) para usar maacutes de los decimales especificados de manerapredeterminada indicar el punto explicitamente por ej cantidad = 0123456 para 6 decimales encantidad En la estructura del DBF cada programa puede cambiar la cantidadad de decimales
Importante para Facturas B de manera similar a las facturas tradicionales el IVA no debe estardiscriminado (enviar el precio unitario y subtotal final IVA incluido) y se debe enviar NULL en imp_iva
IVA PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 4
iva_id Numerico 5 2 ivaid N(50) tipo de aliacutecuota (ver tablas de paraacutemetros deWSFEv1 por ej 5 para 21)
base_imp Importe 153 7 baseimpN(153)
base imponible (neto gravado) para estaaliacutecuota
importe Importe 153 22 importe N(153) importe IVA liquidado para esta aliacutecuotaTributo PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea) -usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 valor 5
IVA PDF 97
tiporegN(10)
tributo_id Numerico 5 2 tributoidN(50)
tipo de tributo (ver tablas de paraacutemetros de WSFEv1por ej 2 para impuestos provinciales)
desc Alfanumerico 100 7 desc C(100) descripcioacuten (por ej IIBB prov de BsAs)
base_imp Importe 153 107 baseimpN(153) base imponible para este impuesto (pude ser 0 nulo)
alic Importe 15 122 alic N(152) aliacutecuota (porcentaje por ej 3)
importe Importe 153 137 importeN(153) importe liquidado para este impuesto
Comprobante Asociado PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (claveforaacutenea) - usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporeg N(10) valor 3cbte_tipo Numerico 3 2 cbtetipo N(30) tipo de comprobante asociado (iacutedem encabezado)
cbte_punto_vta Numerico 4 5 cbtepuntovN(40) punto de venta
cbte_nro Numerico 8 9 cbtenro N(80) nuacutemero de comprobantePermisos PDF
Nombre Tipo Long Pos DBF Descripcioacuten
id Numerico id N(150) identificador secuencial de la factura (clave foraacutenea)- usar 0 no presente en el TXT -
tipo_reg Numerico 1 1 tiporegN(10) valor 2
id_permiso Alfanumerico 16 2 idpermisoC(16)
identificador del permiso de exportacioacuten ej99999AAXX999999A
dst_merc Numerico 3 18 dstmercN(30) coacutedigo de paiacutes de destino seguacuten tabla de AFIP
Datos PDF
Nombre Tipo Long Pos DBF Descripcioacutentipo_reg Numerico 1 16 tiporeg N(10) valor 9campo Alfanumerico 30 17 campo C(30) nombre del campo en la plantilla PDFvalor Alfanumerico 1000 47 valor M contenido para el campo en la plantilla PDFpagina Alfanumerico 3 1047 pagina C(3) P primera U ultima T todasEste tipo de registro es opcional resultados similares se pueden lograr con el archivo de configuracioacuten(receini seccioacuten [PDF]) meacutetodo del Componente AgregarDato o directamente con el disentildeador visual(modificando la plantilla facturacsv)
Configuracioacuten PyFEPDF RECEINI
De manera similar a las otras herramientas PyFEPDF puede configurarse por el archivo de configuracioacutenRECEINI con las siguientes opciones predeterminadas
Tributo PDF 98
[FACTURA]ARCHIVO=tipoletranumeroFORMATO=facturacsvDIRECTORIO=PAPEL=letterORIENTACION=portraitDIRECTORIO=SUBDIRECTORIO=LOCALE=Spanish_Argentina1252FMT_CANTIDAD=06FMT_PRECIO=03CANT_POS=izqENTRADA=facturatxtSALIDA=facturapdf
[PDF]LOGO=fpdfpngEMPRESA=Empresa de PruebaMEMBRETE1=Direccion de PruebaMEMBRETE2=Capital FederalCUIT=CUIT 30-00000000-0IIBB=IIBB 30-00000000-0IVA=IVA Responsable InscriptoINICIO=Inicio de Actividad 01042006
[DBF]Encabezado = encabezadbfTributo = tributodbfIva = ivadbfComprobante Asociado = cbteasocdbfDetalle = detallesdbfPermiso = permisodbfDato = datodbf
Seccioacuten [FACTURA]
Controla la generacioacuten del PDF (si no se especifica campo PDF en tabla encabezado)
ARCHIVO nombre de archivo PDF a generar por ej incluyendo tipoletranumerobull FORMATO formato del PDF a generar por ej en planilla facturacsvbull DIRECTORIO directorio donde almacenar los archivos PDFbull SUBDIRECTORIO nombre de la carpeta a generar (una por diacutea de manera predeterminada)bull LINEAS_MAX cantidad de lineas para el detalle (artiacuteculos) por defecto 24bull PAPEL legal A4 letterbull ORIENTACION portrait landscape (apaisada)bull LOCALE configuracioacuten regional (Spanish_Argentina1252 en Windows es_ARutf8 en Linux)bull FMT_CANTIDAD formato de cantidad (04 para 4 decimales)bull FMT_PRECIO formato de precio unitario (03 para 3 decimales)bull CANT_POS posicioacuten de la columna cantidad (izq o der)bull ENTRADA nombre del archivo de intercambio (facturatxt)bull SALIDA nombre del archivo a generar (dejar en blanco para generar uno distinto seguacuten laconfiguracioacuten ARCHIVO)
bull
COPIAS cantidad de copias en el PDF (Original Duplicado Triplicado etc)bull
Configuracioacuten PyFEPDF RECEINI 99
Seccioacuten [PDF]
Controla campos del PDF a personalizar (si no se especifican los campo texto en tabla formato del PDF)
LOGO archivo con imagen logotipo por ej serpientepngbull EMPRESA ej Empresa de Pruebabull MEMBRETE1 ej Direccion de Pruebabull MEMBRETE2 ej Capital Federalbull CUIT CUIT 20-26756539-3bull IIBB IIBB 20-26756539-3bull IVA IVA Responsable Inscriptobull INICIO Inicio de Actividad 01042006bull
Seccioacuten [DBF]
Configuracioacuten referente a las tablas DBF por cada una se especifica la ruta y el nombre de archivo ej
Encabezado = encabezadbfbull Tributo = tributodbfbull Iva = ivadbfbull Comprobante Asociado = cbteasocdbfbull Detalles = detallesdbfbull Dato = datodbfbull
Campo Subtotal
Dado que en general la columna importe deberiacutea mostrar Subtotal cIVA por similitud con el PDF quegenera AFIP por comprobantes en linea por disentildeo (actualizacioacuten 108b)
Si es A o M se imprime el subtotal SIN IVAbull Si es B o C se imprime el subtotal CON IVAbull
En el caso de factura A debe sumar los items sin el IVA ya que en la ultima hoja se le suma el IVA alsubtotal
Igualmente el campo subtotal podriacutea sobre-escribirse utilizando el meacutetodo AgregarDato(campovalor pagina) o el tipo de registro para datos adicionales En campo = subtotal el valor a imprimiren cada hoja y pagina el nro de paacutegina (T todas P primera U ultima) Se podriacutea agregar el dato paratodas las paginas vacio y para la uacuteltima con el valor que sea necesario (en ese orden)
Disentildeador Visual PyFEPDF
La herramienta incluye el progama designerexe para modificar visualmente los disentildeos de factura
Los archivos de entrada estaacuten son planillas CSV describiendo el disentildeo Al abrilos el disentildeador muestra laplantilla con los elementos donde se ubicaraacuten los futuros valores de cada factura
La barra de herramientas cuenta con botones para
Abrir guardar e imprimir (vista previa) las plantillasbull
Seccioacuten [PDF] 100
Agregar eliminar y duplicar elementosbull Buscar elementos por nombre o por textobull
Sobre un elemento con doble click izquierdo se abre un dialogo para editar el texto y con click derecho seabre un dialogo con la ventana de propiedades Es posible seleccionar muacuteltiples elementos manteniendopresionado shift y click izquierdo Para mover los elementos se puede usar las teclas de flechas o arrastrar loselementos
Ver a continuacioacuten los tipos de elementos y su definicioacuten
A modo de ejemplo se muestra un pantallazo del Disentildeador Visual con el elemento logo seleccionadoeditando sus propiedades
Para ejecutarlo simplemente ir al directorio de la interfaz y correr designerexe
Tipos de elementos para PyFEPDF
Para el disentildeo del PDF es posible establecer los siguientes tipos de campo (elementos graacuteficos)
Texto (T) con tipo de letra (fuente) tamantildeo formato (italico negrita subrayado) tamantildeo yalineacioacuten
bull
Liacuteneas (L) y Cuadros (B)bull Imaacutegenes (I) en formato PNG o JPGbull Coacutedigo de Barras (CB) en formato Entrelazado 2 de 5bull Codigo QR (I) (Requerido por AFIP a partir del 01032021 ver cronograma)bull
Definicioacuten de elementos para PyFEPDF
Las columnas de la planilla (facturacsv) o estructura de la tabla formato para definir los elementos graacuteficoses
name (alfanumeacuterico) nombre del campobull type (alfanumeacuterico) tipo del campo T L I B CBbull x1 (numeacuterico) coordenada horizontal izquierda (en mm)bull y1 (numeacuterico) coordenada vertical superior (en mm)bull x2 (numeacuterico) coordenada horizontal derecha (en mm)bull y2 (numeacuterico) coordenada vertical inferior (en mm)bull font (alfanumeacuterico) nombre de la tipografiacutea (fuente)bull size (numeacuterico) tamantildeo en puntos del textobull bold (verdaderofalso) estilo negrita para el texto (1 o 0)bull italic (verdaderofalso) estilo cursiva (itaacutelica) para el texto (1 o 0)bull underline (verdaderofalso) estilo subrayado para el texto (1 o 0)bull foreground (numeacuterico) color RGB de dibujobull backgroud (numeacuterico) color RGB de relleno del fondo (si aplica al elemento)bull align (alfanumeacuterico) alineacioacuten I izquierda D derecha C centradobull text (alfanumeacuterico) texto estaacutetico o foacutermulabull priority (numeacuterico) orden z en el que se dibujan los elementos (a menor prioridad se dibuja primero)bull
Estilos HTML Adicionalmente los estilos negrita itaacutelica y subrayado pueden establecerse en tiempo deejecucioacuten encerrando todo el texto con el tag html correspondiente (en el orden indicado) Ej
Disentildeador Visual PyFEPDF 101
ltBgttexto en negritaltBgtbull ltIgttexto en cursivaltIgtbull ltUgttexto subrayadoltUgtbull ltBgtltIgtltUgttexto en negrita cursiva y subrayadoltUgtltIgtltBgtbull
PyI25 Generador de Coacutedigos de Barras
Utilitario PYI25EXE (py25py) para generar los coacutedigos de barras Interleaved 2 of 5 (Entrelazado 2 de 5)seguacuten Resolucioacuten General 170204
Ver Descargas para descargar el instalador
Los datos a consignar son (ver RG170204 Art 1 Anexo 1)
Clave Unica de Identificacioacuten Tributaria (CUIT) del emisor de la factura (11 caracteres)bull Coacutedigo de tipo de comprobante (3 caracteres)bull Punto de venta (5 caracteres)bull Coacutedigo de Autorizacioacuten de Electroacutenica (CAE) o Coacutedigo de Autorizacioacuten de Impresioacuten (CAI) (14caracteres)
bull
Fecha de vencimiento del CAE CAI (8 caracteres)bull Diacutegito verificador (1 caraacutecter) ver rutinabull
El utilitario genera una imaacutegen en formato PNG o JPG funciona tanto de liacutenea de comando consola (DOS)como por interfaz COM (automatizacioacuten DLL similar a OCX) y es uacutetil para facturas electroacutenicas otradicionales (autoimpresores o imprentas)
Imaacutegen de Ejemplo de Coacutedigo de Barras para CAE
Importante De generar imaacutegenes para imprimir es recomendado respetar la resolucioacuten de la impresora (Laacutesero Chorro de tinta no pueden usarse matriz de punto) por ej con una resolucioacuten por lo menos tres vecesmayor que la utilizada en pantalla
Nota Nuestro generador de PDF ya contempla generar los coacutedigos de barra para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PYI25EXE (utilitario por linea de comando)
Opciones
--barras a continuacioacuten se indica el coacutedigo de barras en formato numeacutericobull --noverificador deshabilitar caacutelculo de digito verificadorbull --archivo a continuacioacuten se indica el nombre del archivo de salidabull
Ejemplo de uso (generar el archivo pruebapng)
PYI25EXE --barras 202675653930240016120303473904220110528 --mostrar --archivo pruebapng
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYI25_cliEXE queesta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primer como
Definicioacuten de elementos para PyFEPDF 102
segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and is startedautomatically(or maybe you want register or unregister) dado que el ejecutable geneacuterico PYI25EXEpuede estar compilado para ser registrado en Windows (componente para VBVFP y similares)
Objeto PYI25 (interfaz COM)
Objeto PyI25 (registrar PYI25DLL)
Meacutetodos
DigitoVerificadorModulo10(codigo) recibe el codigo de barras en formato numeacutericodevuelve el diacutegito verificador en base 10
bull
GenerarImagen(codigo archivo anchobase ancho alto extension )recibe el codigo de barras en formato numeacuterico nombre de archivo de salida tamantildeos y formato deimagen (PNG o JPEG) y genera el codigo de barras especificado
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyI25 As Object
Set PyI25 = CreateObject(PyI25)
cuit tipo_cbte punto_vta cae fch_venc_caebarras = 202675653930240016120303473904220110529 calculo digito verificadorbarras = barras + PyI25DigitoVerificadorModulo10(barras)
genero imagen en png aspecto 1x para ver en pantalla o por mailok = PyI25GenerarImagen(barras Cbarraspng)
formato en jpg aspecto 3x maacutes ancho para imprimir o incrustarok = PyI25GenerarImagen(barras cbarrasjpg 9 0 90 JPEG)
PyQR Generador de Coacutedigos QR
Utilitario PYQREXE (pyqrpy) para generar los coacutedigos QR seguacuten RG48922020
Cronograma de Implementacioacuten
Para responsables inscriptos en el impuesto al valor agregado que hayan efectuado operaciones (gravadasexentas y no gravadas) declaradas en el impuesto durante el antildeo calendario 2020 por un importe total neto deimpuestos y tasas
11 Superior a PESOS DIEZ MILLONES ($10000000-) desde el 1 de marzo de 2021
12 Superior a PESOS DOS MILLONES ($2000000-) e inferior o igual a PESOS DIEZ MILLONES ($10000000-) desde el 1 de abril de 2021
13 Superior a PESOS QUINIENTOS MIL ($500000-) e inferior o igual a PESOS DOS MILLONES ($2000000-) desde el 1 de mayo de 2021
PYI25EXE (utilitario por linea de comando) 103
2 Para el resto de los responsables inscriptos en el impuesto al valor agregado sujetos exentos ante dichogravamen y pequentildeos contribuyentes inscriptos en el Reacutegimen Simplificado (Monotributo) a partir del 1junio de 2021
Los datos a consignar son (ver QR especificaciones)
Fecha de emisioacutenbull CUIT del emisorbull Punto de ventabull Tipo de Comprobantesbull Nuacutemero de Comprobantebull Importe totalbull Monedabull Cotizacioacutenbull Tipo Documento Receptor (de corresponder)bull Nuacutemero de Documento de Receptor (de corresponder)bull Coacutedigo del Tipo de Autorizacioacutenbull Coacutedigo de Autorizacioacutenbull
Ejemplo Visual Basic script pyafipwsblobdevelopejemplospyqrpyqrvbs
Ejemplo Visual Basic claacutesico
Dim pyqr As Object
Set pyqr = CreateObject(PyQR)
Establecer tipo de imagen (PNG o JPEG)PyQRExtension = JPEG
Generar un nombre de archivo temporal para la imagenarchivo = pyqrCrearArchivo
Alternativo Especificar ubicacioacuten y extensioacutenpyqrarchivo = CQRgeneradopyqrjpg
DebugPrint archivo
ver = 1fecha = 2020-10-13cuit = 30000000007pto_vta = 10tipo_cmp = 1nro_cmp = 94importe = 12100moneda = DOLctz = 65tipo_doc_rec = 80nro_doc_rec = 20000000001tipo_cod_aut = Ecod_aut = 70417054367476
genero imagen en png con el codigo qr
url = pyqrGenerarImagen(ver fecha cuit pto_vta tipo_cmp nro_cmp _ importe moneda ctz tipo_doc_rec nro_doc_rec _ tipo_cod_aut cod_aut)
PyQR Generador de Coacutedigos QR 104
DebugPrint url
Paraacutemetros por liacutenea de comandos
--datos recibe los datos a procesar version fecha cuit pto_vta tipo_cmp nro_cmp importemoneda ctz tipo_doc_rec nro_doc_rec tipo_cod_aut cod_aut
bull
--prueba genera un QR de muestrabull --archivo permite especificar una ruta (de lo contrario usa un archivo temporal)bull --mostrar abre el archivo para visualizar la imagenbull
Ejemplo por liacutenea de comando
Linux
python pyqrpy --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
Windows
pyqrexe --archivo qrjpg --datos 1 2020-10-13 30000000007 10 1 94 12100 PES 1 80 20000000001 E 70417054367476
En windows usar pyqrexe en vez de python pyqrpy
Imaacutegen de Ejemplo de Coacutedigo QR
PyQR Generador de Coacutedigos QR 105
Nota Nuestro generador de PDF ya contempla generar los coacutedigos QR para cualquier resolucioacuten deimpresioacuten y pantalla no es necesario generar imaacutegenes
PyEmail Envio de correo electroacutenico
Herramienta para enviar correos electroacutenicos incluyendo por ej adjunto PDF de con factura electroacutenica
Soporta servidores SMTP con y sin autenticacioacuten
Proacuteximamente soporte para correos con contenido HTML e imagenes de factura embebida
PyEmail Envio de correo electroacutenico 106
PYEMAILEXE utilitario de correo
Para utilizar esta herramienta debe tener configurado la seccioacuten [EMAIL] en el receini
Ejemplo desde linea de comando
PYEMAILEXE motivo reingartgmailcom mensaje FacturaA0002-00117826pdf
NOTA dependiendo de la compilacioacuten del instalador puede ser requerido ejecutar PYEMAIL_cliEXEque esta preparado para ser ejecutado con interfaz de liacutenea de comandos (consolaterminal tanto en primercomo segundo plano) de lo contrario podraacute aparecer el mensaje This program host a COM object and isstarted automatically(or maybe you want register or unregister) dado que el ejecutable geneacutericoPYEMAILEXE puede estar compilado para ser registrado en Windows (componente para VBVFP ysimilares)
Objeto PyEmail (interfaz COM)
Objeto PyEmail (registrar PyEmailDLL)
Meacutetodos
Conectar(servidor usuario clave) recibe el nombre del servidor a conectarse usuario y contrasentildea(opcional)
bull
Enviar(remitente motivo destinatario mensaje archivo) envia el correo electroacutenico con los datosproporcionados
bull
Ejemplo de uso (interfaz COM desde visual Basic)
Dim PyEmail As Object
Set PyEmail = CreateObject(PyEmail)
Primer paso conexioacuten al servidor (por unica vez)servidor = mailsistemasagilescomarusuario = norespondernsiscomarclave = 1238478puerto = 465ok = PyEmailConectar(servidor usuario clave)
Envio el o los correos (repetir por cada FE)remitente = norespondersistemasagilescomardestinatario = marianosistemasagilescomarmensaje = Se envia factura electronica adjuntaarchivo = CFACTURAPDF
ok = PyEmailEnviar(remitente motivo destinatario mensaje archivo)
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361)
Con la interfaz se provee un utilitario para generar los archivos requeridos por el aplicativo SIRED (SIAP) dela Resolucioacuten General 136102 referente al almacenamiento digital de los comprobantes emitidos (Libro
PYEMAILEXE utilitario de correo 107
Ventas Detalle y Cabeceras de Factura)
El formato de entrada es una planilla csv similar al PyRece respetando los tipos de datos y coacutedigos requeridospor los webservices con las siguientes columnas tipo_cbte punto_vta cbt_numero fecha_cbte tipo_docnro_doc imp_neto impto_liq imp_total cae fecha_vto nombre
Ejemplo de uso
CD CPYAFIPWSRG1361EXE planillacsv
Generaraacute los archivos
VENTAS_200902txtbull CABECERA_200902txtbull DETALLE_200902txtbull
Para maacutes informacioacuten ver RG136102 de AFIP
Disentildeo de registro (archivos de texto)bull Guia Temaacuteticabull
Ejemplo
Ejemplo en Visual Basic claacutesico
sired = CreateObject(SIRED)
creo una factura de ejemplotipo_cbte = 2punto_vta = 4000fecha = 20150721concepto = 3tipo_doc = 80nro_doc = 30000000007cbte_nro = 12345678imp_total = 12200imp_tot_conc = 300imp_neto = 10000imp_iva = 2100imp_trib = 100imp_op_ex = 200imp_subtotal = 10000fecha_cbte = fechafecha_venc_pago = fecha Fechas del periacuteodo del servicio facturado (solo si concepto = 1)fecha_serv_desde = fechafecha_serv_hasta = fechamoneda_id = PESmoneda_ctz = 1000obs_generales = Observaciones Generales texto libreobs_comerciales = Observaciones Comerciales texto libre
nombre_cliente = Joao Da Silvadomicilio_cliente = Rua 76 km 345 Alagoaspais_dst_cmp = 16
Reacutegimen de Almacenamiento de Duplicados Digitales(RG1361) 108
id_impositivo = Responsable Inscriptoforma_pago = 30 diasincoterms = FOBidioma_cbte = 1motivo = 11
cae = nullfch_venc_cae = null
siredCrearFactura(concepto tipo_doc nro_doc tipo_cbte punto_vta _ cbte_nro imp_total imp_tot_conc imp_neto _ imp_iva imp_trib imp_op_ex fecha_cbte fecha_venc_pago _ fecha_serv_desde fecha_serv_hasta _ moneda_id moneda_ctz cae fch_venc_cae id_impositivo _ nombre_cliente domicilio_cliente pais_dst_cmp _ obs_comerciales obs_generales forma_pago incoterms _ idioma_cbte motivo)
agrego comprobantes asociado
tipo = 91pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)tipo = 5pto_vta = 2nro = 1234siredAgregarCmpAsoc(tipo pto_vta nro)
tributo_id = 99desc = Impuesto Municipal Matanzabase_imp = 10000alic = 100importe = 100siredAgregarTributo(tributo_id desc base_imp alic importe)
iva_id = 5 21base_imp = 100importe = 21siredAgregarIva(iva_id base_imp importe)
u_mtx = 123456cod_mtx = 1234567890123codigo = P0001ds = Descripcion del producto P0001qty = 100umed = 7precio = 10000bonif = 000iva_id = 5imp_iva = 2100importe = 12100despacho = uNordm 123456siredAgregarDetalleItem(u_mtx cod_mtx codigo ds qty umed _ precio bonif iva_id imp_iva importe despacho)
siredAgregarDato(prueba 1234)
id_factura = siredGuardarFactura()
siredEstablecerParametro(cae 61123022925855)siredEstablecerParametro(fch_venc_cae 20110320)
Ejemplo 109
siredEstablecerParametro(motivo_obs )ok = siredActualizarFactura(id_factura)
Otros Servicios WEB y herramientas similares de AFIP
Constatacioacuten de Comprobantes
WSCDC es la Interfaz para los Servicios Web para verificar en forma dinaacutemica si los comprobantes recibidosse encuentran autorizados por la AFIP Ver manual especiacutefico en ConstatacionComprobantes
Padroacuten de Contribuyentes
Herramienta para consultar el archivo completo de la condicioacuten tributaria de los contribuyentes y responsables(RG1817) Ver manual especiacutefico en PadronContribuyentesAFIP
Coacutedigo de Trazabilidad de Granos
WSCTGv2 es la Interfaz para generar Coacutedigo de Trazabilidad de Granos AFIP (RG2806 RG3113 RG3493)Ver manual especiacutefico en CodigoTrazabilidadGranos
Liquidacioacuten Primaria de Granos
WSLPG es la Interfaz para autorizar y ajustar Liquidaciones Primarias de Granos (RG34192012) Vermanual especiacutefico en LiquidacionPrimariaGranos
Consulta de Operaciones Cambiarias
WSCOC es la Interfaz para Consultas de Operaciones (moneda extranjera) Ver manual enConsultaOperacionesCambiarias
wDigDepFiel Depositario Fiel
Servicio Web de AFIP para Aviso de Recepcioacuten y Aceptacioacuten de la Digitalizacioacuten de Documentos por partede los Prestadores de Servicios de Archivos y Digitalizacioacuten (PSAD) y Aviso de Digitalizacion deDocumentos por parte de los Despachantes o de los Prestadores de Servicios de Archivos y Digitalizacioacuten(PSAD) -
Sujetos Alcanzados ver Resolucioacuten General 25702009
Actualmente la interfaz expone las funcionalidades de este webservice
Aviso de Digitalizacioacutenbull Aviso de Recepcioacuten y Aceptacioacutenbull Meacutetodo Dummy para verificacioacuten de funcionamientobull
Ejemplo Interfaz COM wDigDepFiel
De igual manera que el resto de los servicios web el web service de depositario fiel puede ser invocado desdelenguajes visuales y no visuales (en windows) utilizando la interfaz COM
Otros Servicios WEB y herramientas similares de AFIP 110
Ejemplo en Visual Basic (similar para Visual FoxPro Delphi etc)
Crear objeto interface Web Service de Factura Electroacutenica de ExportacioacutenSet wDigDepFiel = CreateObject(wDigDepFiel) Setear tocken y sing de autorizacioacuten (pasos previos)wDigDepFieltoken = WSAAtokenwDigDepFielsign = WSAAsign
CUIT del emisor (debe estar registrado en la AFIP)wDigDepFielcuit = 20267565393
Conectar al Servicio Web de Depositario Fiel (homologacioacuten)ok = wDigDepFielConectar(httpstestdiaafipgovarDiaWswDigDepFielwDigDepFielasmx)
Llamo a un servicio nulo para obtener el estado del servidor (opcional)wDigDepFielDummyDebugPrint appserver status wDigDepFielAppServerStatusDebugPrint dbserver status wDigDepFielDbServerStatusDebugPrint authserver status wDigDepFielAuthServerStatus
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393codigo = 000 carpeta completa 001 carpeta adicional FechaHora en formato ISO 2010-06-07T002351750000fecha_hora_acept = Format(Now() yyyy-MM-dd) amp T amp _ Format(Now() hhmmss) amp 000000ticket = 1234errCode = wDigDepFielAvisoRecepAcept(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie _ codigo fecha_hora_acept ticket)DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoRecepAcept Coacutedigo Error amp wDigDepFielCodError
tipo_agente = PSAD DESProl = EXTEnro_legajo = 0000000000000000 1234567890123456cuit_declarante = 20267565393cuit_psad = 20267565393cuit_ie = 20267565393cuit_ata = 20267565393codigo = 000 carpeta completa 001 carpeta adicionalticket = 1234url = httpwwwexamplecomhashing = db1491eda47d78532cdfca19c62875aade941dc2
inicializo aviso limpio datos (familias)wDigDepFielIniciarAvisocodigo = 02cantidad = 1wDigDepFielAgregarFamilia codigo cantidadcodigo = 03cantidad = 3wDigDepFielAgregarFamilia codigo cantidad
cantidad_total = 4
Ejemplo Interfaz COM wDigDepFiel 111
errCode = wDigDepFielAvisoDigit(tipo_agente rol _ nro_legajo cuit_declarante cuit_psad cuit_ie cuit_ata _ codigo url ticket hashing cantidad_total)
DebugPrint wDigDepFielXmlResponse
MsgBox wDigDepFielDescError vbInformation _AvisoDigit Coacutedigo amp wDigDepFielCodError
Otros Servicios Web relacionados de otros organismos
Remito Electroacutenico (COT ARBA)
Interfaz para Servicio Web Coacutedigo de Operaciones de Traslado (COT) Remito Electronico correspondienteal articulo 41 del Coacutedigo Fiscal que establece la obligacioacuten de amparar el traslado o transporte de bienes en elterritorio de la provincia de Bs As Ver manual especiacutefico en RemitoElectronicoCotArba
Trazabilidad de Medicamentos (ANMAT)
Interfaz para Servicio Web Coacutedigo de Trazabilidad de Medicamentos (SOAP) correspondiente a laResolucioacuten 4352011 del Ministerio de Salud y Disposicioacuten 36832011 de ANMAT Sistema Nacional deTrazabilidad de Medicamentos que deberaacuten implementar las personas fiacutesicas o juriacutedicas que intervengan en lacadena de comercializacioacuten distribucioacuten y dispensacioacuten de especialidades medicinales incluidas en elRegistro de Especialidades Medicinales SNT Especificacioacuten Teacutecnica V2 Ver manual especiacutefico enTrazabilidadMedicamentos
Trazabilidad de Precursores Quiacutemicos (SEDRONAR)
Interfaz para Servicio Web Trazabilidad de Precursores Quiacutemicos TrazaMedSDRN (SOAP) para informarmovimientos de Sustancias Quiacutemicas Controladas Decreto 109596 modificado por Decreto 116100Sistema Nacional de Trazabilidad modulo de Precursores Quiacutemicos (RENPRE SEDRONAR PAMI INSSJP)que deberaacuten implementar el operador de precursores quiacutemicos obtencioacuten de nuacutemero de CUFE (Coacutedigo deUbicacioacuten Fiacutesica de Establecimiento) Entrenamiento y Alineacioacuten de Datos Resolucioacuten 90012 RENPREVer manual especiacutefico en TrazabilidadPrecursoresQuimicos
Certificados
Generacioacuten
Para poder utilizar la interfase se deben tramitar y asociar los certificados de homologacioacutenproduccioacuten en laAFIP Para mas informacioacuten ver Paacutegina principal de Factura Electroacutenica (AFIP)
Crear Pedido CSR con WSAA
A partir de la revisoacuten 1632 (ver Actualizaciones Factura Electroacutenica moacutedulo WSAApy versioacuten 110b) esposible generar el pedido de certificado automaacuteticamente utilizando la opcioacuten --crear_pedido_cert)La herramienta solicitaraacute el CUIT buscaraacute la denominacioacuten del contribuyente en el padroacuten de AFIP ygeneraraacute los archivos necesarios (clave privada y pedido de certificado)
Ejemplo
Otros Servicios Web relacionados de otros organismos 112
CPyAfipWsgt WSAA-cliexe --crear_pedido_certreingartS55t-B~pyafipws$ python wsaapy --crear_pedido_certIngrese un CUIT 20267565393Denominacioacuten seguacuten AFIP REINGART MARIANO ALEJANDROLongitud clave 2048 (bits)Se crearon los archivosclave_privada_20267565393_201609105952keypedido_cert_20267565393_201609105952csr
Tambieacuten pueden especificarse esos datos por linea de comando (CUIT nombrealias empresa y longitud de laclave -2048 bits predeterminados-) ejecutando
WSAA-cliexe --crear_pedido_cert 20267565393 PyAfipWS SHA-2 REINGART MARIANO ALEJANDRO 2048
Nota desde el coacutedigo fuente ejecutar python wsaapyTambieacuten es posible realizar el procedimiento por programa (automatizadamente) llamando a los meacutetodoswsaaCrearClavePrivada(clave_privada) y wsaaCrearPedidoCertificado(cuitempresa nombre pedido_cert)
La herramienta deja listos los archivos respectivos pudiendo subir el pedido de certificado CSR a AFIP (tantoen homologacioacuten como en produccioacuten)
WSASS
Video Explicativo completo (incluyendo WSASS autogestioacuten de certificados en homologacioacuten AFIP) httpswwwyoutubecomwatchv=ietDXvUzVIQ
OpenSSL
Pasos para crear el certificado (maacutes informacioacuten en Instructivo AFIP)
Bajar e instalar OpenSSL para Windows 098i (historico) o 102k o superior (recomendado) Encaso de inconvenientes instalar Redistribuible de Visual C++
bull
Ingresar por liacutenea de comando al directorio de OpenSSL COpenSSLbingtbull Generar la clave privada
openssl genrsa -out empresakey 2048
bull
Generar el pedido (CSR certificate signing request) por liacutenea de comando
openssl req -new -key empresakey -subj C=ARO=[empresa]CN=[nombre]serialNumber=CUIT [nro_cuit] -out empresacsr
Reemplazar [empresa] por el nombre de su empresa Ej Nombre de la empresa tal cualfigura en la consulta de inscripcioacuten ej Empresa S A
diams
Reemplazar [nombre] por su nombre o server hostname Nombre del servicio aplicacioacuten uunidad operativa ej Interfaz PyAfipWs
diams
Reemplazar [nro_cuit] por la CUIT sin guiones de la empresa o programador Ej CUITxxxxxxxxxxx
diams
bull
Enviar el empresacsr a la AFIP para que lo firmen y devuelvan el certificado empresacrtbull
Ejemplo concreto
Crear Pedido CSR con WSAA 113
openssl req -new -key empresakey -subj C=ARO=Mariano ReingartCN=PyAfipWsserialNumber=CUIT 20267565393 -out empresacsr
Generar Certificado CRT
Una vez generado el pedido de certificado CSR (ver puntos anteriores) el traacutemite es
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Nuevo Certificado en el WSASSdiams Nombre simboacutelico del DN un alias del computador fiscal (nombre de fantasiacutea ej PC1)diams Solicitud de certificado en formato PKCS10 abrir con un editor de texto el CSR y copiaraqui el contenido
diams
Presionar Crear DN y obtener certificadodiams Abrir un archivo nuevo y copiar el campo Resultado (este es el certificado usar extensioacutenCRT)
diams
bull
Produccioacuten Ingresar por clave fiscal al servicio online Administracioacuten de Certificados DigitalesIr a Agregar Alias escribir el alias (nombre relacionado al certificado)diams Subir el archivo CSR presionar Agregardiams Luego buscar y descargar el certificado CRTdiams
bull
Con esta interfase no es necesario convertir el certificado en formato pkcs12 ni importarlo alrepositorio de Windows
bull
Para maacutes informacioacuten ver instructivo oficial AFIP
Asociacioacuten
Para poder usar los servicios web se debe asociar el certificado al webservice y CUIT (empresa) que loutilizaraacute
Homologacioacuten ir a WSASS - Autogestioacuten Certificados Homologacioacuten ( solicitud de servicio)nuevo procedimiento a partir del 1062015
Ir a Crear autorizacioacuten a servicio en el WSASSdiams Seleecionar el Nombre simboacutelico del DN a autorizar (igual que en el paso anterior)diams Revisar el CUIT representado y quien genera la autorizacioacutendiams Seleccionar el Servicio al que desea acceder (por ej wsfe factura electroacutenica)diams Presionar Crear autorizacioacuten de Acceso y revisar el resultadodiams
bull
Produccioacuten en el sitio de AFIP ingresar por clave fiscalEntrar en Administrador de Relaciones de Clave Fiscaldiams Elegir Nueva Relacioacutendiams Presionar BUSCAR para seleccionar el webservice de AFIP por ej ws - FacturacioacutenElectroacutenica
diams
Presionar BUSCAR para seleccionar el Representante seleccionar el nombre del alias delComputador Fiscal (ver seccioacuten anterior)
diams
Confirmardiams
bull
Anteriormente en produccioacuten debiacutea realizarse utilizando el servicio de clave fiscal ARFE - GestionarRelaciones yendo a Realizar una nueva Asociacioacuten completando Empresa Servicio y computador-certificado- que utilizara los webservices
OpenSSL 114
Para maacutes informacioacuten en produccioacuten ver instructivos oficiales de la AFIP
obtener certificado AFIPbull asociar certificado AFIPbull
Es el mismo traacutemite para la renovacioacuten (ns1cmscertexpired Certificado expirado) debesubirse el arcihvo CSR (pedido de certificado) y descargar el nuevo CRT Recordamos que los certificadostienen una vigencia de 2 antildeos en produccioacuten y 1 antildeo en homologacioacuten
Pre-requisitos para Produccioacuten (RECE)
Para poder usar Factura Electroacutenica en Produccioacuten (modo definitivo) ademaacutes de los puntos mencionadosanteriormente dentro de Clave Fiscal servicio online Regimenes de facturacioacuten y registracioacuten(REARRECERFI) es necesario
Adherirse al reacutegimen (realizarlo con anterioridad este traacutemite puede demorar varias semanas)Importante en el Rubro I C) RECE RCEL (Factura Electroacutenica y Factura Electroacutenica en Linea)especificar RECE (no RCEL que es para Comprobantes en linea y Facturador Plus nocontemplados por los webservices)
bull
Dar de alta los nuevos puntos de ventas (uno por cada webservice a utilizar factura nacionalexportacioacuten bono fiscal etc)
bull
Para maacutes informacioacuten ver demo interactiva oficial empadronamiento AFIP
Descargas
OpenSSL para windowsbull Redistribuibe VC++bull
Comprobacioacuten de Autenticacioacuten (WSAA)
Para descartar problemas teacutecnicos de acceso en produccioacuten u homologacioacuten (y verificar la validez delcertificado generado) se puede utilizar la herramienta WSAAEXE WSAA-cliEXE en modo depuracioacuten(sin necesidad de autorizar una factura solo solicitar acceso) yo el mensaje XML devuelto porWSAACallWSAA()
CPYAFIPWSgtWSAA-cliEXE reingartcrt reingartkey wsfe 2400 httpswsaaafipgovarwsservicesLoginCms --trace
Usando CERT=reingartcrt PRIVATEKEY=reingartkey URL=httpswsaaafipgovarwsservicesLoginCms SERVICE=wsfex TTL=2400Creando TRA------------------------------------------------------------------------------ltxml version=10 encoding=UTF-8gtltloginTicketRequest version=10gt ltheadergt ltuniqueIdgt1279058341ltuniqueIdgt ltgenerationTimegt2010-07-13T181901ltgenerationTimegt ltexpirationTimegt2010-07-13T193901ltexpirationTimegt ltheadergt ltservicegtwsfexltservicegtltloginTicketRequestgt------------------------------------------------------------------------------
Asociacioacuten 115
Frimando TRALlamando WSAA--------------------------------------------------------------------------------POST httpswsaaafipgovarwsservicesLoginCmsSOAPAction httpargovafipdiffacturaelectronicaloginCmsContent-length 3369Content-type textxml charset=UTF-8
================================================================================El archivo TAxml se ha generado correctamente
Nota Cambiar WSAAEXE por WSAA-CLIEXE o viceversa dependiendo del paquete de instalacioacuten o comoeste compilado (si aparece el mensaje This program host a COM object an is started automatically) Parausarlo desde el coacutedigo fuente utilizar en su lugar python wsaapy
Para descartar cualquier problema teacutecnico se puede utilizar la salida que es la traza de depuracioacuten de lacomunicacioacuten con AFIP a la mesa de ayuda (requerimiento y respuesta xml)
Si se estariacutea conectando correctamente a produccioacuten el certificado y las URL son correctas etc se deberiacuteaconstatar que
El ticket de requerimiento de acceso (TRA) correctamente solicita servicio correcto (wsfex)ltservicegtwsfexltservicegt
bull
Se estaacute solicitando acceso a los servidores del ambiente correcto (wsaa_url) POSThttpswsaaafipgovarwsservicesLoginCms (produccioacuten) o POSThttpwsaahomoafipgovarwsservicesLoginCms (homologacioacuten)
bull
El equipo que responde seriacutea del ambiente correcto perezaafipgovarenvidiaafipgovar iraafipgovar (produccioacuten) o avariciaafipgovar(homologacioacuten) Nota los nombres de los servidores pueden cambiar y solo se informan en caso deerror
bull
Si la autenticacioacuten es exitosa (El archivo TAxml se ha generado correctamente en elmensaje XML contenido en dicho archivo se puede verificar los siguientes datos
Fuente AFIP produccioacuten (ltsourcegtCN=wsaa O=AFIP C=AR SERIALNUMBER=CUIT33693450239ltsourcegt) sinoacute diriacutea CN=wsaahomo O=AFIP C=ARSERIALNUMBER=CUIT 33693450239
bull
Destino datos del certificado de produccioacutenhomologacioacuten (C=ar O=pyafipws-sistemasagiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart)
bull
Si el ambiente es el correcto (produccioacutenhomologacioacuten) y sigue devolviendo acceso denegadons1coenotAuthorized Computador no autorizado a acceder al servicio(govafipdeseindvadacsuaviewwsaaLoginFault) revisar el certificado ARFE(asociacioacuten de servicio) RECEREARRFI sobre reacutegimen habilitado puntos de venta y demaacutes traacutemites anteAFIP Si aparece error 600 ValidacionDeToken Error al verificar hashVerificacionDeHash No valida la firma digital se estaacute usando un sign y token en elambiente incorrecto (de produccioacuten en homologacioacuten y viceversa)
Comprobacioacuten de Autenticacioacuten (WSAA) 116
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA)
De manera similar a lo expuesto anteriormente se provee una aplicacioacuten visual a modo de ejemplo paracomprobar el funcionamiento de la interfaz y los certificados tramitados desde AFIP
El instalador para este aplicacioacuten puede descargarse de
instalar-ej-wsaa-202zip (archivado en 1GoogleCode)bull
Por defecto se instala en CArchivos de Programawsaaej-wsaaexe
Importante Es necesario configurar correctamente el certificado y clave privada con la ruta completa a dichosarchivos
Para pruebas en produccioacuten cambiar la URL ahttpswsaaafipgovarwsservicesLoginCms y configurar los certificados
La version de la interfaz no debe decir Homologacioacuten y debe permitir cambiar la URL sino deben reinstalarlos instaladores para produccioacuten eliminando cualquier archivo anterior
Importante generalmente solo debe correr el ejemplo no instalar ni actualizar el componente WSAA si tieneuna versioacuten superior (o incluida con otro webservice como WSFEv1 o WSLPG) o esta usando el instaladorpara produccioacuten Si no lo tiene instalado puede usar instalador-WSAA-202cexe o superior
Errores Frecuentes
Los siguientes son posibles interpretaciones y soluciones a los errores que enviacutean los servidores de AFIP
Fallas SOAP
Falla SOAP ns1coenotAuthorized o ns1cmscertuntrusted
En WSAA descartando que se este usando el certificado del ambiente incorrecto (certificado dehomologacioacuten en produccioacuten y viceversa) es necesario que el certificado y CUIT esteacuten habilitados paraacceder al servicio web especificado (wsfe wsfex wsbfe wsctg wDigDepFiel etc) No es suficiente generarel certificado (en homologacioacuten o en produccioacuten) hay que solicitar explicitamente acceso al serviciorequerido ver Asociacioacuten de Certificado
Los servicios no relacionados a factura electroacutenica en produccioacuten tienen otros meacutetodos para asociar loscertificados
Ver Comprobacioacuten de Autenticacioacuten WSAA con informacioacuten para determinar o depurar el problema deacceso
Mensajes de Error Original
Computador no autorizado a acceder los servicios de AFIP (ns1coenotAuthorized)bull Certificado no emitido por AC de confianza (ns1cmscertuntrusted)bull
Ejemplo Interactivo de Autenticacioacuten (ej-WSAA) 117
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso alWSN solicitado
Este error es reportado por AFIP cuando se esta solicitan varios tickets de acceso para el mismo certificado yservicio
Ver Reutilizacioacuten de Ticket de Acceso
Falla SOAP Server was unable to read request ---gt There is an error in XML document (41339) ---gt Input string was not in a correct format
Este error correponde al protocolo de intercambio de datos (ver Errores por Tipos de Datos) y puede significarque
Un campo obligatorio no fue completadobull Se completoacute un campo con un tipo de datos invaacutelido (float en lugar de int coma en vez de punto etc)bull Se especificoacute un valor no esperado por el web servicebull
En cualquier caso se puede revisar el mensaje XML de requermiento (atributos xml_request o XmlRequest) ybuscar la etiqueta con datos incorrectos en la liacutenea y caracter donde se informa el error (por ej en este casoliacutenea 4 cerca del caracter 1339) Ver maacutes informacioacuten y rutinas en Manejo de Excepciones
Otras fallas SOAP
WSAA y otros webservices pueden devolver errores no documentados o capturados por AFIP por ej
Server was unable to process request ---ampgt This OracleTransactionhas completed it is no longer usable
bull
SoapFault soapenvServer Could not initialize classorghibernatetransformTransformers
bull
Nuestra interfaz no utiliza Java ni Hibernate por lo que este tipo de problemas son cuestiones internas deAFIP Los errores Oracle u ORA son un problema interno de la base de datos de AFIP
Puede ocurrir en homologacioacuten y se debe esperar a que AFIP solucione el problema
En estos casos para produccioacuten se puede consultar con la mesa de ayuda sriafipgovar (seguramente es untema que lo resolveraacuten en el diacutea y no requiera una intervencioacuten de programacioacuten o configuracioacuten especial)
Errores generales AFIP
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token
Posiblemente haya un problema interno en AFIP (frecuentemente se soluciona automaacuteticamente ya que puedeser un problema de los servidores de AFIP ver abajo) o se este enviando incorrectamente el WSAAToken(por ej el lenguaje de programacioacuten o la base de datos recortoacute el string) Revisar que dicho dato se esteacutecopiando tal cual al webservice de negocio (WSFEv1Token WSMTXCAToken etc) o utilizar los nuevosmeacutetodos como WSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
Falla SOAP ns1coealreadyAuthenticated El CEE ya posee un TA valido para el acceso al WSN solicitado118
En python se puede analizar el sign ejecutando
import base64print base64b64decode(wsaaToken)
Que deberiacutea mostrar un XML (token del ticket de acceso) como el siguiente
ltxml version=10 encoding=UTF-8 standalone=yesgtltsso version=20gt ltid unique_id=788962471 src=CN=wsaahomo O=AFIP C=AR SERIALNUMBER=CUIT 33693450239 gen_time=1401116887 exp_time=1401160147 dst=CN=wsfe O=AFIP C=ARgt ltoperation value=granted type=logingt ltlogin uid=C=ar O=pyafipws-sistemas agiles SERIALNUMBER=CUIT 20267565393 CN=mariano reingart service=wsfe regmethod=22 entity=33693450239 authmethod=cmsgt ltrelationsgt ltrelation reltype=4 key=20267565393gt ltrelationsgt ltlogingt ltoperationgtltssogt
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 a la firma
Posiblemente se este enviando incorrectamente el WSAASign (por ej el lenguaje de programacioacuten o la basede datos recortoacute el string) Revisar que dicho dato se esteacute copiando tal cual al webservice de negocio(WSFEv1Sign WSMTXCASign etc) o utilizar los nuevos meacutetodos comoWSFEv1SetTicketAcceso(ta) que realiza este paso de manera maacutes automatizada
600 ValidacionDeToken Error al verificar hash VerificacionDeHash No valid la firmadigital
Este error es reportado por AFIP cuando no se estaacute enviando al webservice de negocio (WSFEv1WSMTXCA WSFEXv1 etc) el Token y Sign obtenido con WSAA (o se lo enviacutea vaciacuteo)
Esto puede deberse porque no se esteacute validando correctamente el ticket de requerimiento de acceso(certificado invaacutelido fecha invaacutelida ambiente de produccioacuten homologacioacuten incorrecto ticket de acceso yaotorgado etc) Revisar que la URL de cada webservice sea correcta (homologacioacuten o produccioacuten tanto deWSAA como del servicio web de negocio WSFEv1 WSMTXCA etc) y que el certificado corresponda alambiente correcto
Ver Manejos de excepciones para detectar el inconveniente en WSAA
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC
No estaacuten sincronizados la fecha y hora del equipo con los servidores de AFIP
En linux se actualiza con
sudo ntpdate timeafipgovar
En windows se actualiza yendo a Propiedades del Reloj Hora de Internet introduciendotimeafipgovar
Otros mensajes similares
600 ValidacionDeToken Error al verificar hash VerificacionDeHash Error al convertir deBase64 al token119
Token vencido fecha y hora de vencimiento del token enviado - fecha y hora actual del servidorbull Validaciondetoken No validaron las fechas del token Gen Time Exp Time Now Utcbull WSAA xmlgenerationTimeinvalid xmlexpirationTimeexpired xmlexpirationTimeinvalid Eltiempo de generacioacutenexpiracioacuten es invaacutelido generationTime posee formato o dato invaacutelido (ej en elfuturo o maacutes de 24 hs de antiguedad)
bull
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken No aparece CUITen lista de relaciones
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesovaacutelido pero se intenta operar con un CUIT incorrecto yo que no se corresponde al certificado Revisar que elCUIT sea correcto y que esteacute asociado al servicio y certificado (ver ARFE en punto anterior)
1000 Usuario no autorizado a realizar esta operacion ValidacionDeToken Error al verificarhash VerificacionDeHash No valid la firma digital
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el ambiente requerido (por ej ticket de acceso de homologacioacuten usado en produccioacuten) o no seenvioacute correctamente el tocken y sign
Usuario no autorizado para realizar esta operacioacuten Validacionde Token No valido idSistema wsfex (Id Sistema de token es wsfe)
En los web services de negocio (WSFE WSFEX WSBFE etc) se estaacute accediendo con un ticket de accesoinvaacutelido para el servicio web requerido (por ej ticket de acceso de factura nacional -wsfe- usado enexportacioacuten -wsfex-)
Se debe revisar el valor del servicio al crear el requerimiento de acceso (CreateTRA)
Problemas con los certificados
Error inesperado no existe el archivo o directorio de certificadoclave privada
Este error corresponde a que la interfaz no encuentra los archivos del certificadoclave privada o la ruta notiene alguacuten directorio Revisar la ruta completa y reintentar
Mensaje de Error Original (certificado)
Unexpected Python Error lttype exceptionsIOErrorgt [Errno 2] No such file or directoryreingartcrt
Mensaje de Error Original (clave privada)
Unexpected Python Error 936error02001002system libraryfopenNo such file ordirectorycryptobiobss_filec122fopen(reingartkeyr) 936error2006D080BIOroutinesBIO_new_fileno such filecryptobiobss_filec125 None
600 ValidacionDeToken No validaron las fechas del token GenTime ExpTime NowUTC 120
Error inesperado La clave privada no coincide con el certificado
Este error corresponde a que el certificado no fue creado con la clave privada dada por lo que no se puederealizar la encriptacioacuten necesaria Revisar que la clave privada sea con la que se creoacute el pedido de certificadooriginal (CSR) y reintentar Si no se cuenta con la clave privada original es imposible utilizar el certificadopor lo que es necesario generar y asociar uno nuevo
Mensaje de Error Original
Unexpected Python Error ltclass M2CryptoSMIMESMIME_Errorgt936error0B080074x509 certificate routinesX509_check_private_keykey valuesmismatchcryptox509x509_cmpc399 936error2107407FPKCS7routinesPKCS7_signprivate key does not match certificatecryptopkcs7pk7_smimec76
Error Inesperado La clave privada es invaacutelida
Mensaje de Error Original
Unexpected Python Error 936error0906D06CPEM routinesPEM_read_biono startlinecryptopempem_libc647Expecting ANY PRIVATE KEY
Este error corresponde a que la clave privada no estaacute en el formato correcto (texto plano PEM) seguramenteel archivo se encuentra en PKCS12 (binario certificado x509 + clave privada con extensioacuten p12 o pfx)lo que no es necesario para esta interfaz
Para convertir de pkcs12 a pem utilizar
openssl pkcs12 -in empresap12 -out empresapem -nodes
Eso generaraacute el archivo empresapem donde
La clave privada (key) se encuentra entre -----BEGIN RSA PRIVATE KEY----- y-----END RSA PRIVATE KEY-----
bull
El certificado (crt) se encuentra entre -----BEGIN CERTIFICATE----- y -----ENDCERTIFICATE-----
bull
Copiar dichas lineas en archivos separados Los archivos deben incluir el encabezado (-----BEGIN ) ypie (-----END ) para ser vaacutelidos
En caso de ser necesario para recorrer el camino inverso generar archivo PKCS12 desde PEM (no necesariopor esta interfaz) realizar
openssl pkcs12 -export -inkey empresakey -in empresacrt -out empresap12
Error inesperado Mala Desencriptacioacuten
Este error corresponde a que el certificado fue creado usando una frase de seguridad (passphrase) por lo queen tiempo de ejecucioacuten solicita entrada dicha contrasentildea (bloqueandose si no se proporciona)
Mensaje de Error Original
Error inesperado La clave privada no coincide con el certificado 121
M2CryptoEVPEVPError 3079395008error06065064digital enveloperoutinesEVP_DecryptFinal_exbaddecryptevp_encc3303079395008error0906A065PEM routinesPEM_do_headerbaddecryptpem_libc428
Para remover la passphrase (contrasentildea) por ej del archivo privadapem y grabarlo en privadakeyejecutar el siguiente comando
openssl rsa -in privadapem -out privadakey
Error inesperado Esperando certificado
El certificado proporcionado es invaacutelido
Es posible leer los datos de un certificado utilizando el comando openssl
openssl x509 -in reingartcrt -noout -text
Deberiacutea mostrar la informacioacuten completa del certificado
Certificate Data Version 3 (0x2) Serial Number 0791000000000000 Signature Algorithm sha1WithRSAEncryption Issuer CN=AFIP-Autoridad Certificante Homologacion C=AR ST=Capital Federal L=Ciudad Autonoma de Buenos Aires O=Administracion Federal de Ingresos Publicos OU=Subdireccion General de Sistemas y TelecomunicacionesemailAddress=ac_homoafipgovarserialNumber=CUIT 33693450239 Validity Not Before Feb 1 174604 2010 GMT Not After Feb 1 174604 2011 GMT Subject CN=Mariano ReingartserialNumber=CUIT 20267565393 O=PyAfipWs-Sistemas Agiles C=AR
Si no lo muestra posiblemente el certificado esteacute en otro formato (ver como convertir desde pk7 en puntosanteriores)
Mensaje de Error Original
M2CryptoX509X509Error 3078817472error0906D06CPEM routinesPEM_read_bionostart linepem_libc650Expecting CERTIFICATE
Error al dar de alta computador
A partir de Agosto de 2016 aparentemente AFIP estaacute solicitando claves maacutes largas pudiendose presentar elsiguiente error al tratar de generar un certificado por WSASS Autoservicio de Acceso a WebServices(TESTINGHOMOLOGACIOacuteN)
ERROR clsCrearComputador (CUIT=20267565393 ALIAS=test_1024) createComputer Error al dar de alta al computador (CUIT=20267565393 ALIAS=test_1024) La longitud de clave puacuteblica debe ser estar comprendida entre 2048 y 8192 bits
En este caso de debe generar la clave con mayor cantidad de bits por ej indicando el paraacutemetro 2048 aInstructivo OpenSSL
Error inesperado Mala Desencriptacioacuten 122
La herramienta WSAA 110g ya crea de manera predeterminada claves de 4096 bits ver Crear Pedido CSR
Se estima que estas cuestiones afectaraacuten en PRODUCCIOacuteN cuando venzan la mayoriacutea de los certificados paraese entorno el 21 de Febrero de 2016 Es posible con este componente revisar el vencimiento de cada crtcon los Metodos para Certificados
Excepcioacuten SSLError X509_load_cert_crl_file
No se puede cargar el archivo afip_ca_infocrt de la lista de autoridades de certificacioacuten de confiaza(CACERT) necesario para verificar el canal seguro como solicita AFIP
Ese archivo en las ultimas actualizaciones se encuentra en la carpeta conf o puede ser descargado desde el el repositorio
El archivo debe ser copiado a la carpeta principal donde esteacute el programa WSAA o configurar el paraacutemetroCACERT con la ruta a la ubicacioacuten completa
Mensaje de Error Original
[Errno 185090050] _sslc345 error0B084002x509 certificateroutinesX509_load_cert_crl_filesystem lib
Falla SOAP WSAA (SoapFault)
En ciertas ocaciones WSAA puede denegar el acceso con los siguientes mensajes
ns1cmscertexpired Certificado expiradobull ns1xmlbad No se ha podido interpretar el XML contra el SCHEMAbull cmscertuntrusted Certificado NO emitido por un AC de confianzabull cmssigninvalid cmsbad y cmsbadbase64 no se esta informando correctamente el mensajecriptograacutefico firmado (Firma invaacutelida o algoriacutetmo no soportado)
bull
Generalmente se esta tratando de usar un certificado invaacutelido o expirado se estaacute pasando mal alguacuten paraacutemetro(servicio o tiempo de vida) o se estaacute tratando de acceder al ambiente equivocado (el cerificado es deproduccioacuten y el servidor de homologacioacuten o viceversa)
Ver consulta tema anterior para revisar el certificado Modo Homologacioacuten Produccioacuten y Comprobacioacuten deAutenticacioacuten WSAA
Errores de Conectividad
Antes las fallas de conexioacuten sobrecarga caiacutedas de internet u otros problemas de comunicacioacuten la interfazpuede devolver los siguientes errores (en su mayoriacutea del lenguaje de programacioacuten Python o sistemaoperativo)
AttributeError NoneType object has no attribute makefile no sepuede establecer el canal de comunicacioacuten (socket) puede que internet no este funcionando en elcliente
bull
socketgaierror [Errno -2] Name or service not known no se puede resolverel nombre del equipo revise los servidores DNS asignados a su conexioacuten de internet
bull
Error al dar de alta computador 123
socketerror [Errno 104] Connection reset by peer la conexioacuten fue cerradapor la contraparte (servidor AFIP) posiblemente por sobrecarga
bull
lturlopen (11001 getaddrinfo failed)gt no se puede resolver el nombre de archivorevise los DNS y si estaacute utiliando alguacuten servidor intermedio (proxy)
bull
ExpatError Not well formed token el servidor posiblemente no esta devolviendo XMLcorrecto debido a un error interno
bull
BadStatusLine ResponseNotReady significa que los servidores de AFIP no contestan algocoherente (compatible con el protocolo HTTP)
bull
AttributeError Tag not Found Body (no elements found) significa que losservidores de AFIP no contestan un XML vaacutelido seguacuten el protocolo de webservices SOAP
bull
SSLError The read operation timed out la conexioacuten SSLTLS supero el tiempo deespera posiblemente es un error de conectividad de Internet o los servidores de AFIP estaacuten caiacutedos
bull
Service Unavailable El servidor de AFIP no estaacute disponible y no devuelve un mensaje XMLcorrecto
bull
ServerNotFoundError Unable to find the server atservicios1afipgovar no estaacute resolviendo el nombre del Servidor de AFIP a la direccioacutenIP revisar la configuracioacuten DNS con su proveedor de Internet
bull
error [Errno 111] Connection refused error [Errno 10061] No sepuede establecer una conexioacuten ya que el equipo de destino denegoacuteexpresamente dicha conexioacuten revisar que no esteacute mal configurado el servidor proxy(comentar o no enviar parametro si no corresponde)
bull
En todos estos casos se recomienda reintentar la operatoria luego de unos instantes despueacutes de verificar laconexioacuten de internet Se puede probar ingresando a la URL del webserice (por ej[ httpsservicios1afipgovarwsfev1serviceasmxWSDL
WSFEv1]) con un navegador y ver si les abre correctamente la paacutegina
Tambieacuten puede haber un tema de antivirus o proxy que esteacute bloqueando la conexioacuten saliente En ese caso(servidor intermedio para poder salir a internet) se debe consultar con los administradores de la red yposiblemente se necesite configurar
El paraacutemetro proxy en el meacutetodo Conectar formato usuarioclaveservidorpuerto (verejemplo)
bull
o seccioacuten [PROXY] en el archivo receini (ver ejemplo)bull
Ver la siguiente seccioacuten si el problema persiste Recordar que a veces funciona o no dependiendo del lugardesde donde se conecta el cliente ya que AFIP tiene una granja de servidores pueden probar reconectandosea internet desde otra IP para ver si los deriva a un servidor que funcione (o esperar a que baje la demanda yover si lo solucionan)
Errores de Protocolo SSL
AFIP estaacute desafectando los protocolos de seguridad obsoletos (SSLv3 requiriendo TLSv1+) por lo que ensistemas operativos antiguos o desactualizados (por ej Windows XP) puede existir una incompatibilidad conque imposibilite la comunicacioacuten segura es recomendable actualizar el sistema operativo lenguaje deprogramacioacuten y componentes
SSLEOFError EOF occurred in violation of protocol (_sslc590)bull SSLHandshakeError [SSL SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alertbull
Errores de Conectividad 124
handshake failure (_sslc581)[Errno 1] _sslc490 error14094410SSLroutinesSSL3_READ_BYTESsslv3 alert handshake failure
bull
Como mitigacioacuten puede utilizare un transporte alternativo basado en la biblioteca CURL que en general tienemejor cobertura para este tipo de cuestiones en Windows
Para ello establecer paraacutemetro wrapper=pycurl en el meacutetodo Conectar si se utilizan loscomponentes
wrapper = pycurlok = WSFEv1Conectar(cache wsdl proxy wrapper)
Si se utilizan las herramientas por linea de comando configurar en el receini
[WSFEv1]wrapper = pycurl
Errores AFIP CUIT Emisor
En caso de problemas con el CUIT emisor y no superar una de las siguientes validaciones excluyentes(verificacioacuten de datos registrales inscripcioacuten en el reacutegimen autorizacioacuten de emisioacuten de comprobantesdomicilio fiscal etc) AFIP devolveraacute un Coacutedigo de Error 10000 con los mensajes posibles
01 LA CUIT INFORMADA NO CORRESPONDE A UN RESPONSABLE INSCRIPTO EN ELIVA ACTIVO
bull
02 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESELECTRONICOS ORIGINALES O EL PERIODO DE INICIO AUTORIZADO ES POSTERIORAL DE LA GENERACION DE LA SOLICITUD
bull
03 LA CUIT INFORMADA REGISTRA INCONVENIENTES CON EL DOMICILIO FISCALbull 04 LA CUIT INFORMADA NO SE ENCUENTRA AUTORIZADA A EMITIR COMPROBANTESCLASE A
bull
05 EL CUIT INFORMADO COMO EMISOR NO SE ENCUENTRA REGISTRADO DE FORMAACTIVA EN LAS BASES DE LA ADMINISTRACIOacuteN
bull
06 DEBE POSEER AL MENOS UNA ACTIVAD ACTIVAbull
En estos casos debe contactar la mesa de ayuda de AFIP para solucionar el inconveniente que esteacute bloqueandola emisioacuten de facturas electroacutenicas (generalmente no es un tema teacutecnico sino un traacutemite administrativo)
Errores AFIP Punto de Venta
Otros errores relacionados a la emisioacuten de facturas electroacutenicas pueden ser
1501 El Punto de Venta debe ser del tipo habilitado para el reacutegimen CAE Codificacioacuten de Productos- Web Services o del reacutegimen CAEA
bull
Errores de Protocolo SSL 125
En este caso se debe revisar que el tipo de punto de venta dado de alta coincida con el servicio web aconsumir (campo sistema de facturacioacuten asociado)
RECE para aplicativo y web services (CAE WSFEv1 factura electroacutenica mercado interno tradicionalsin detalle)
bull
RECE para aplicativo y web services EXPORTACION (CAE WSFEXv1 factura electroacutenicaexportacioacuten con detalle)
bull
Codificacioacuten de Productos Web Services (CAE WSMTXCA factura electroacutenica mercado interno condetalle)
bull
CAEA - Codificacioacuten de Productos (CAE anticipado WSMTXCA factura electroacutenica mercado internocon detalle)
bull
No debe figurar Factura en Linea porque ese punto de venta solo permite operar por Clave Fiscal serviciointeractivo de Comprobantes en Liacutenea
Errores de tipos de datos
Se recuerda que este componente es dinaacutemico y generalmente no realiza conversioacuten ni ajustes en los tipos dedatos por lo que la aplicacioacuten que lo utilice debe revisarlos y verificar que sean correctos para ser enviadosrespetando las especificaciones y validaciones de AFIP
Debido a que los distintos lenguajes de programacioacuten pueden almacenar y pasar los valores de formasdiferentes (eventualmente en registros recordsets campos fields o similares) es recomendable que seconviertan todos los datos a string (cadenas de caracteres) para evitar errores de conversioacuten y redondeoTambieacuten se pueden usar otros tipos de datos baacutesicos como enteros (integer) flotantes (float)numeacutericomoneda (currencydecimal) que son los que en definitiva reconoce AFIP Las fechas deben pasarseen formato string seguacuten el formato de cada webservice Los importes deben pasarse con punto decimal (nocoma y sin separadores de miles ni signo pesos)
En VB se pueden convertir los valores con CStr (string) CLng (long) CCur (currency) etc o incluso lasfunciones str o val en ciertos casos ejemplo
tipo_cbte = CInt(rstipo_cbte)
Para un ejemplo concreto ver la implentacioacuten completa de referencia factura_electronicamdb (Access 2k osuperior)
En caso de enviar los tipos de datos incorrectos en Traceback (ver Manejo de Excepciones) podraacuteencontrarse algunos de los mensajes frecuentes
AttributeError PyIDispatch object has no attribute strip se envioacuteun dato que no puede convertirse a string
bull
PyIDispatch at 0x10531678 with obj at 0x0C997832 se usoacute un tipo de datos noconvertidosoportado ver Mensajes XML
bull
TypeError int() argument must be a string or a number notNoneType se envioacute un nulo en un campo que necesitaba un nuacutemero
bull
ValueError invalid literal for int() with base 10 A se envioacute un stringen un campo que necesitaba un nuacutemero
bull
Errores AFIP Punto de Venta 126
Errores internos de AFIP
Ocasionalmente pueden producirse errores no documentados en las especificaciones teacutecnicas de AFIP Por ejcuando se intenta utilizar la URL de un webservice obsoleto como WSBFE en vez de WSBFEv1 el servidorde AFIP ha devuelto el siguiente error
soapServer Server was unable to process request ---ampgt Object reference not set to an instance ofan object
bull
Otros problemas internos de los servidores de AFIP que los resuelve dicho organismo automaacuteticamente (sinintervencioacuten necesaria generalmente en el transcurso del diacutea) son
500 Error general DB (InsertandAuthorize - fex_pckprc_ins_rcel_comprobantes OEX ) - (1654) -ORA-01654 unable to extend index MIGRARCEL_CMP_UNC_INDEX by 4 in tablespaceFISCO_DATOS ORA-06512 at MIGRAFEX_PCK line 353 ORA-06512 at line 1
bull
500 Error interno DB - fex_Rece_Pckget_ctzbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
500 Error general DB (InsertandAuthorize - prc_ws_ins_cab) BFEErrorbull 500 Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-12535 TNSoperationtimed out
bull
500 Error interno de aplicacioacuten - Metodo FECAESolicitar - Index was outside the bounds of thearray
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-00257 archiver error Connect internalonly until freed ORA-02063 preceding line from GHOST ORA-06512 at ORARECE_V1_PCKline 1651 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-28000 the account is lockedORA-02063 preceding line from E15K_PADR ORA-06512 at ORARECE_V1_PCK line 1806ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLEinitialization or shutdown in progress
bull
501 Error interno de base de datos - CAECabInsert ORA-02068 following severe error fromCONTRIB ORA-03113 end-of-file communication channel ORA-06512 atORARECE_V1_PCK
bull
501_ Error interno de base de datos - CAECabInsert ORA-01001 invalid cursor ORA-06512 atORARECE_V1_PCK line 580 ORA-06512 at ORARECE_V1_PCK line 1070 ORA-06512 atline 1
bull
501 Error interno de base de datos - CAEDetInsert ORA-03233 unable to extend tableORAF136_DETALLES_FACTE subpartition F136_DET_2011_CLAVE_08 by 128 in tablespaceUSERS
bull
501 Error interno de base de datos - CAESequenceGenerarORA-01502 indexORAF136_DET_CAE_UK or partition of such index is in unusable state ORA-06512 atORARECE_V1_PCK line 1477 ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace FISCO_DATOS ORA-06512 at ORARECE_V1_PCK line1168 ORA-06512 at line 1
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-01033 ORACLE initializationor shutdown in progress
bull
501 Error interno de base de datos - AlicIvaCAEInsertORA-14400 inserted partition key does notbull
Errores internos de AFIP 127
map to any partition ORA-06512 at ORARECE_V1_PCK line 1308 ORA-06512 at line 1501 Error interno de base de datos - CuitsEnPadronSet ORA-12541 TNSno listener ORA-06512 atORARECE_V1_PCK line 1831 ORA-06512 at line 1
bull
501 Error interno de base de datos - CuitsEnPadronSet ORA-04031 unable to allocate 20528 bytesof shared memory (shared poolunknown objectsga heap(10)KTI SGA freeable small pool)ORA-02062 preceding line from SEFI ORA-06512 at ORARECE_V1_PCK line 1898ORA-06512 at line 1
bull
501 Error interno de base de datos - CAECabInsert ORA-01552 cannot use system rollbacksegment for non-system tablespace USERS at ORARECE_V1_PCK line 1202
bull
501 Error interno de base de datos - Metodo CuitsEnPadronSet ORA-12505 TNSlistener could notresolve SID given in connect descriptor
bull
501 Error interno de base de datos - CAECompConsultarORA-01502 indexORAIX_F136_DETALLES_TPN or partition of such index is in unusable state
bull
501 Error interno de base de datos - CAECabInsert ORA-01502 index ORAF136_CAB_CUIT_IDor partition of such index is in unusable state
bull
501 DataBase - Resultado inesperadobull 501 Error interno de base de datos - CAESequenceGenerarORA-01654 unable to extend indexORAF136_DET_CAE_UK by 1024 in tablespace FISCO_FE ORA-06512 atORARECE_V1_PCK line 1781 ORA-06512 at line 1
bull
502 Error interno de base de datos - Autorizador CAE - Transaccioacuten Activabull Error interno de aplicacioacuten - Metodo FECompConsultarORA-01034 ORACLE not availableORA-27101 shared memory realm does not exist
bull
Error interno de aplicacioacuten - Metodo FECompConsultarORA-01035 ORACLE only available tousers with RESTRICTED SESSION privilege
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado Timeout expired The timeoutperiod elapsed prior to obtaining a connection from the pool This may have occurred because allpooled connections were in use and max pool size was reached
bull
Error interno de aplicacioacuten - Metodo FECompUltimoAutorizado ORA-28000 the account is lockedbull soapenvServer Error de conexin DB [Cd A001]bull soapenvClient Error de acceso a la base de datosbull soapenvClient business0010bull soapenvClient orgapacheaxis2databindingADBExeption unexpected subelementconsultarCTGDatos
bull
Tambieacuten pueden ocurrir Errores de Conectividad a nivel de sistema operativo socket error ioerror timeout connection refused ssl handshake server not found etc (verarriba) especialmente cuando los servidores de AFIP se saturan por cambios y actualizaciones
Realizar la consulta con la mesa de ayuda de AFIP sriafipgovar (produccioacuten) y webservicesafipgovar(homologacoacuten) para dejar constancia del problema y si corresponde ver de utilizar los meacutetodos tradicionalespara emitir comprobantes seguacuten RG248508 Artiacuteculo 33
En el caso de inoperatividad del sistema se deberaacute emitir y entregar el comprobanterespectivo utilizando el controlador fiscal o los comprobantes manuales seguacuten correspondahasta tanto esta Administracioacuten Federal apruebe otro procedimiento alternativo de respaldo
Importante en general es obligatorio informar los comprobantes emitidos manualemente por formulariomultinota en dependencia de AFIP a traveacutes de servicios en linea o como AFIP disponga en casos particularesConsultar con el contador la normativa y legislacioacuten vigente
Errores internos de AFIP 128
Errores de Permisos
Dependiendo de las poliacuteticas de seguridad puede ser necesario dar permisos de acceso a la carpeta cache(archivos temporales) o aquellas donde se almacenen los archivos de intercambio (entrada salida PDF oXML)
IMPORTANTE los certificados y claves privadas no deben ser expuestas en una carpeta puacuteblica delservidor web o similar Utilizar passphrase (ver Meacutetodos WSAA) para mayor proteccioacuten y seguridad
Linux
En GNULinux generalmente es necesario que el usuario del servidor web (www-data o similar) puedaacceder a la carpeta
Por ejemplo se podriacutea utilizar los siguientes comandos
chown www-data -R optpyafipwschmod a+xr -R optpyafipwschmod a+xwrt -R optpyafipwscache
Revisar los permisos con su administrador de sistemas
Windows
Acceso Denegado (Archivos)
Error IOError [Errno 13] Permission denied cArchivos deProgramaPyAfipWSCacheTAXML
En general es recomendable utilizar una carpeta con permisos de escritura para la aplicacioacuten
Si esto no es posible se puede configurar los permisos de acceso
Explorador de Archivosbull Buscar carpeta de instalacioacuten (CArchivos de ProgramaPyAfipWS)bull Propiedades (click derecho)bull Solapa Seguridadbull Seleccionar Usuarios que ejecutan la aplicacioacutenbull Editarbull Modificar (habilitar)bull Aceptarbull
Ejemplo
Acceso Denegado (CreateObjectCreateInstance)
En ciertos servidores (Windows 7 o superior) dependiendo de la configuracioacuten debe permitir inicio yactivacioacuten de los componentes
Errores de Permisos 129
Error al llamar a CreateObject CreateInstance o similar Acceso Denegado(HRESULT0x80070005 E_ACCESSDENIED
Solucioacuten
Inicio buscar Servicios de Componentes (o via el Panel de Control HerramientasAdministrativas)
bull
Equipos Mi PC Configuracioacuten DCOMbull Buscar WSAA WSFEv1 o el componente que desee configurarbull Propiedades (Click Derecho)bull Solapa Seguridadbull Permisos de inicio y activacioacuten Personalizado Editarbull Agregar los usuarios que deben tener permisos necesariosbull Aceptarbull
Repetir para Permisos de Acceso y Configuracioacuten de ser necesario
Ejemplo
Acceso Denegado (CreateObjectCreateInstance) 130