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.
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.
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.
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.
Luego de haber obtenido el certificado X.509, podemos comenzar a utilizar Bravo en el entorno para el cual sirve el certificado.
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 privadacert
ruta al certificado X.509cuit
el número de CUIT para el que queremos emitir los comprobantessale_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 IVAopenssl_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
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':
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:
factura = Bravo::Bill.new
factura.net = 100.00 # el neto de la factura, total para Consumidor final
factura.aliciva_id = 2 # define la alicuota de iva a utilizar, ver archivo constants.
factura.iva_cond = :consumidor_final # la condición ante el iva del comprador
factura.concepto = 'Servicios' # concepto de la factura
factura.invoice_type = :invoice # el tipo de comprobante a emitir, en este caso factura.
bill.authorize
bill.response.cae # contiene el cae para este comprobante.
rdoc- mensajes de error más completos
- Emilio Tagua por sus consejos y contribuciones.
Copyright (c) 2010 Leandro Marcucci & Vurbia Technologies International Inc. See LICENSE.txt for further details.