Crear Factura Electrónica de ARCA en Ruby
Con pocas líneas de código

Si es tu primera vez conectándote con la facturación electrónica de ARCA, te recomiendo leer esta guía básica sobre su funcionamiento general.

Conectar tu sistema con la facturación electrónica de ARCA
Guía paso a paso
El primer paso para crear una factura electrónica de ARCA es obtener el Código de Autorización Electrónico o CAE.
Esto lo vamos a hacer utilizando Afip SDK que nos permite conectarnos a los web services de ARCA sin complicarnos con el uso de SOAP y la autenticación.
Instalación
Lo primero es instalar la librería Afip.rb
Gemfile
gem 'afip.rb', '~> 1.0', '>= 1.0.1'
Gem
gem install afip.rb
Creamos una instancia de la clase Afip
Para usar los web services de ARCA, se requiere un certificado digital, con Afip SDK puedes integrarte en modo desarrollo usando el CUIT 20409378472
sin necesidad de obtener un certificado, para poder integrarte lo más rápido posible.
Te dejo este enlace por si luego quieres usar tu propio certificado para desarrollo.
require "afip"
# CUIT vinculado al certificado
CUIT = 20409378472
afip = Afip.new({ "CUIT": CUIT })
Crear la factura
Vamos a crear una Factura B por un importe de $121
data = {
"CantReg": 1, # Cantidad de comprobantes a registrar
"PtoVta": 1, # Punto de venta
"CbteTipo": 6, # Tipo de comprobante (ver tipos disponibles)
"Concepto": 1, # Concepto del Comprobante: (1)Productos, (2)Servicios, (3)Productos y Servicios
"DocTipo": 99, # Tipo de documento del comprador (99 consumidor final, ver tipos disponibles)
"DocNro": 0, # Número de documento del comprador (0 consumidor final)
"CbteDesde": 1, # Número de comprobante o numero del primer comprobante en caso de ser mas de uno
"CbteHasta": 1, # Número de comprobante o numero del último comprobante en caso de ser mas de uno
"CbteFch": 20240101, # (Opcional) Fecha del comprobante (yyyymmdd) o fecha actual si es nulo
"ImpTotal": 121, # Importe total del comprobante
"ImpTotConc": 0, # Importe neto no gravado
"ImpNeto": 100, # Importe neto gravado
"ImpOpEx": 0, # Importe exento de IVA
"ImpIVA": 21, #Importe total de IVA
"ImpTrib": 0, #Importe total de tributos
"MonId": "PES", #Tipo de moneda usada en el comprobante (ver tipos disponibles)("PES" para pesos argentinos)
"MonCotiz": 1, # Cotización de la moneda usada (1 para pesos argentinos)
"Iva" : [ # (Opcional) Alícuotas asociadas al comprobante
{
"Id" : 5, # Id del tipo de IVA (5 para 21%)(ver tipos disponibles)
"BaseImp": 100, # Base imponible
"Importe": 21 # Importe
}
]
}
res = afip.ElectronicBilling.createVoucher(data)
Y por último mostramos el CAE y su vencimiento por pantalla.
puts res["CAE"] # CAE asignado el comprobante
puts res["CAEFchVto"] # Fecha de vencimiento del CAE (yyyy-mm-dd)
Problemas comunes
Si estas teniendo el error (10016) El numero o fecha del comprobante no se corresponde con el proximo a autorizar te recomiendo leer este artículo.

Error (10016) El numero o fecha del comprobante no se corresponde con el proximo a autorizar
Pasos para resolver este error
Si estas teniendo el error (10242) El campo Condicion IVA receptor es obligatorio. Consular metodo FEParamGetCondicionIvaReceptor te recomiendo leer este artículo.

Error (10242) El campo Condicion IVA receptor no es un valor valido/es obligatorio
Pasos para resolver este error
Ahora que tenemos el CAE ya podemos proceder a Crear PDF de ARCA en Ruby.
Luego, lo único que nos queda es pasar a modo producción, para más información de cómo hacerlo pueden dirigirse a la documentación de la librería https://docs.afipsdk.com/
Ante cualquier duda o pregunta al respecto, pueden resolverla rápidamente dentro de la Comunidad Afip SDK. Además, puedes unirte para estar al tanto de las novedades y problemas técnicos al usar los servicios de ARCA.