AFIP WSFE adapter.
Ruby Makefile
#4 Compare This branch is 93 commits ahead of vurbia:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
autotest
bin
examples
lib
spec
.document
.gitignore
.rubocop.yml
.travis.yml
.yardopts
CHANGELOG
Gemfile
Guardfile
LICENSE.txt
README.md
Rakefile
bravo.gemspec

README.md

Bravo

Travis status Gem Version Code Climate

Bravo Bravo permite la obtención del C.A.E C.A.E. (Código de Autorización Electrónico) por medio del Web Service de Facturación Electrónica provisto por AFIP.

Requisitos

Para poder autorizar comprobantes mediante el WSFE, AFIP requiere de ciertos pasos detallados a continuación:

  • Generar una clave privada para la aplicación.
  • Generar un CSR (Certificate Signing Request) utilizando el número de CUIT que emitirá los comprobantes y la clave privada del paso anterior. Se deberá enviar a AFIP el CSR para obtener el Certificado X.509 que se utilizará en el proceso de autorización de comprobantes.
    • Para el entorno de Testing, se debe enviar el X.509 por email a webservices@afip.gov.ar.
    • Para el entorno de Producción, el trámite se hace a través del portal AFIP
  • El certificado X.509 y la clave privada son utilizados por Bravo para obtener el token y signature a incluir en el header de autenticacion en cada request que hagamaos a los servicios de AFIP.

OpenSSL

Para cumplir con los requisitos de encriptación del Web Service de Autenticación y Autorización (WSAA), Bravo requiere OpenSSL en cualquier versión posterior a la 1.0.0a.

Como regla general, basta correr desde la línea de comandos openssl cms

Si el comando cms no está disponible, se debe actualizar OpenSSL.

Certificados

AFIP exige para acceder a sus Web Services, la utilización del WSAA. Este servicio se encarga de la autorización y autenticación de cada request hecho al web service.

Una vez instalada la version correcta de OpenSSL, podemos generar la clave privada y el CSR.

Uso

Luego de haber obtenido el certificado X.509, podemos comenzar a utilizar Bravo en el entorno para el cual sirve el certificado.

Configuración

Bravo no asume valores por defecto, por lo cual hay que configurar de forma explícita todos los parámetros:

  • pkey ruta a la clave privada
  • cert ruta al certificado X.509
  • cuit el número de CUIT para el que queremos emitir los comprobantes
  • sale_point el punto de venta a utilizar (ante la duda consulte a su contador)
  • default_concepto, default_documento y default_moneda estos valores pueden configurarse para no tener que pasarlos cada vez que emitamos un comprobante, ya que no suelen cambiar entre comprobantes emitidos por el mismo vendedor.
  • own_iva_cond condicion propia ante el IVA
  • openssl_bin path al ejecutable de OpenSSL

Ejemplo de configuración tomado del spec_helper de Bravo:

require 'bravo'

Bravo.pkey                           = 'spec/fixtures/certs/pkey'
Bravo.cert                           = 'spec/fixtures/certs/cert.crt'
Bravo.cuit                           = '20287740027'
Bravo.sale_point                     = '0002'
Bravo.default_concepto               = 'Productos y Servicios'
Bravo.default_documento              = 'CUIT'
Bravo.default_moneda                 = :peso
Bravo.own_iva_cond                   = :responsable_inscripto
Bravo.verbose                        = 'true'
Bravo.openssl_bin                    = '/usr/local/Cellar/openssl/1.0.1e/bin/openssl'
Bravo::AuthData.environment      = :test

Emisión de comprobantes

Para emitir un comprobante, basta con:

  • instanciar la clase Bill,
  • pasarle los parámetros típicos del comprobante, como si lo llenásemos a mano,
  • llamar el método authorize, para que el WSFE autorice el comprobante que acabamos de 'llenar':

Ejemplo

Luego de configurar Bravo, autorizamos una factura:

  • Comprobante: Factura
  • Tipo: 'B'
  • A: consumidor final
  • Total: $ 100 (si fuera una factura tipo A, este valor es el neto, y Bravo calcula el IVA correspondiente)

Código de ejemplo para la configuración anterior:

bill = Bravo::Bill.new

bill.net          = 100.00  # el neto de la factura, total para Consumidor final
bill.aliciva_id   = 2010    # define la alicuota de iva a utilizar, ver archivo constants.
bill.iva_cond     = :consumidor_final   # la condición ante el iva del     comprador
bill.concepto     = 'Servicios' # concepto de la factura
bill.invoice_type   = :invoice  # el tipo de comprobante a emitir, en este caso factura.

bill.authorize

bill.response.cae # contiene el cae para este comprobante.

TODO list

  • rdoc
  • mensajes de error más completos

Agradecimientos

  • Emilio Tagua por sus consejos y contribuciones.

Copyright (c) 2010 Leandro Marcucci & Vurbia Technologies International Inc. See LICENSE.txt for further details.