Class: Arca::VEConsumer

Inherits:
Object
  • Object
show all
Defined in:
lib/arca/ve_consumer.rb

Constant Summary collapse

WSDL =
{
  development: "https://stable-middleware-tecno-ext.afip.gob.ar/ve-ws/services/veconsumer?wsdl",
  production:  "https://infraestructura.afip.gob.ar/ve-ws/services/veconsumer?wsdl",
  test:        "#{Root}/test/fixtures/ve_consumer/ve_consumer.wsdl"
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ VEConsumer

Returns a new instance of VEConsumer.



17
18
19
20
21
22
23
24
25
# File 'lib/arca/ve_consumer.rb', line 17

def initialize(options = {})
  @cuit = normalize_cuit(options[:cuit])
  @wsaa = WSAA.new options.merge(service: "veconsumerws")
  @client = Client.new Hash(options[:savon]).reverse_merge(
    wsdl: WSDL[@wsaa.env],
    soap_version: 2,
    convert_request_keys_to: :camelcase
  )
end

Instance Attribute Details

#cuitObject (readonly)

Returns the value of attribute cuit.



15
16
17
# File 'lib/arca/ve_consumer.rb', line 15

def cuit
  @cuit
end

#wsaaObject (readonly)

Returns the value of attribute wsaa.



15
16
17
# File 'lib/arca/ve_consumer.rb', line 15

def wsaa
  @wsaa
end

Instance Method Details

#consultar_comunicaciones(filter = {}) ⇒ Object

Consulta comunicaciones del contribuyente con filtros opcionales. Claves opcionales del filter: estado, fecha_desde, fecha_hasta, comunicacion_id_desde, comunicacion_id_hasta, tiene_adjunto, sistema_publicador_id, pagina, resultados_por_pagina, referencia1, referencia2. Retorna un hash con :pagina, :total_paginas, :items_por_pagina, :total_items e :items (Array de ComunicacionSimplificada).



34
35
36
37
38
# File 'lib/arca/ve_consumer.rb', line 34

def consultar_comunicaciones(filter = {})
  r = raw_request(:consultar_comunicaciones, auth_request.merge(filter: filter))
  paginada = r[:respuesta_paginada]
  paginada.merge(items: get_array(paginada[:items], :comunicacion_simplificada))
end

#consultar_estadosObject

Lista los posibles estados de una comunicación. 1=No leída, 2=Leída.



66
67
68
69
# File 'lib/arca/ve_consumer.rb', line 66

def consultar_estados
  r = raw_request(:consultar_estados, auth_request)
  Array.wrap(r.dig(:estados, :estado))
end

#consultar_sistemas_publicadores(id_sistema_publicador: nil) ⇒ Object

Lista los sistemas publicadores habilitados en Ventanilla Electrónica. Con id_sistema_publicador filtra por sistema específico.



58
59
60
61
62
63
# File 'lib/arca/ve_consumer.rb', line 58

def consultar_sistemas_publicadores(id_sistema_publicador: nil)
  params = auth_request
  params = params.merge(id_sistema_publicador: id_sistema_publicador) if id_sistema_publicador
  r = raw_request(:consultar_sistemas_publicadores, params)
  Array.wrap(r.dig(:sistemas, :sistema))
end

#consumir_comunicacion(id_comunicacion, incluir_adjuntos: false) ⇒ Object

Recupera una comunicación por id y la marca como leída. Con incluir_adjuntos: true se incluyen los adjuntos vía MTOM en la respuesta; el contenido binario de cada adjunto queda en :content como String. Retorna la Comunicacion con :adjuntos como Array.

Raises:



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/arca/ve_consumer.rb', line 44

def consumir_comunicacion(id_comunicacion, incluir_adjuntos: false)
  response = client_request(:consumir_comunicacion, auth_request.merge(
    id_comunicacion: id_comunicacion,
    incluir_adjuntos: incluir_adjuntos
  ))
  resp = response.to_hash[:consumir_comunicacion_response]
  raise ServerError, "Unexpected response structure" unless resp

  comunicacion = resp[:comunicacion]
  comunicacion.merge(adjuntos: build_adjuntos(comunicacion[:adjuntos], response.attachments))
end