afipws 1.0.4 → 1.1.0
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 +4 -4
- data/Gemfile.lock +3 -3
- data/README.md +5 -3
- data/afipws.gemspec +1 -1
- data/lib/afipws.rb +2 -0
- data/lib/afipws/client.rb +1 -0
- data/lib/afipws/persona_service_a100.rb +43 -0
- data/lib/afipws/persona_service_a4.rb +24 -0
- data/lib/afipws/version.rb +1 -1
- data/lib/afipws/ws_base.rb +7 -1
- data/lib/afipws/ws_constancia_inscripcion.rb +2 -11
- data/lib/afipws/wsaa.rb +1 -1
- data/lib/afipws/wsfe.rb +14 -4
- data/spec/afipws/persona_service_a100_spec.rb +37 -0
- data/spec/afipws/persona_service_a4_spec.rb +23 -0
- data/spec/afipws/ws_constancia_inscripcion_spec.rb +13 -4
- data/spec/afipws/wsaa_spec.rb +1 -1
- data/spec/afipws/wsfe_spec.rb +12 -2
- data/spec/fixtures/constancia_inscripcion_get_persona/fault.xml +8 -0
- data/spec/fixtures/fe_param_get_tipos_concepto/success.xml +17 -0
- data/spec/fixtures/fe_param_get_tipos_opcional/success.xml +16 -0
- data/spec/fixtures/ws_sr_padron_a100.wsdl +125 -0
- data/spec/fixtures/ws_sr_padron_a100/company_types/success.xml +23 -0
- data/spec/fixtures/ws_sr_padron_a100/dummy/success.xml +11 -0
- data/spec/fixtures/ws_sr_padron_a100/jurisdictions/success.xml +31 -0
- data/spec/fixtures/ws_sr_padron_a100/public_organisms/success.xml +23 -0
- data/spec/fixtures/ws_sr_padron_a4.wsdl +229 -0
- data/spec/fixtures/ws_sr_padron_a4/dummy/success.xml +11 -0
- data/spec/fixtures/ws_sr_padron_a4/get_persona/success.xml +133 -0
- metadata +33 -6
- data/lib/afipws/wsdl/wsfev1.wsdl +0 -1372
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ed8e558f8cf41675bf7ba19aa0f8c0b6cc29bb5
|
4
|
+
data.tar.gz: 271002cc672721b11bce0c1824c011d518a264f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30ab4619718e0cd10b36d895868b8557a5b6a42b8463e66f61ba6ef1d2af6a7c18c8fc99fba06332db96ea2e2c88391bcd405df6417301c25b3e3c3ad9fec827
|
7
|
+
data.tar.gz: 13d842061c17115fe92fe8f14bcfd2df65240484ac95570178412b1d0a9d7ad8f77fa4272df83bb092e936bfcecadc1dbdc6ea3714f9aabf879dfecddccd99cc
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
afipws (1.0
|
4
|
+
afipws (1.1.0)
|
5
5
|
activesupport
|
6
6
|
builder
|
7
7
|
nokogiri
|
@@ -73,7 +73,7 @@ GEM
|
|
73
73
|
method_source (~> 0.9.0)
|
74
74
|
rack (2.0.6)
|
75
75
|
rainbow (3.0.0)
|
76
|
-
rake (
|
76
|
+
rake (10.4.2)
|
77
77
|
rb-fsevent (0.10.3)
|
78
78
|
rb-inotify (0.9.10)
|
79
79
|
ffi (>= 0.5.0, < 2)
|
@@ -126,7 +126,7 @@ DEPENDENCIES
|
|
126
126
|
afipws!
|
127
127
|
guard-rspec
|
128
128
|
mocha
|
129
|
-
|
129
|
+
pry
|
130
130
|
rspec
|
131
131
|
rubocop
|
132
132
|
|
data/README.md
CHANGED
@@ -6,9 +6,11 @@ Ruby client para los web services de la AFIP.
|
|
6
6
|
|
7
7
|
## Servicios Disponibles
|
8
8
|
|
9
|
-
* WSAA
|
10
|
-
* WSFE
|
11
|
-
*
|
9
|
+
* wsaa (WSAA)
|
10
|
+
* wsfe (WSFE)
|
11
|
+
* ws_sr_constancia_inscripcion (WSConstanciaInscripcion)
|
12
|
+
* ws_sr_padron_a100 (PersonaServiceA100)
|
13
|
+
* ws_sr_padron_a4 (PersonaServiceA4)
|
12
14
|
|
13
15
|
## Uso
|
14
16
|
|
data/afipws.gemspec
CHANGED
@@ -19,10 +19,10 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_development_dependency 'rspec'
|
22
|
-
s.add_development_dependency 'rake'
|
23
22
|
s.add_development_dependency 'mocha'
|
24
23
|
s.add_development_dependency 'guard-rspec'
|
25
24
|
s.add_development_dependency 'rubocop'
|
25
|
+
s.add_development_dependency 'pry'
|
26
26
|
s.add_dependency "builder"
|
27
27
|
s.add_dependency "savon", '~> 2.11.0'
|
28
28
|
s.add_dependency "nokogiri"
|
data/lib/afipws.rb
CHANGED
data/lib/afipws/client.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
module Afipws
|
2
|
+
class PersonaServiceA100 < WSBase
|
3
|
+
WSDL = {
|
4
|
+
development: 'https://awshomo.afip.gov.ar/sr-parametros/webservices/parameterServiceA100?WSDL',
|
5
|
+
production: 'https://aws.afip.gov.ar/sr-parametros/webservices/parameterServiceA100?WSDL',
|
6
|
+
test: Root + '/spec/fixtures/ws_sr_padron_a100.wsdl'
|
7
|
+
}.freeze
|
8
|
+
|
9
|
+
def initialize options = {}
|
10
|
+
super
|
11
|
+
@wsaa = WSAA.new options.merge(service: 'ws_sr_padron_a100')
|
12
|
+
@client = Client.new Hash(options[:savon]).reverse_merge(wsdl: WSDL[env], soap_version: 1)
|
13
|
+
end
|
14
|
+
|
15
|
+
def dummy
|
16
|
+
request(:dummy)[:return]
|
17
|
+
end
|
18
|
+
|
19
|
+
def jurisdictions
|
20
|
+
get_parameter_collection_by_name 'SUPA.E_PROVINCIA'
|
21
|
+
end
|
22
|
+
|
23
|
+
def company_types
|
24
|
+
get_parameter_collection_by_name 'SUPA.TIPO_EMPRESA_JURIDICA'
|
25
|
+
end
|
26
|
+
|
27
|
+
def public_organisms
|
28
|
+
get_parameter_collection_by_name 'SUPA.E_ORGANISMO_INFORMANTE'
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def get_parameter_collection_by_name type
|
34
|
+
message = {
|
35
|
+
token: auth[:token],
|
36
|
+
sign: auth[:sign],
|
37
|
+
cuitRepresentada: cuit,
|
38
|
+
collectionName: type
|
39
|
+
}
|
40
|
+
request(:get_parameter_collection_by_name, message)[:parameter_collection_return][:parameter_collection]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Afipws
|
2
|
+
class PersonaServiceA4 < WSBase
|
3
|
+
WSDL = {
|
4
|
+
development: 'https://awshomo.afip.gov.ar/sr-padron/webservices/personaServiceA4?WSDL',
|
5
|
+
production: 'https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA4?WSDL',
|
6
|
+
test: Root + '/spec/fixtures/ws_sr_padron_a4.wsdl'
|
7
|
+
}.freeze
|
8
|
+
|
9
|
+
def initialize options = {}
|
10
|
+
super
|
11
|
+
@wsaa = WSAA.new options.merge(service: 'ws_sr_padron_a4')
|
12
|
+
@client = Client.new Hash(options[:savon]).reverse_merge(wsdl: WSDL[env], soap_version: 1)
|
13
|
+
end
|
14
|
+
|
15
|
+
def dummy
|
16
|
+
request(:dummy)[:return]
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_persona id
|
20
|
+
message = auth.merge(cuitRepresentada: cuit, idPersona: id)
|
21
|
+
request(:get_persona, message)[:persona_return][:persona]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/afipws/version.rb
CHANGED
data/lib/afipws/ws_base.rb
CHANGED
@@ -3,10 +3,16 @@ module Afipws
|
|
3
3
|
extend Forwardable
|
4
4
|
|
5
5
|
attr_reader :wsaa, :client, :env
|
6
|
-
def_delegators :wsaa, :cuit
|
6
|
+
def_delegators :wsaa, :cuit, :auth
|
7
7
|
|
8
8
|
def initialize options = {}
|
9
9
|
@env = (options[:env] || :test).to_sym
|
10
10
|
end
|
11
|
+
|
12
|
+
def request action, body = nil
|
13
|
+
@client.request(action, body).to_hash[:"#{action}_response"]
|
14
|
+
rescue Savon::SOAPFault => f
|
15
|
+
raise WSError, f.message
|
16
|
+
end
|
11
17
|
end
|
12
18
|
end
|
@@ -17,17 +17,8 @@ module Afipws
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def get_persona id
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def auth
|
24
|
-
wsaa.auth.merge(cuit_representada: cuit)
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def request action, body = nil
|
30
|
-
@client.request(action, body).to_hash[:"#{action}_response"]
|
20
|
+
message = auth.merge(cuit_representada: cuit, id_persona: id)
|
21
|
+
request(:get_persona, message)[:persona_return]
|
31
22
|
end
|
32
23
|
end
|
33
24
|
end
|
data/lib/afipws/wsaa.rb
CHANGED
@@ -16,7 +16,7 @@ module Afipws
|
|
16
16
|
@ttl = options[:ttl] || 2400
|
17
17
|
@cuit = options[:cuit]
|
18
18
|
@client = Client.new Hash(options[:savon]).reverse_merge(wsdl: WSDL[@env])
|
19
|
-
@ta_path = File.join(Dir.pwd, 'tmp', "#{@cuit}-#{@env}-ta.dump")
|
19
|
+
@ta_path = File.join(Dir.pwd, 'tmp', "#{@cuit}-#{@env}-#{@service}-ta.dump")
|
20
20
|
end
|
21
21
|
|
22
22
|
def generar_tra service, ttl
|
data/lib/afipws/wsfe.rb
CHANGED
@@ -4,8 +4,7 @@ module Afipws
|
|
4
4
|
|
5
5
|
WSDL = {
|
6
6
|
development: 'https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL',
|
7
|
-
|
8
|
-
production: Root + '/lib/afipws/wsdl/wsfev1.wsdl',
|
7
|
+
production: 'https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL',
|
9
8
|
test: Root + '/spec/fixtures/wsfe.wsdl'
|
10
9
|
}.freeze
|
11
10
|
|
@@ -24,11 +23,21 @@ module Afipws
|
|
24
23
|
x2r get_array(r, :cbte_tipo), id: :integer, fch_desde: :date, fch_hasta: :date
|
25
24
|
end
|
26
25
|
|
26
|
+
def tipos_opcional
|
27
|
+
r = request :fe_param_get_tipos_opcional, auth
|
28
|
+
x2r get_array(r, :tipos_opcional), id: :integer, fch_desde: :date, fch_hasta: :date
|
29
|
+
end
|
30
|
+
|
27
31
|
def tipos_documentos
|
28
32
|
r = request :fe_param_get_tipos_doc, auth
|
29
33
|
x2r get_array(r, :doc_tipo), id: :integer, fch_desde: :date, fch_hasta: :date
|
30
34
|
end
|
31
35
|
|
36
|
+
def tipos_concepto
|
37
|
+
r = request :fe_param_get_tipos_concepto, auth
|
38
|
+
x2r get_array(r, :concepto_tipo), id: :integer, fch_desde: :date, fch_hasta: :date
|
39
|
+
end
|
40
|
+
|
32
41
|
def tipos_monedas
|
33
42
|
r = request :fe_param_get_tipos_monedas, auth
|
34
43
|
x2r get_array(r, :moneda), fch_desde: :date, fch_hasta: :date
|
@@ -63,12 +72,13 @@ module Afipws
|
|
63
72
|
}
|
64
73
|
}
|
65
74
|
}
|
66
|
-
|
75
|
+
mensaje = r2x(mensaje, cbte_fch: :date, fch_serv_desde: :date, fch_serv_hasta: :date, fch_vto_pago: :date)
|
76
|
+
r = request :fecae_solicitar, auth.merge(mensaje)
|
67
77
|
r = Array.wrap(r[:fe_det_resp][:fecae_det_response]).map do |h|
|
68
78
|
obs = Array.wrap(h[:observaciones] ? h[:observaciones][:obs] : nil)
|
69
79
|
h.select_keys(:cae, :cae_fch_vto, :resultado).merge(cbte_nro: h[:cbte_desde], observaciones: obs)
|
70
80
|
end
|
71
|
-
x2r r, cae_fch_vto: :date, cbte_nro: :integer, code: :integer
|
81
|
+
x2r r, cae_fch_vto: :date, fch_serv_desde: :date, fch_serv_hasta: :date, fch_vto_pago: :date, cbte_nro: :integer, code: :integer
|
72
82
|
end
|
73
83
|
|
74
84
|
def comprobante_to_request comprobante
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Afipws
|
4
|
+
describe PersonaServiceA100 do
|
5
|
+
let(:ta) { {token: 't', sign: 's'} }
|
6
|
+
let(:ws) { PersonaServiceA100.new(cuit: '12345678912').tap { |ws| ws.wsaa.stubs auth: ta } }
|
7
|
+
let(:message) { ta.merge cuitRepresentada: '12345678912' }
|
8
|
+
|
9
|
+
context 'métodos API' do
|
10
|
+
it 'dummy' do
|
11
|
+
savon.expects(:dummy).returns(fixture('ws_sr_padron_a100/dummy/success'))
|
12
|
+
ws.dummy.should == { appserver: 'OK', authserver: 'OK', dbserver: 'OK' }
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'jurisdictions' do
|
16
|
+
savon.expects(:get_parameter_collection_by_name)
|
17
|
+
.with(message: message.merge(collectionName: 'SUPA.E_PROVINCIA'))
|
18
|
+
.returns(fixture('ws_sr_padron_a100/jurisdictions/success'))
|
19
|
+
ws.jurisdictions.should have_entries name: 'SUPA.E_PROVINCIA'
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'company_types' do
|
23
|
+
savon.expects(:get_parameter_collection_by_name)
|
24
|
+
.with(message: message.merge(collectionName: 'SUPA.TIPO_EMPRESA_JURIDICA'))
|
25
|
+
.returns(fixture('ws_sr_padron_a100/company_types/success'))
|
26
|
+
ws.company_types.should have_entries name: 'SUPA.TIPO_EMPRESA_JURIDICA'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'public_organisms' do
|
30
|
+
savon.expects(:get_parameter_collection_by_name)
|
31
|
+
.with(message: message.merge(collectionName: 'SUPA.E_ORGANISMO_INFORMANTE'))
|
32
|
+
.returns(fixture('ws_sr_padron_a100/public_organisms/success'))
|
33
|
+
ws.public_organisms.should have_entries name: 'SUPA.E_ORGANISMO_INFORMANTE'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Afipws
|
4
|
+
describe PersonaServiceA4 do
|
5
|
+
let(:ta) { {token: 't', sign: 's'} }
|
6
|
+
let(:ws) { PersonaServiceA4.new(cuit: '12345678912').tap { |ws| ws.wsaa.stubs auth: ta } }
|
7
|
+
let(:message) { ta.merge cuitRepresentada: '12345678912' }
|
8
|
+
|
9
|
+
context 'métodos API' do
|
10
|
+
it 'dummy' do
|
11
|
+
savon.expects(:dummy).returns(fixture('ws_sr_padron_a4/dummy/success'))
|
12
|
+
ws.dummy.should == { appserver: 'OK', authserver: 'OK', dbserver: 'OK' }
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'get_persona' do
|
16
|
+
savon.expects(:get_persona)
|
17
|
+
.with(message: message.merge(idPersona: '98765432198'))
|
18
|
+
.returns(fixture('ws_sr_padron_a4/get_persona/success'))
|
19
|
+
ws.get_persona('98765432198').should have_entries apellido: 'ERNESTO DANIEL'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -4,7 +4,7 @@ module Afipws
|
|
4
4
|
describe WSConstanciaInscripcion do
|
5
5
|
let(:ta) { {token: 't', sign: 's'} }
|
6
6
|
let(:ws) { WSConstanciaInscripcion.new(cuit: '1').tap { |ws| ws.wsaa.stubs auth: ta } }
|
7
|
-
let(:
|
7
|
+
let(:message) { ta.merge cuit_representada: '1' }
|
8
8
|
|
9
9
|
context 'métodos API' do
|
10
10
|
it 'dummy' do
|
@@ -14,7 +14,7 @@ module Afipws
|
|
14
14
|
|
15
15
|
it 'debería devolver un hash con los datos generales y regímenes impositivos' do
|
16
16
|
savon.expects(:get_persona)
|
17
|
-
.with(message:
|
17
|
+
.with(message: message.merge(id_persona: '20294834487'))
|
18
18
|
.returns(fixture('constancia_inscripcion_get_persona/success'))
|
19
19
|
r = ws.get_persona '20294834487'
|
20
20
|
r[:datos_generales].should have_entries(
|
@@ -37,13 +37,22 @@ module Afipws
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'cuando hay errores en la constancia sigue la misma lógica' do
|
40
|
-
savon.expects(:get_persona)
|
41
|
-
|
40
|
+
savon.expects(:get_persona)
|
41
|
+
.with(message: message.merge(id_persona: '20294834489'))
|
42
|
+
.returns(fixture('constancia_inscripcion_get_persona/failure'))
|
43
|
+
r = ws.get_persona '20294834489'
|
42
44
|
r[:error_regimen_general].should have_entries(
|
43
45
|
error: 'El contribuyente cuenta con impuestos con baja de oficio por Decreto 1299/98',
|
44
46
|
mensaje: 'No cumple con las condiciones para enviar datos del regimen general'
|
45
47
|
)
|
46
48
|
end
|
49
|
+
|
50
|
+
it 'cuando no existe la persona' do
|
51
|
+
savon.expects(:get_persona)
|
52
|
+
.with(message: message.merge(id_persona: '123'))
|
53
|
+
.returns(fixture('constancia_inscripcion_get_persona/fault'))
|
54
|
+
-> { ws.get_persona '123' }.should raise_error WSError, /No existe persona con ese Id/
|
55
|
+
end
|
47
56
|
end
|
48
57
|
|
49
58
|
context 'entorno' do
|
data/spec/afipws/wsaa_spec.rb
CHANGED
data/spec/afipws/wsfe_spec.rb
CHANGED
@@ -25,6 +25,11 @@ module Afipws
|
|
25
25
|
ws.tipos_documentos.should == [{ id: 80, desc: 'CUIT', fch_desde: Date.new(2008, 7, 25), fch_hasta: nil }]
|
26
26
|
end
|
27
27
|
|
28
|
+
it 'tipos_concepto' do
|
29
|
+
savon.expects(:fe_param_get_tipos_concepto).with(message: auth).returns(fixture('fe_param_get_tipos_concepto/success'))
|
30
|
+
ws.tipos_concepto.should == [{ id: 1, desc: "Producto", fch_desde: Date.new(2008,7,25), fch_hasta: nil }]
|
31
|
+
end
|
32
|
+
|
28
33
|
it 'tipos_monedas' do
|
29
34
|
savon.expects(:fe_param_get_tipos_monedas).with(message: auth).returns(fixture('fe_param_get_tipos_monedas/success'))
|
30
35
|
ws.tipos_monedas.should == [
|
@@ -33,6 +38,11 @@ module Afipws
|
|
33
38
|
]
|
34
39
|
end
|
35
40
|
|
41
|
+
it 'tipos_opcional' do
|
42
|
+
savon.expects(:fe_param_get_tipos_opcional).with(message: auth).returns(fixture('fe_param_get_tipos_opcional/success'))
|
43
|
+
ws.tipos_opcional.should == []
|
44
|
+
end
|
45
|
+
|
36
46
|
it 'tipos_iva' do
|
37
47
|
savon.expects(:fe_param_get_tipos_iva).with(message: auth).returns(fixture('fe_param_get_tipos_iva/success'))
|
38
48
|
ws.tipos_iva.should == [{ id: 5, desc: '21%', fch_desde: Date.new(2009, 2, 20), fch_hasta: nil }]
|
@@ -235,7 +245,7 @@ module Afipws
|
|
235
245
|
end
|
236
246
|
|
237
247
|
context 'autenticacion' do
|
238
|
-
before { FileUtils.rm_rf Dir.glob('tmp
|
248
|
+
before { FileUtils.rm_rf Dir.glob('tmp/*-test-*-ta.dump') }
|
239
249
|
|
240
250
|
it 'debería autenticarse usando el WSAA' do
|
241
251
|
wsfe = WSFE.new cuit: '1', cert: 'cert', key: 'key'
|
@@ -260,7 +270,7 @@ module Afipws
|
|
260
270
|
|
261
271
|
it 'debería usar las url para production cuando el env es production' do
|
262
272
|
Client.expects(:new).with(wsdl: 'https://wsaa.afip.gov.ar/ws/services/LoginCms?wsdl')
|
263
|
-
Client.expects(:new).with(
|
273
|
+
Client.expects(:new).with(wsdl: 'https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL', convert_request_keys_to: :camelcase)
|
264
274
|
wsfe = WSFE.new env: 'production'
|
265
275
|
wsfe.env.should == :production
|
266
276
|
end
|
@@ -0,0 +1,17 @@
|
|
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
|
+
<FEParamGetTiposConceptoResponse xmlns="http://ar.gov.afip.dif.FEV1/">
|
4
|
+
<FEParamGetTiposConceptoResult>
|
5
|
+
<ResultGet>
|
6
|
+
<ConceptoTipo>
|
7
|
+
<Id>1</Id>
|
8
|
+
<Desc>Producto</Desc>
|
9
|
+
<FchDesde>20080725</FchDesde>
|
10
|
+
<FchHasta>NULL</FchHasta>
|
11
|
+
</ConceptoTipo>
|
12
|
+
</ResultGet>
|
13
|
+
</FEParamGetTiposConceptoResult>
|
14
|
+
</FEParamGetTiposConceptoResponse>
|
15
|
+
</soap:Body>
|
16
|
+
</soap:Envelope>
|
17
|
+
|
@@ -0,0 +1,16 @@
|
|
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
|
+
<FEParamGetTiposOpcionalResponse xmlns="http://ar.gov.afip.dif.FEV1/">
|
4
|
+
<FEParamGetTiposOpcionalResult>
|
5
|
+
<ResultGet>
|
6
|
+
<OpcionalTipo>
|
7
|
+
<Id>1</Id>
|
8
|
+
<Desc>Producto</Desc>
|
9
|
+
<FchDesde>20080725</FchDesde>
|
10
|
+
<FchHasta>NULL</FchHasta>
|
11
|
+
</OpcionalTipo>
|
12
|
+
</ResultGet>
|
13
|
+
</FEParamGetTiposOpcionalResult>
|
14
|
+
</FEParamGetTiposOpcionalResponse>
|
15
|
+
</soap:Body>
|
16
|
+
</soap:Envelope>
|