arca.rb 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81ac40aba0c7a3e67dc24402f3888da7af56ab40d785511da1ca310b2a3054e5
4
- data.tar.gz: 41b29c0590307f836ccbe05d57d6f291382f0c545b6a8f1161533de6fcb24622
3
+ metadata.gz: 6517c164fca8807ad8878dc8018fcadeb29f396dda5fce495cc00066fe3b9dc2
4
+ data.tar.gz: '00228d35d622da5185625533a70f706137aea38bccb2786afa5bb7f32cc6ba88'
5
5
  SHA512:
6
- metadata.gz: ca0895cc00a9f1ebe502fb3021f1305b9073ce1d28b5bab672cac50e124ee2639d88f472659ad17819b6295069e6a28d10603cd48e5d2390eb7fd6b9fe69c03f
7
- data.tar.gz: 61c8e280fdd2f2d7e177e21fba6ddd5f2b46e25c1f98a98f93ead854e3ba747eb6c935723c5b02968c87913441152d7cdfd794369ac0ca7f6bd4c87d20542384
6
+ metadata.gz: fbb41496d151b830f7cd16093868867f7dc8e2434579465be1af9b8199defcdd55a6e2095514ca670612bb71acb35d5befc00c5940884208c22550f4c44e3dc4
7
+ data.tar.gz: 15b9016ea43562e7de76d24e30799bf4348f31f159ae45881088c0068360c4605691a541b355cfb51d645d78f00c743130cc51dc87f151daf7834b8b376d21cc
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Arca Changelog
2
2
 
3
+ ## [1.1.1] - 2025-02-20
4
+
5
+ - **WSFE:** Added `tipos_condicion_iva_receptor(clase_cmp: nil)` to query IVA receptor conditions with optional invoice class filter.
6
+ - **WSFE:** Added `actividades` to retrieve list of economic activities.
7
+ - **WSFE:** Added `consultar_caea_sin_movimientos(caea, pto_vta)` to query CAEA without movements.
8
+
9
+ ## [1.1.0]
10
+
11
+ - **WSAA:** Store opcional para TA. Podés pasar `store:` con un objeto que implemente `read(cuit:, env:, service:)` y `write(cuit:, env:, service:, ta:, expires_at:)` para guardar el token en tu backend (p. ej. DB por tenant con cifrado). Sin `store`, se sigue usando el archivo JSON en `tmp/`.
12
+
3
13
  ## [1.0.2] - 2025-02-09
4
14
 
5
15
  - **Errores:** En WSAA, `persist_ta` ahora encapsula fallos en `Arca::ServerError` en lugar de re-levantar excepciones crudas (mejor encapsulación y menos riesgo de filtrar datos sensibles en logs).
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- arca.rb (1.0.2)
4
+ arca.rb (1.1.1)
5
5
  activesupport
6
6
  builder
7
7
  httpclient
@@ -89,6 +89,8 @@ GEM
89
89
  nkf (0.2.0)
90
90
  nokogiri (1.19.0-aarch64-linux-gnu)
91
91
  racc (~> 1.4)
92
+ nokogiri (1.19.0-arm64-darwin)
93
+ racc (~> 1.4)
92
94
  nokogiri (1.19.0-x86_64-linux-gnu)
93
95
  racc (~> 1.4)
94
96
  nori (2.7.1)
@@ -165,6 +167,7 @@ GEM
165
167
 
166
168
  PLATFORMS
167
169
  aarch64-linux
170
+ arm64-darwin-24
168
171
  x86_64-linux
169
172
 
170
173
  DEPENDENCIES
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2025 ARCA Kit
1
+ Copyright (c) 2025 driveton
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -75,7 +75,7 @@ Opción del constructor: `env: :development` o `env: :production` (symbol o stri
75
75
 
76
76
  ## Uso
77
77
 
78
- Opciones comunes del constructor: `env`, `cuit`, `key`, `cert`. Opcionales: `savon` (hash pasado a Savon), `ta_path` (WSAA), etc.
78
+ Opciones comunes del constructor: `env`, `cuit`, `key`, `cert`. Opcionales: `savon` (hash pasado a Savon), `ta_path` (WSAA, path del archivo TA), `store` (WSAA, objeto con `read`/`write` para guardar TA en backend propio), etc.
79
79
 
80
80
  ### Cliente de bajo nivel (`Arca::Client`)
81
81
 
@@ -112,6 +112,11 @@ wsaa = Arca::WSAA.new(env: :development, cuit: '20123456789', key: key, cert: ce
112
112
  auth = wsaa.auth # => { token: '...', sign: '...' }
113
113
  ```
114
114
 
115
+ Opcionalmente podés pasar un **store** para guardar el TA en tu propio backend (por ejemplo DB por tenant con cifrado). Sin `store`, se usa un archivo JSON en `tmp/`. El store debe implementar:
116
+
117
+ - **`read(cuit:, env:, service:)`** — devuelve `nil` o un Hash con claves simbólicas: `:token`, `:sign`, `:generation_time`, `:expiration_time` (Time o string ISO8601).
118
+ - **`write(cuit:, env:, service:, ta:, expires_at:)`** — se invoca después de un `#login` exitoso; `ta` es el hash del TA y `expires_at` el Time de vencimiento.
119
+
115
120
  ### WSFE (Factura Electrónica)
116
121
  ```ruby
117
122
  ws = Arca::WSFE.new(env: :development, cuit: '20123456789', key: key, cert: cert)
data/lib/arca/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Arca
4
- VERSION = "1.0.2"
4
+ VERSION = "1.1.1"
5
5
  end
data/lib/arca/wsaa.rb CHANGED
@@ -4,7 +4,7 @@ require "json"
4
4
 
5
5
  module Arca
6
6
  class WSAA
7
- attr_reader :key, :cert, :service, :ta, :cuit, :client, :env
7
+ attr_reader :key, :cert, :service, :ta, :cuit, :client, :env, :store
8
8
 
9
9
  WSDL = {
10
10
  development: "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?wsdl",
@@ -20,6 +20,7 @@ module Arca
20
20
  @ttl = options[:ttl] || 2400
21
21
  @cuit = options[:cuit]
22
22
  @client = Client.new Hash(options[:savon]).reverse_merge(wsdl: WSDL[@env])
23
+ @store = options[:store]
23
24
  @ta_path = options[:ta_path] || default_ta_path
24
25
  end
25
26
 
@@ -79,6 +80,10 @@ module Arca
79
80
  end
80
81
 
81
82
  def restore_ta
83
+ if @store
84
+ return restore_ta_from_store
85
+ end
86
+
82
87
  return nil unless File.exist?(@ta_path) && !File.empty?(@ta_path)
83
88
 
84
89
  data = JSON.parse(File.read(@ta_path))
@@ -92,6 +97,27 @@ module Arca
92
97
  nil
93
98
  end
94
99
 
100
+ def restore_ta_from_store
101
+ h = @store.read(cuit: @cuit, env: @env, service: @service)
102
+ return nil if h.nil? || !h.is_a?(Hash)
103
+
104
+ {
105
+ token: h[:token],
106
+ sign: h[:sign],
107
+ generation_time: normalize_ta_time(h[:generation_time]),
108
+ expiration_time: normalize_ta_time(h[:expiration_time])
109
+ }
110
+ end
111
+
112
+ def normalize_ta_time(value)
113
+ return nil if value.nil?
114
+ return value if value.is_a?(Time)
115
+
116
+ Time.parse(value.to_s)
117
+ rescue ArgumentError
118
+ nil
119
+ end
120
+
95
121
  def ta_expirado?(ta)
96
122
  if ta.nil?
97
123
  true
@@ -103,6 +129,25 @@ module Arca
103
129
  end
104
130
 
105
131
  def persist_ta(ta)
132
+ if @store
133
+ begin
134
+ @store.write(
135
+ cuit: @cuit,
136
+ env: @env,
137
+ service: @service,
138
+ ta: ta,
139
+ expires_at: ta[:expiration_time]
140
+ )
141
+ rescue StandardError => e
142
+ raise ServerError, e
143
+ end
144
+ return
145
+ end
146
+
147
+ persist_ta_to_file(ta)
148
+ end
149
+
150
+ def persist_ta_to_file(ta)
106
151
  dir = File.dirname(@ta_path)
107
152
  FileUtils.mkdir_p(dir)
108
153
 
data/lib/arca/wsfe.rb CHANGED
@@ -60,11 +60,17 @@ module Arca
60
60
  x2r get_array(r, :tributo_tipo), id: :integer, fch_desde: :date, fch_hasta: :date
61
61
  end
62
62
 
63
- def tipos_condicion_iva_receptor
64
- r = request :fe_param_get_condicion_iva_receptor, auth
63
+ def tipos_condicion_iva_receptor(clase_cmp: nil)
64
+ params = clase_cmp ? auth.merge("ClaseCmp" => clase_cmp) : auth
65
+ r = request :fe_param_get_condicion_iva_receptor, params
65
66
  x2r get_array(r, :condicion_iva_receptor), id: :integer
66
67
  end
67
68
 
69
+ def actividades
70
+ r = request :fe_param_get_actividades, auth
71
+ x2r get_array(r, :actividades_tipo), id: :integer, orden: :integer
72
+ end
73
+
68
74
  def puntos_venta
69
75
  r = request :fe_param_get_ptos_venta, auth
70
76
  # Extract standard fields: nro, fch_baja, bloqueado
@@ -167,6 +173,11 @@ module Arca
167
173
  request :fecaea_sin_movimiento_informar, auth.merge("CAEA" => caea, "PtoVta" => pto_vta)
168
174
  end
169
175
 
176
+ def consultar_caea_sin_movimientos(caea, pto_vta)
177
+ r = request :fecaea_sin_movimiento_consultar, auth.merge("CAEA" => caea, "PtoVta" => pto_vta)
178
+ x2r get_array(r, :fecaea_sin_mov), pto_vta: :integer
179
+ end
180
+
170
181
  def ultimo_comprobante_autorizado(opciones)
171
182
  request(:fe_comp_ultimo_autorizado, auth.merge(opciones))[:cbte_nro].to_i
172
183
  end
@@ -86,5 +86,62 @@ module Arca
86
86
  assert_equal Errno::EACCES, error.cause.class
87
87
  assert_match(/Permission denied/, error.cause.message)
88
88
  end
89
+
90
+ def test_auth_con_store_usa_read_y_no_llama_login_si_ta_valido
91
+ Time.stubs(:now).returns(Time.local(2010, 1, 1))
92
+ ta = { token: "stored-token", sign: "stored-sign", generation_time: Time.now, expiration_time: Time.now + 3600 }
93
+ store = Object.new
94
+ store.expects(:read).with(cuit: "20123456789", env: :test, service: "wsfe").returns(ta)
95
+
96
+ ws = WSAA.new(cuit: "20123456789", env: :test, service: "wsfe", wsdl: Arca::WSFE::WSDL[:test], store: store)
97
+ ws.expects(:login).never
98
+
99
+ assert_equal({ token: "stored-token", sign: "stored-sign" }, ws.auth)
100
+ end
101
+
102
+ def test_auth_con_store_llama_login_y_write_cuando_read_devuelve_nil
103
+ Time.stubs(:now).returns(Time.local(2010, 1, 1))
104
+ ta = { token: "new-token", sign: "new-sign", generation_time: Time.now, expiration_time: Time.now + 60 }
105
+ store = Object.new
106
+ store.expects(:read).with(cuit: "20123456789", env: :test, service: "wsfe").returns(nil)
107
+ store.expects(:write).with(cuit: "20123456789", env: :test, service: "wsfe", ta: ta, expires_at: ta[:expiration_time]).returns(nil)
108
+
109
+ ws = WSAA.new(cuit: "20123456789", env: :test, service: "wsfe", wsdl: Arca::WSFE::WSDL[:test], store: store)
110
+ ws.expects(:login).returns(ta)
111
+
112
+ ws.auth
113
+ end
114
+
115
+ def test_auth_con_store_normaliza_tiempos_iso8601_de_read
116
+ Time.stubs(:now).returns(Time.local(2010, 1, 1))
117
+ gen_str = "2010-01-01T00:00:00-03:00"
118
+ exp_str = "2010-01-01T02:00:00-03:00"
119
+ store = Object.new
120
+ store.expects(:read).with(cuit: "20123456789", env: :test, service: "wsfe").returns({ token: "t", sign: "s", generation_time: gen_str, expiration_time: exp_str })
121
+
122
+ ws = WSAA.new(cuit: "20123456789", env: :test, service: "wsfe", wsdl: Arca::WSFE::WSDL[:test], store: store)
123
+ ws.expects(:login).never
124
+
125
+ ws.auth
126
+ assert_instance_of(Time, ws.ta[:generation_time])
127
+ assert_instance_of(Time, ws.ta[:expiration_time])
128
+ assert_equal(Time.parse(gen_str), ws.ta[:generation_time])
129
+ assert_equal(Time.parse(exp_str), ws.ta[:expiration_time])
130
+ end
131
+
132
+ def test_persist_ta_con_store_encapsula_errores_en_server_error
133
+ ta = { token: "t", sign: "s", generation_time: Time.now, expiration_time: Time.now + 60 }
134
+ store = Class.new do
135
+ def read(*) nil end
136
+ def write(*) raise Errno::EACCES, "Permission denied" end
137
+ end.new
138
+
139
+ ws = WSAA.new(cuit: "1", env: :test, service: "wsfe", wsdl: Arca::WSFE::WSDL[:test], store: store)
140
+ assert_same store, ws.store
141
+
142
+ error = assert_raises(ServerError) { ws.send(:persist_ta, ta) }
143
+ assert_equal Errno::EACCES, error.cause.class
144
+ assert_match(/Permission denied/, error.cause.message)
145
+ end
89
146
  end
90
147
  end
@@ -63,6 +63,28 @@ module Arca
63
63
  ws.tipos_tributos
64
64
  end
65
65
 
66
+ def test_tipos_condicion_iva_receptor
67
+ savon.expects(:fe_param_get_condicion_iva_receptor).with(message: auth)
68
+ .returns(fixture("wsfe/fe_param_get_condicion_iva_receptor/success"))
69
+ result = ws.tipos_condicion_iva_receptor
70
+ assert_equal 1, result.first[:id]
71
+ end
72
+
73
+ def test_tipos_condicion_iva_receptor_con_clase_cmp
74
+ savon.expects(:fe_param_get_condicion_iva_receptor)
75
+ .with(message: has_path("//Auth/Token" => "t", "//ClaseCmp" => "A"))
76
+ .returns(fixture("wsfe/fe_param_get_condicion_iva_receptor/success"))
77
+ ws.tipos_condicion_iva_receptor(clase_cmp: "A")
78
+ end
79
+
80
+ def test_actividades
81
+ savon.expects(:fe_param_get_actividades).with(message: auth).returns(fixture("wsfe/fe_param_get_actividades/success"))
82
+ assert_equal [
83
+ { id: 620000, orden: 1, desc: "Telecomunicaciones alámbricas" },
84
+ { id: 620100, orden: 2, desc: "Telecomunicaciones inalámbricas" }
85
+ ], ws.actividades
86
+ end
87
+
66
88
  def test_puntos_venta
67
89
  savon.expects(:fe_param_get_ptos_venta).with(message: auth).returns(fixture("wsfe/fe_param_get_ptos_venta/success"))
68
90
  assert_equal [
@@ -215,6 +237,14 @@ module Arca
215
237
  assert_hash_includes rta, caea: "21043476341977", resultado: "A"
216
238
  end
217
239
 
240
+ def test_consultar_caea_sin_movimientos
241
+ savon.expects(:fecaea_sin_movimiento_consultar).with(message: has_path(
242
+ "//Auth/Token" => "t", "//CAEA" => "21043476341977", "//PtoVta" => 3
243
+ )).returns(fixture("wsfe/fecaea_sin_movimiento_consultar/success"))
244
+ assert_equal [{ caea: "21043476341977", fch_proceso: "20110202", pto_vta: 3 }],
245
+ ws.consultar_caea_sin_movimientos("21043476341977", 3)
246
+ end
247
+
218
248
  def test_consultar_caea
219
249
  savon.expects(:fecaea_consultar).with(message: has_path("//Periodo" => "201101",
220
250
  "//Orden" => 1)).returns(fixture("wsfe/fecaea_consultar/success"))
@@ -0,0 +1,20 @@
1
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
2
+ <soap:Body>
3
+ <FEParamGetActividadesResponse xmlns="http://ar.gov.afip.dif.FEV1/">
4
+ <FEParamGetActividadesResult>
5
+ <ResultGet>
6
+ <ActividadesTipo>
7
+ <Id>620000</Id>
8
+ <Orden>1</Orden>
9
+ <Desc>Telecomunicaciones alámbricas</Desc>
10
+ </ActividadesTipo>
11
+ <ActividadesTipo>
12
+ <Id>620100</Id>
13
+ <Orden>2</Orden>
14
+ <Desc>Telecomunicaciones inalámbricas</Desc>
15
+ </ActividadesTipo>
16
+ </ResultGet>
17
+ </FEParamGetActividadesResult>
18
+ </FEParamGetActividadesResponse>
19
+ </soap:Body>
20
+ </soap:Envelope>
@@ -0,0 +1,14 @@
1
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
2
+ <soap:Body>
3
+ <FEParamGetCondicionIvaReceptorResponse xmlns="http://ar.gov.afip.dif.FEV1/">
4
+ <FEParamGetCondicionIvaReceptorResult>
5
+ <ResultGet>
6
+ <CondicionIvaReceptor>
7
+ <Id>1</Id>
8
+ <Desc>IVA Responsable Inscripto</Desc>
9
+ </CondicionIvaReceptor>
10
+ </ResultGet>
11
+ </FEParamGetCondicionIvaReceptorResult>
12
+ </FEParamGetCondicionIvaReceptorResponse>
13
+ </soap:Body>
14
+ </soap:Envelope>
@@ -0,0 +1,15 @@
1
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
2
+ <soap:Body>
3
+ <FECAEASinMovimientoConsultarResponse xmlns="http://ar.gov.afip.dif.FEV1/">
4
+ <FECAEASinMovimientoConsultarResult>
5
+ <ResultGet>
6
+ <FECAEASinMov>
7
+ <CAEA>21043476341977</CAEA>
8
+ <FchProceso>20110202</FchProceso>
9
+ <PtoVta>3</PtoVta>
10
+ </FECAEASinMov>
11
+ </ResultGet>
12
+ </FECAEASinMovimientoConsultarResult>
13
+ </FECAEASinMovimientoConsultarResponse>
14
+ </soap:Body>
15
+ </soap:Envelope>
@@ -629,6 +629,39 @@
629
629
  <s:element minOccurs="0" maxOccurs="1" name="FchHasta" type="s:string" />
630
630
  </s:sequence>
631
631
  </s:complexType>
632
+ <s:element name="FEParamGetCondicionIvaReceptor">
633
+ <s:complexType>
634
+ <s:sequence>
635
+ <s:element minOccurs="0" maxOccurs="1" name="Auth" type="tns:FEAuthRequest" />
636
+ <s:element minOccurs="0" maxOccurs="1" name="ClaseCmp" type="s:string" />
637
+ </s:sequence>
638
+ </s:complexType>
639
+ </s:element>
640
+ <s:element name="FEParamGetCondicionIvaReceptorResponse">
641
+ <s:complexType>
642
+ <s:sequence>
643
+ <s:element minOccurs="0" maxOccurs="1" name="FEParamGetCondicionIvaReceptorResult" type="tns:CondicionIvaReceptorResponse" />
644
+ </s:sequence>
645
+ </s:complexType>
646
+ </s:element>
647
+ <s:complexType name="CondicionIvaReceptorResponse">
648
+ <s:sequence>
649
+ <s:element minOccurs="0" maxOccurs="1" name="ResultGet" type="tns:ArrayOfCondicionIvaReceptor" />
650
+ <s:element minOccurs="0" maxOccurs="1" name="Errors" type="tns:ArrayOfErr" />
651
+ <s:element minOccurs="0" maxOccurs="1" name="Events" type="tns:ArrayOfEvt" />
652
+ </s:sequence>
653
+ </s:complexType>
654
+ <s:complexType name="ArrayOfCondicionIvaReceptor">
655
+ <s:sequence>
656
+ <s:element minOccurs="0" maxOccurs="unbounded" name="CondicionIvaReceptor" nillable="true" type="tns:CondicionIvaReceptor" />
657
+ </s:sequence>
658
+ </s:complexType>
659
+ <s:complexType name="CondicionIvaReceptor">
660
+ <s:sequence>
661
+ <s:element minOccurs="1" maxOccurs="1" name="Id" type="s:int" />
662
+ <s:element minOccurs="0" maxOccurs="1" name="Desc" type="s:string" />
663
+ </s:sequence>
664
+ </s:complexType>
632
665
  <s:element name="FEParamGetTiposOpcional">
633
666
  <s:complexType>
634
667
  <s:sequence>
@@ -799,6 +832,39 @@
799
832
  <s:element minOccurs="0" maxOccurs="1" name="FchHasta" type="s:string" />
800
833
  </s:sequence>
801
834
  </s:complexType>
835
+ <s:element name="FEParamGetActividades">
836
+ <s:complexType>
837
+ <s:sequence>
838
+ <s:element minOccurs="0" maxOccurs="1" name="Auth" type="tns:FEAuthRequest" />
839
+ </s:sequence>
840
+ </s:complexType>
841
+ </s:element>
842
+ <s:element name="FEParamGetActividadesResponse">
843
+ <s:complexType>
844
+ <s:sequence>
845
+ <s:element minOccurs="0" maxOccurs="1" name="FEParamGetActividadesResult" type="tns:ActividadesTipoResponse" />
846
+ </s:sequence>
847
+ </s:complexType>
848
+ </s:element>
849
+ <s:complexType name="ActividadesTipoResponse">
850
+ <s:sequence>
851
+ <s:element minOccurs="0" maxOccurs="1" name="ResultGet" type="tns:ArrayOfActividadesTipo" />
852
+ <s:element minOccurs="0" maxOccurs="1" name="Errors" type="tns:ArrayOfErr" />
853
+ <s:element minOccurs="0" maxOccurs="1" name="Events" type="tns:ArrayOfEvt" />
854
+ </s:sequence>
855
+ </s:complexType>
856
+ <s:complexType name="ArrayOfActividadesTipo">
857
+ <s:sequence>
858
+ <s:element minOccurs="0" maxOccurs="unbounded" name="ActividadesTipo" nillable="true" type="tns:ActividadesTipo" />
859
+ </s:sequence>
860
+ </s:complexType>
861
+ <s:complexType name="ActividadesTipo">
862
+ <s:sequence>
863
+ <s:element minOccurs="1" maxOccurs="1" name="Id" type="s:long" />
864
+ <s:element minOccurs="0" maxOccurs="1" name="Orden" type="s:short" />
865
+ <s:element minOccurs="0" maxOccurs="1" name="Desc" type="s:string" />
866
+ </s:sequence>
867
+ </s:complexType>
802
868
  </s:schema>
803
869
  </wsdl:types>
804
870
  <wsdl:message name="FECAESolicitarSoapIn">
@@ -885,6 +951,12 @@
885
951
  <wsdl:message name="FEParamGetTiposIvaSoapOut">
886
952
  <wsdl:part name="parameters" element="tns:FEParamGetTiposIvaResponse" />
887
953
  </wsdl:message>
954
+ <wsdl:message name="FEParamGetCondicionIvaReceptorSoapIn">
955
+ <wsdl:part name="parameters" element="tns:FEParamGetCondicionIvaReceptor" />
956
+ </wsdl:message>
957
+ <wsdl:message name="FEParamGetCondicionIvaReceptorSoapOut">
958
+ <wsdl:part name="parameters" element="tns:FEParamGetCondicionIvaReceptorResponse" />
959
+ </wsdl:message>
888
960
  <wsdl:message name="FEParamGetTiposOpcionalSoapIn">
889
961
  <wsdl:part name="parameters" element="tns:FEParamGetTiposOpcional" />
890
962
  </wsdl:message>
@@ -915,6 +987,12 @@
915
987
  <wsdl:message name="FEParamGetTiposDocSoapOut">
916
988
  <wsdl:part name="parameters" element="tns:FEParamGetTiposDocResponse" />
917
989
  </wsdl:message>
990
+ <wsdl:message name="FEParamGetActividadesSoapIn">
991
+ <wsdl:part name="parameters" element="tns:FEParamGetActividades" />
992
+ </wsdl:message>
993
+ <wsdl:message name="FEParamGetActividadesSoapOut">
994
+ <wsdl:part name="parameters" element="tns:FEParamGetActividadesResponse" />
995
+ </wsdl:message>
918
996
  <wsdl:portType name="ServiceSoap">
919
997
  <wsdl:operation name="FECAESolicitar">
920
998
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Solicitud de Código de Autorización Electrónico (CAE)</wsdl:documentation>
@@ -986,6 +1064,11 @@
986
1064
  <wsdl:input message="tns:FEParamGetTiposIvaSoapIn" />
987
1065
  <wsdl:output message="tns:FEParamGetTiposIvaSoapOut" />
988
1066
  </wsdl:operation>
1067
+ <wsdl:operation name="FEParamGetCondicionIvaReceptor">
1068
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Recupera el listado de condiciones de IVA del receptor.</wsdl:documentation>
1069
+ <wsdl:input message="tns:FEParamGetCondicionIvaReceptorSoapIn" />
1070
+ <wsdl:output message="tns:FEParamGetCondicionIvaReceptorSoapOut" />
1071
+ </wsdl:operation>
989
1072
  <wsdl:operation name="FEParamGetTiposOpcional">
990
1073
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Recupera el listado de identificadores para los campos Opcionales</wsdl:documentation>
991
1074
  <wsdl:input message="tns:FEParamGetTiposOpcionalSoapIn" />
@@ -1011,6 +1094,11 @@
1011
1094
  <wsdl:input message="tns:FEParamGetTiposDocSoapIn" />
1012
1095
  <wsdl:output message="tns:FEParamGetTiposDocSoapOut" />
1013
1096
  </wsdl:operation>
1097
+ <wsdl:operation name="FEParamGetActividades">
1098
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Recupera el listado de actividades habilitadas del emisor.</wsdl:documentation>
1099
+ <wsdl:input message="tns:FEParamGetActividadesSoapIn" />
1100
+ <wsdl:output message="tns:FEParamGetActividadesSoapOut" />
1101
+ </wsdl:operation>
1014
1102
  </wsdl:portType>
1015
1103
  <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
1016
1104
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
@@ -1140,6 +1228,15 @@
1140
1228
  <soap:body use="literal" />
1141
1229
  </wsdl:output>
1142
1230
  </wsdl:operation>
1231
+ <wsdl:operation name="FEParamGetCondicionIvaReceptor">
1232
+ <soap:operation soapAction="http://ar.gov.afip.dif.FEV1/FEParamGetCondicionIvaReceptor" style="document" />
1233
+ <wsdl:input>
1234
+ <soap:body use="literal" />
1235
+ </wsdl:input>
1236
+ <wsdl:output>
1237
+ <soap:body use="literal" />
1238
+ </wsdl:output>
1239
+ </wsdl:operation>
1143
1240
  <wsdl:operation name="FEParamGetTiposOpcional">
1144
1241
  <soap:operation soapAction="http://ar.gov.afip.dif.FEV1/FEParamGetTiposOpcional" style="document" />
1145
1242
  <wsdl:input>
@@ -1185,6 +1282,15 @@
1185
1282
  <soap:body use="literal" />
1186
1283
  </wsdl:output>
1187
1284
  </wsdl:operation>
1285
+ <wsdl:operation name="FEParamGetActividades">
1286
+ <soap:operation soapAction="http://ar.gov.afip.dif.FEV1/FEParamGetActividades" style="document" />
1287
+ <wsdl:input>
1288
+ <soap:body use="literal" />
1289
+ </wsdl:input>
1290
+ <wsdl:output>
1291
+ <soap:body use="literal" />
1292
+ </wsdl:output>
1293
+ </wsdl:operation>
1188
1294
  </wsdl:binding>
1189
1295
  <wsdl:binding name="ServiceSoap12" type="tns:ServiceSoap">
1190
1296
  <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
@@ -1314,6 +1420,15 @@
1314
1420
  <soap12:body use="literal" />
1315
1421
  </wsdl:output>
1316
1422
  </wsdl:operation>
1423
+ <wsdl:operation name="FEParamGetCondicionIvaReceptor">
1424
+ <soap12:operation soapAction="http://ar.gov.afip.dif.FEV1/FEParamGetCondicionIvaReceptor" style="document" />
1425
+ <wsdl:input>
1426
+ <soap12:body use="literal" />
1427
+ </wsdl:input>
1428
+ <wsdl:output>
1429
+ <soap12:body use="literal" />
1430
+ </wsdl:output>
1431
+ </wsdl:operation>
1317
1432
  <wsdl:operation name="FEParamGetTiposOpcional">
1318
1433
  <soap12:operation soapAction="http://ar.gov.afip.dif.FEV1/FEParamGetTiposOpcional" style="document" />
1319
1434
  <wsdl:input>
@@ -1359,6 +1474,15 @@
1359
1474
  <soap12:body use="literal" />
1360
1475
  </wsdl:output>
1361
1476
  </wsdl:operation>
1477
+ <wsdl:operation name="FEParamGetActividades">
1478
+ <soap12:operation soapAction="http://ar.gov.afip.dif.FEV1/FEParamGetActividades" style="document" />
1479
+ <wsdl:input>
1480
+ <soap12:body use="literal" />
1481
+ </wsdl:input>
1482
+ <wsdl:output>
1483
+ <soap12:body use="literal" />
1484
+ </wsdl:output>
1485
+ </wsdl:operation>
1362
1486
  </wsdl:binding>
1363
1487
  <wsdl:service name="Service">
1364
1488
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Web Service orientado al servicio de Facturacion electronica RG2485 V1</wsdl:documentation>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arca.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arca Kit
@@ -248,6 +248,8 @@ files:
248
248
  - test/fixtures/wsfe/fe_comp_tot_x_request/success.xml
249
249
  - test/fixtures/wsfe/fe_comp_ultimo_autorizado/success.xml
250
250
  - test/fixtures/wsfe/fe_dummy/success.xml
251
+ - test/fixtures/wsfe/fe_param_get_actividades/success.xml
252
+ - test/fixtures/wsfe/fe_param_get_condicion_iva_receptor/success.xml
251
253
  - test/fixtures/wsfe/fe_param_get_cotizacion/dolar.xml
252
254
  - test/fixtures/wsfe/fe_param_get_cotizacion/inexistente.xml
253
255
  - test/fixtures/wsfe/fe_param_get_ptos_venta/success.xml
@@ -266,6 +268,7 @@ files:
266
268
  - test/fixtures/wsfe/fecae_solicitar/una_observacion.xml
267
269
  - test/fixtures/wsfe/fecaea_consultar/success.xml
268
270
  - test/fixtures/wsfe/fecaea_reg_informativo/informe_rtdo_parcial.xml
271
+ - test/fixtures/wsfe/fecaea_sin_movimiento_consultar/success.xml
269
272
  - test/fixtures/wsfe/fecaea_sin_movimiento_informar/success.xml
270
273
  - test/fixtures/wsfe/fecaea_solicitar/caea_ya_otorgado.xml
271
274
  - test/fixtures/wsfe/fecaea_solicitar/error_distinto.xml