Manual de Uso PyAfipWs: Interfase y herramientas para ...

130
Manual de Uso PyAfipWs: Interfase y herramientas para servicios web AFIP (Factura Electrónica y otros) Documentación Componentes y Herramientas Generales: PyAfipWs: Interfase simil OCX con otros lenguajes (VB, VFP, Cobol ...) Costos y Condiciones Manual: Documentación, Información Importante, Certificados, Errores Frecuentes Herramienta "universal": archivos de intercambio TXT Cobol, DBF dBase/FoxPro, JSON PHP/Java PyFEPDF: Generador de Factura Electrónica en formato PDF Factura Electrónica - Servicios Web AFIP: Mercado Interno: Factura Electrónica A/B/C/M WSFEv1+ (RG2485/3067/3668/3749/4004/4109/4367) Matrix (codificación productos): Factura Electrónica A/B con detalle (RG2904/3536) Bienes de Capital: Bonos Fiscales Electrónicos - Factura Electrónica A (RG2557) Exportación: Factura Electrónica E Exportadores (RG2758 RG3689 RG4401) Turismo: Comprobantes Factura Electrónica T WSCT CAE/CAEA (RG3971) FE Cred (FCE): Factura Electrónica Crédito MiPyMEs (RG4367) Nuevo! Código de Autorización Electrónico Anticipado CAEA Agropecuario - Servicios web AFIP: Código Trazabilidad de Granos: Transporte de granos WSCTGv4 (RG2806 RG3113 RG3493) Liquidación y Certificación de Granos: WSLPGv1.17 F. C1116 A / B / RT (RG3419 RG3690 RG3691) Liquidación de Tabaco Verde: WSLTVv1.3 ¡Actualizado! Liquidación Única Mensual Lechería: WSLUMv1.3 Liquidación Sector Pecuario: Hacienda, Compra directa, Carne WSLSPv1.3 Remito Electrónico Cárnico: WSRemCarne (RG4256/18 y RG4303/18) Remito Electrónica Harinero: WSRemHarina - (RG 4519/19) Remito Electrónico Azúcar y Derivados: WSRemAzucar - (RG 4519/19) ¡Nuevo! Carta de Porte: WSCPE - (RG 5017/21) ¡Nuevo! Otros webservices y utilidades AFIP Constatación de Comprobantes CAI, CAE, CAEA (WSCDC) Padron Contribuyentes AFIP: Constancia de Inscripción RG1817/2005 WS-SR-Padron Consulta de Operaciones Cambiarias: Compra de Divisas (WSCOC) SIRE_CertificadoRetencionElectronica: Certificado de retención electrónica del Impuesto al Valor Agregado (SIRE-WS) RG4523/19 Webservices provinciales: ARBA (Prov. Bs.As.), AGIP (C.A.B.A), API (Sta.Fe), DGR (Córdoba): Remito Electrónico: COT Código de Operaciones de Translado (ARBA, API, AGIP, DGR) Ingresos Brutos: Consulta de alícuotas WS DFE IIBB ARBA SNT: Sistema Nacional de Trazabilidad ANMAT, SEDRONAR, SENASA Trazabilidad de Medicamentos: ANMAT Disposición 3683/2011 Trazabilidad de Productos Médicos: ANMAT Disposición 2303/2014 y 2175/14 Trazabilidad de Precursores Químicos: RENPRE SEDRONAR Resolución 900/12 Trazabilidad de Productos Fitosanitarios: SENASA Resolución 369/13 Manual de Uso PyAfipWs: Interfase y herramientas para servicios web AFIP (Factura Electrónica y otros) 1

Transcript of Manual de Uso PyAfipWs: Interfase y herramientas para ...

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

  • tmpSIzJixwikitopdf

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

  • tmpSIzJixwikitopdf

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

  • tmpSIzJixwikitopdf

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

  • tmpSIzJixwikitopdf

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

  • tmpSIzJixwikitopdf

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

  • tmpSIzJixwikitopdf

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

  • tmpSIzJixwikitopdf