nfse_gyn 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +83 -0
- data/LICENSE.txt +21 -0
- data/README.md +113 -0
- data/Rakefile +12 -0
- data/bin/console +27 -0
- data/bin/setup +8 -0
- data/lib/nfse_gyn/configuration.rb +35 -0
- data/lib/nfse_gyn/consultar_nfse.rb +58 -0
- data/lib/nfse_gyn/gerar_nfse.rb +49 -0
- data/lib/nfse_gyn/gerar_nfse_xml.rb +120 -0
- data/lib/nfse_gyn/response.rb +31 -0
- data/lib/nfse_gyn/sanitizer.rb +17 -0
- data/lib/nfse_gyn/soap_client.rb +31 -0
- data/lib/nfse_gyn/version.rb +5 -0
- data/lib/nfse_gyn.rb +28 -0
- data/nfse_gyn.gemspec +30 -0
- data/spec/fixtures/ssl/cert.pem +17 -0
- data/spec/fixtures/ssl/key.pem +18 -0
- data/spec/fixtures/xmls/invalid_consultar_nfse_response.xml +21 -0
- data/spec/fixtures/xmls/invalid_gerar_nfse_response.xml +25 -0
- data/spec/fixtures/xmls/valid_consultar_nfse_request.xml +13 -0
- data/spec/fixtures/xmls/valid_consultar_nfse_response.xml +93 -0
- data/spec/fixtures/xmls/valid_gerar_nfse_request.xml +75 -0
- data/spec/fixtures/xmls/valid_gerar_nfse_response.xml +95 -0
- data/spec/lib/configuration_spec.rb +48 -0
- data/spec/lib/consultar_nfse_spec.rb +45 -0
- data/spec/lib/gerar_nfse_spec.rb +50 -0
- data/spec/lib/gerar_nfse_xml_spec.rb +145 -0
- data/spec/lib/sanitizer_spec.rb +15 -0
- data/spec/nfse_gyn_spec.rb +11 -0
- data/spec/spec_helper.rb +32 -0
- metadata +193 -0
data/nfse_gyn.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'lib/nfse_gyn/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'nfse_gyn'
|
7
|
+
spec.version = NfseGyn::VERSION
|
8
|
+
spec.authors = ['Ramon Vicente']
|
9
|
+
spec.email = ['ramonvic@me.com']
|
10
|
+
|
11
|
+
spec.summary = 'Gem para realizar a geração de NFSE em Goiânia'
|
12
|
+
spec.homepage = "https://github.com/ramonvic/nfse_gyn"
|
13
|
+
spec.license = 'MIT'
|
14
|
+
|
15
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
16
|
+
|
17
|
+
spec.files = `git ls-files`.split("\n")
|
18
|
+
spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_dependency 'activemodel', '~> 3.0'
|
23
|
+
spec.add_dependency 'savon', '~> 2.9'
|
24
|
+
spec.add_dependency 'signer', '~> 1.10'
|
25
|
+
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
27
|
+
spec.add_development_dependency 'pry'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rspec'
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICsDCCAhmgAwIBAgIJAOUHvh4oho0tMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
|
3
|
+
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
|
4
|
+
aWRnaXRzIFB0eSBMdGQwHhcNMTIwNTAzMTMxODIyWhcNMTMwNTAzMTMxODIyWjBF
|
5
|
+
MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
|
6
|
+
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
|
7
|
+
gQCvK5hMPv/R5IFmwWyJOyEaFUrF/ZsmN+Gip8hvR6rLP3YPNx9iFYvPcZllFmuV
|
8
|
+
wyaz7YT2N5BsqTwLdyi5v4HY4fUtuz0p8jIPoSd6dfDvcnSpf4QLTOgOaL3ciPEb
|
9
|
+
gDHH2tnIksukoWzqCYva+qFZ74NFl19swXotW9fA4Jzs4QIDAQABo4GnMIGkMB0G
|
10
|
+
A1UdDgQWBBRU1WEHDnP8Hr7ZulxrSzEwOcYpMzB1BgNVHSMEbjBsgBRU1WEHDnP8
|
11
|
+
Hr7ZulxrSzEwOcYpM6FJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUt
|
12
|
+
U3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAOUHvh4o
|
13
|
+
ho0tMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEASY/9SAOK57q9mGnN
|
14
|
+
JJeyDbmyGrAHSJTod646xTHYkMvhUqwHyk9PTr5bdfmswpmyVn+AQ43U2tU5vnpT
|
15
|
+
BmKpHWD2+HSHgGa92mMLrfBOd8EBZ329NL3N2HDPIaHr4NPGyhNrSK3QVOnAq2D0
|
16
|
+
jlyrGYJlLli1NxHiBz7FCEJaVI8=
|
17
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,18 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
Proc-Type: 4,ENCRYPTED
|
3
|
+
DEK-Info: DES-EDE3-CBC,D53BEDA3FEA82258
|
4
|
+
|
5
|
+
a9x4N5JZ6qwza28OAEBWyS4s4GysgbiJf11wX2e1Ol/rHt9/PGvZCK9PSyW/haRn
|
6
|
+
l5iT95n8Ohyr16Ngx/p02Jq3TEbs/Jsxz7+z55R5E3LvGKGZIB8Yh8dvI4ArzPsK
|
7
|
+
QiwoegJnSWdTQnfybbbpv+11RrKtb1/H0/i9fIHDJUhch9HwNn/yZGs9uYRxVBGe
|
8
|
+
OFLAdnCB+JG5Q5p24aWeYEWQLbYB69uc9kiV60qgfp4ZxRgdeU55eLZe48d9clG7
|
9
|
+
8vFAjM3+Q5WcgAgthKgD2HbjgcQ11WIZyHsshRvdWukk7iir7ogbOR/20sIWc+mY
|
10
|
+
hVdWfctYfWuheq7qwAfbvc8gSpgBRMziSI+5dFF4Ge80ahy7sxdlWJ4zNrqzTEIf
|
11
|
+
5CyN2cC6h8fbJ95bifJFUIKDi+rpkmFtnW4eh11BOL6vYlSFaL35Kw2teRmFCk6M
|
12
|
+
iBmIStavcfVj61ZClla3Xso5gl8Ei8EGBSuSSLT1Uq3WJ6eLh5JWkpV3+mir1HWO
|
13
|
+
vNIl6L4zm2kngwL73NFeG7ZFMTv2yAuif3Hpr3akZudp/+qDcIcnqnmY47HsOtOb
|
14
|
+
ArLwBalIu4zsKF5IzqGiZ6tbMgRHDbLw/HAuuYHlJF5TeMDqnQFGi09LpO6IHPBh
|
15
|
+
ZqVKuZ1LVLgCRpvkW12z0sxfByFHKK6RvgPgR9tPdVmCBJLwCbLa7AqNDVrJNe6q
|
16
|
+
OEwp95+7OTx1b7jVXiZ3wO0XpPWKAMXWAEGDd9YeNVdfXPgypSe4p/wJgtoCiPtz
|
17
|
+
Mm0NNYkrl2J/brj2jd5WRk6D2BWxf6pQKULzovTCX04pNxfLBBXBlQ==
|
18
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
4
|
+
<soap:Body>
|
5
|
+
<ConsultarNfseRpsResponse xmlns="http://nfse.goiania.go.gov.br/ws/">
|
6
|
+
<ConsultarNfseRpsResult>
|
7
|
+
<![CDATA[
|
8
|
+
<ConsultarNfseRpsResposta xmlns="http://nfse.goiania.go.gov.br/xsd/nfse_gyn_v02.xsd">
|
9
|
+
<ListaMensagemRetorno>
|
10
|
+
<MensagemRetorno>
|
11
|
+
<Codigo>L031</Codigo>
|
12
|
+
<Mensagem>RPS NAO ENCONTRADO</Mensagem>
|
13
|
+
<Correcao>RPS NAO ENCONTRADO</Correcao>
|
14
|
+
</MensagemRetorno>
|
15
|
+
</ListaMensagemRetorno>
|
16
|
+
</ConsultarNfseRpsResposta>
|
17
|
+
]]>
|
18
|
+
</ConsultarNfseRpsResult>
|
19
|
+
</ConsultarNfseRpsResponse>
|
20
|
+
</soap:Body>
|
21
|
+
</soap:Envelope>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
4
|
+
<soap:Body>
|
5
|
+
<GerarNfseResponse xmlns="http://nfse.goiania.go.gov.br/ws/">
|
6
|
+
<GerarNfseResult>
|
7
|
+
<![CDATA[
|
8
|
+
<GerarNfseResposta
|
9
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
10
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
11
|
+
xmlns="http://notacarioca.rio.gov.br/WSNacional/XSD/1/nfse_pcrj_v01.xsd">
|
12
|
+
<ListaMensagemRetorno
|
13
|
+
xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd">
|
14
|
+
<MensagemRetorno>
|
15
|
+
<Codigo>E10</Codigo>
|
16
|
+
<Mensagem>RPS já informado.</Mensagem>
|
17
|
+
<Correcao>Para essa Inscrição Municipal/CNPJ já existe um RPS informado com o mesmo número, série e tipo. </Correcao>
|
18
|
+
</MensagemRetorno>
|
19
|
+
</ListaMensagemRetorno>
|
20
|
+
</GerarNfseResposta>
|
21
|
+
]]>
|
22
|
+
</GerarNfseResult>
|
23
|
+
</GerarNfseResponse>
|
24
|
+
</soap:Body>
|
25
|
+
</soap:Envelope>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<ConsultarNfseRpsEnvio xmlns="http://nfse.goiania.go.gov.br/xsd/nfse_gyn_v02.xsd">
|
2
|
+
<IdentificacaoRps>
|
3
|
+
<Numero>14</Numero>
|
4
|
+
<Serie>TESTE</Serie>
|
5
|
+
<Tipo>1</Tipo>
|
6
|
+
</IdentificacaoRps>
|
7
|
+
<Prestador>
|
8
|
+
<CpfCnpj>
|
9
|
+
<Cnpj>46034125000133</Cnpj>
|
10
|
+
</CpfCnpj>
|
11
|
+
<InscricaoMunicipal>5671485</InscricaoMunicipal>
|
12
|
+
</Prestador>
|
13
|
+
</ConsultarNfseRpsEnvio>
|
@@ -0,0 +1,93 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
4
|
+
<soap:Body>
|
5
|
+
<ConsultarNfseRpsResponse xmlns="http://nfse.goiania.go.gov.br/ws/">
|
6
|
+
<ConsultarNfseRpsResult>
|
7
|
+
<![CDATA[
|
8
|
+
<ConsultarNfseRpsResposta xmlns="http://nfse.goiania.go.gov.br/xsd/nfse_gyn_v02.xsd">
|
9
|
+
<CompNfse>
|
10
|
+
<Nfse>
|
11
|
+
<InfNfse>
|
12
|
+
<Numero>370</Numero>
|
13
|
+
<CodigoVerificacao>MB94-C3ZA</CodigoVerificacao>
|
14
|
+
<DataEmissao>2011-08-30T00:00:00</DataEmissao>
|
15
|
+
<OutrasInformacoes>OUTRAS INFORMACOES SOBRE O SERVICO.</OutrasInformacoes>
|
16
|
+
<ValoresNfse>
|
17
|
+
<BaseCalculo>0</BaseCalculo>
|
18
|
+
<Aliquota>5</Aliquota>
|
19
|
+
<ValorIss>0</ValorIss>
|
20
|
+
</ValoresNfse>
|
21
|
+
<DeclaracaoPrestacaoServico>
|
22
|
+
<IdentificacaoRps>
|
23
|
+
<Numero>14</Numero>
|
24
|
+
<Serie>UNICA</Serie>
|
25
|
+
<Tipo>1</Tipo>
|
26
|
+
</IdentificacaoRps>
|
27
|
+
<DataEmissao>2011-08-30</DataEmissao>
|
28
|
+
<Competencia>2011-08-30T00:00:00</Competencia>
|
29
|
+
<Servico>
|
30
|
+
<Valores>
|
31
|
+
<ValorServicos>1000.00</ValorServicos>
|
32
|
+
<ValorDeducoes>1000</ValorDeducoes>
|
33
|
+
<ValorPis>0.00</ValorPis>
|
34
|
+
<ValorCofins>0.00</ValorCofins>
|
35
|
+
<ValorInss>0.00</ValorInss>
|
36
|
+
<ValorIr>0.00</ValorIr>
|
37
|
+
<ValorCsll>0.00</ValorCsll>
|
38
|
+
<ValorIss>0</ValorIss>
|
39
|
+
<Aliquota>5</Aliquota>
|
40
|
+
<DescontoIncondicionado>0.00</DescontoIncondicionado>
|
41
|
+
</Valores>
|
42
|
+
<IssRetido>2</IssRetido>
|
43
|
+
<CodigoTributacaoMunicipio>791120000</CodigoTributacaoMunicipio>
|
44
|
+
<Discriminacao>TESTE DE GERACAO OK.\\s\\nEM PRODUCAO, SUA NOTA SERIA GERADA SEM CRITICAS.\\s\\nOS
|
45
|
+
DADOS
|
46
|
+
DESSA NOTA SAO FICTICIOS.</Discriminacao>
|
47
|
+
<CodigoMunicipio>0025300</CodigoMunicipio>
|
48
|
+
<ExigibilidadeISS>1</ExigibilidadeISS>
|
49
|
+
<MunicipioIncidencia>0025300</MunicipioIncidencia>
|
50
|
+
</Servico>
|
51
|
+
<Prestador>
|
52
|
+
<IdentificacaoPrestador>
|
53
|
+
<CpfCnpj>
|
54
|
+
<Cnpj>02843557000110</Cnpj>
|
55
|
+
</CpfCnpj>
|
56
|
+
<InscricaoMunicipal>1300687</InscricaoMunicipal>
|
57
|
+
</IdentificacaoPrestador>
|
58
|
+
</Prestador>
|
59
|
+
<Tomador>
|
60
|
+
<IdentificacaoTomador>
|
61
|
+
<CpfCnpj>
|
62
|
+
<Cpf>88888888888</Cpf>
|
63
|
+
</CpfCnpj>
|
64
|
+
</IdentificacaoTomador>
|
65
|
+
<RazaoSocial>JOSE DA SILVA TOMADOR DO SERVICO</RazaoSocial>
|
66
|
+
<Endereco>
|
67
|
+
<Endereco>RUA DAS AMENDOEIRAS</Endereco>
|
68
|
+
<Numero>30</Numero>
|
69
|
+
<Complemento>LOTE 4</Complemento>
|
70
|
+
<Bairro>CENTRO</Bairro>
|
71
|
+
<CodigoMunicipio>0025300</CodigoMunicipio>
|
72
|
+
<Uf>GO</Uf>
|
73
|
+
<Cep>74823350</Cep>
|
74
|
+
</Endereco>
|
75
|
+
</Tomador>
|
76
|
+
<OptanteSimplesNacional>2</OptanteSimplesNacional>
|
77
|
+
</DeclaracaoPrestacaoServico>
|
78
|
+
</InfNfse>
|
79
|
+
<versao>2.0</versao>
|
80
|
+
</Nfse>
|
81
|
+
</CompNfse>
|
82
|
+
<ListaMensagemRetorno>
|
83
|
+
<MensagemRetorno>
|
84
|
+
<Codigo>L000</Codigo>
|
85
|
+
<Mensagem>NORMAL</Mensagem>
|
86
|
+
</MensagemRetorno>
|
87
|
+
</ListaMensagemRetorno>
|
88
|
+
</ConsultarNfseRpsResposta>
|
89
|
+
]]>
|
90
|
+
</ConsultarNfseRpsResult>
|
91
|
+
</ConsultarNfseRpsResponse>
|
92
|
+
</soap:Body>
|
93
|
+
</soap:Envelope>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<GerarNfseEnvio xmlns="http://nfse.goiania.go.gov.br/xsd/nfse_gyn_v02.xsd">
|
2
|
+
<Rps>
|
3
|
+
<InfDeclaracaoPrestacaoServico xmlns="http://nfse.goiania.go.gov.br/xsd/nfse_gyn_v02.xsd">
|
4
|
+
<Rps Id="3033">
|
5
|
+
<IdentificacaoRps>
|
6
|
+
<Numero>3033</Numero>
|
7
|
+
<Serie>TESTE</Serie>
|
8
|
+
<Tipo>1</Tipo>
|
9
|
+
</IdentificacaoRps>
|
10
|
+
<DataEmissao>2024-01-11T23:33:22</DataEmissao>
|
11
|
+
<Status>1</Status>
|
12
|
+
</Rps>
|
13
|
+
<Servico>
|
14
|
+
<Valores>
|
15
|
+
<ValorServicos>100.1</ValorServicos>
|
16
|
+
<Aliquota>2.0</Aliquota>
|
17
|
+
</Valores>
|
18
|
+
<CodigoTributacaoMunicipio>620150100</CodigoTributacaoMunicipio>
|
19
|
+
<Discriminacao>Teste de RPS</Discriminacao>
|
20
|
+
<CodigoMunicipio>0025300</CodigoMunicipio>
|
21
|
+
</Servico>
|
22
|
+
<Prestador>
|
23
|
+
<CpfCnpj>
|
24
|
+
<Cnpj>46034125000133</Cnpj>
|
25
|
+
</CpfCnpj>
|
26
|
+
<InscricaoMunicipal>5671485</InscricaoMunicipal>
|
27
|
+
</Prestador>
|
28
|
+
<Tomador>
|
29
|
+
<IdentificacaoTomador>
|
30
|
+
<CpfCnpj>
|
31
|
+
<Cnpj>98924674000187</Cnpj>
|
32
|
+
</CpfCnpj>
|
33
|
+
</IdentificacaoTomador>
|
34
|
+
<RazaoSocial>XPTO Tecnologia Ltda</RazaoSocial>
|
35
|
+
<Endereco>
|
36
|
+
<Endereco>Rua das Rosas</Endereco>
|
37
|
+
<Numero>111</Numero>
|
38
|
+
<Complemento>Sobre Loja</Complemento>
|
39
|
+
<Bairro>Centro</Bairro>
|
40
|
+
<CodigoMunicipio>0025300</CodigoMunicipio>
|
41
|
+
<Uf>GO</Uf>
|
42
|
+
<Cep>74672680</Cep>
|
43
|
+
</Endereco>
|
44
|
+
</Tomador>
|
45
|
+
</InfDeclaracaoPrestacaoServico>
|
46
|
+
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
47
|
+
<SignedInfo>
|
48
|
+
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
|
49
|
+
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
|
50
|
+
<Reference URI="#3033">
|
51
|
+
<Transforms>
|
52
|
+
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
|
53
|
+
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
|
54
|
+
</Transforms>
|
55
|
+
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
56
|
+
<DigestValue>5dog9yR3VI8Hkk0JGHIdZFHXXWo=</DigestValue>
|
57
|
+
</Reference>
|
58
|
+
</SignedInfo>
|
59
|
+
<SignatureValue>
|
60
|
+
icFX21VVyjXnX/C+dkGs1qXa0vleNKk25ycNUSb2MAUTidi1AApKdQEecG3AYaQVT4pfwUXCJzPCaSPNXn5kr+hk49j8dO0zo5wPyN6dhLT49WjkJQKPzA9wj/rl9Gs4kPp/rpOtSfsV3UlyjvMfEvmHlOZseg5XTRnAjIzm3oTWrRK5oRQmYm0TmeH3e7LHxC+DIXaIp6+o2DfTU5zvrmkokTs4r7owCTvn0Lox86JuUuU3RuwSix09lmrTGcm/L5eSq9CF+bNX1ovod33RILfR4ZQbK6RDo2Pbx55FyIuKUUqBqbIzZuntVQ3MalWmZi0Dj4dbhAG0z6Zu/1VpRw==
|
61
|
+
</SignatureValue>
|
62
|
+
<KeyInfo>
|
63
|
+
<X509Data>
|
64
|
+
<X509IssuerSerial>
|
65
|
+
<X509IssuerName>CN=AC SOLUTI Multipla v5,OU=AC SOLUTI v5,O=ICP-Brasil,C=BR</X509IssuerName>
|
66
|
+
<X509SerialNumber>1287505043903900170</X509SerialNumber>
|
67
|
+
</X509IssuerSerial>
|
68
|
+
<X509Certificate>
|
69
|
+
MIIHPzCCBSegAwIBAgIIEd4jBBRqagowDQYJKoZIhvcNAQELBQAwWTELMAkGA1UEBhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxFTATBgNVBAsTDEFDIFNPTFVUSSB2NTEeMBwGA1UEAxMVQUMgU09MVVRJIE11bHRpcGxhIHY1MB4XDTIzMDQxNDIwMDQwMFoXDTI0MDQxMzIwMDQwMFowgecxCzAJBgNVBAYTAkJSMRMwEQYDVQQKEwpJQ1AtQnJhc2lsMQswCQYDVQQIEwJHTzEQMA4GA1UEBxMHR29pYW5pYTEeMBwGA1UECxMVQUMgU09MVVRJIE11bHRpcGxhIHY1MRcwFQYDVQQLEw4wOTQ2MTY0NzAwMDE5NTEcMBoGA1UECxMTQ2VydGlmaWNhZG8gRGlnaXRhbDEaMBgGA1UECxMRQ2VydGlmaWNhZG8gUEogQTExMTAvBgNVBAMTKFJBTU9OIFYgREEgQyBFIFNJTFZBIExUREE6NDYwMzQxMjUwMDAxMzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQwWbe7QyUqDylDex1N6FYJhyOUlXm8sXP5PpJfE0GFW3MSaXF2t/+eygoOtwo7KMLKP5WXqRWvk/QQazGWm+5Rk/tOWKVrjIIZSnDnd6cutoq7iwWtBjKlcHZtAStwxuj5mGSB2LxSiHCAS/OB7oSJjKUgCx0cTksU6pXLTk1MGxpMMpQ4M+es0KvD9G7eh58sRD86fpKdOTRITyZozvhipsJVOU9lnfGJt6zWrbFZm8pP4B5qdVfpOCxUvUieQ/nyaIaBplBqvCzu77WLt5hXV36Y27Q8xHWOHVb8oqtwqZOoXZDR27rMlkMbA7vDKnEdPB0lSna9lSpE8JJR4PPAgMBAAGjggJ6MIICdjAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFMVS7SWACd+cgsifR8bdtF8x3bmxMFQGCCsGAQUFBwEBBEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL2NjZC5hY3NvbHV0aS5jb20uYnIvbGNyL2FjLXNvbHV0aS1tdWx0aXBsYS12NS5wN2IwgbUGA1UdEQSBrTCBqoEPcmFtb252aWNAbWUuY29toCkGBWBMAQMCoCATHlJBTU9OIFZJQ0VOVEUgREEgQ1VOSEEgRSBTSUxWQaAZBgVgTAEDA6AQEw40NjAzNDEyNTAwMDEzM6A4BgVgTAEDBKAvEy0wMzExMTk4ODAyNDY2ODYyMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDCgFwYFYEwBAwegDhMMMDAwMDAwMDAwMDAwMF0GA1UdIARWMFQwUgYGYEwBAgEmMEgwRgYIKwYBBQUHAgEWOmh0dHA6Ly9jY2QuYWNzb2x1dGkuY29tLmJyL2RvY3MvZHBjLWFjLXNvbHV0aS1tdWx0aXBsYS5wZGYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGMBgNVHR8EgYQwgYEwPqA8oDqGOGh0dHA6Ly9jY2QuYWNzb2x1dGkuY29tLmJyL2xjci9hYy1zb2x1dGktbXVsdGlwbGEtdjUuY3JsMD+gPaA7hjlodHRwOi8vY2NkMi5hY3NvbHV0aS5jb20uYnIvbGNyL2FjLXNvbHV0aS1tdWx0aXBsYS12NS5jcmwwHQYDVR0OBBYEFIxhyCzJJHG88DWSkNKmWEJ4EwKEMA4GA1UdDwEB/wQEAwIF4DANBgkqhkiG9w0BAQsFAAOCAgEAZi63W50ho5pIVBN2uQnOBFUIzP6BSUm9yZoPjGMervIL0liUobvvwaPsgQ/PSYoBXJS/cuYU5fEGgR5Ya7AupiLPdPYXFnr+dOzAlL1EyXwGiNLFXO1jKzZsYvLcm4oye27C08YAhTgLIJiFWqcdyvrJQh2PLhz8nRcVTiprL5pMSzhYsxm+gBpSTInnXDIHEjj/GMkAfJnwIhOHzbbubjhp/24uxWbXaPlwok500kn6XlL6JrPPYBsUN9dDWAWj9CcXF8CPiC3MndnbQnLFDQd+ofUr+IwXChLeKq29wVxK39d7DlFp842/EqkN5TPHzu4tkIx70lCsQ4cpXkw2Jz+KJ6RTNoOU9rtfkq0XOTHqoI0SCNMsnon1tYVujc/Bjo169eFEfO8GjvT9CGm0lT+inGO4f5vLYJm981XX6tScxk25Q9Z5ap8QObCOLS7i5u0BT/6Bm0TMUgpUzzvjjFYKWpAFEtiLMuOgfewR3WSblv/To1O4g7HYn2dpaNWRptue+8Rx8FREOxrfUaid5MzyMEDXJWULat0n5twRd6B2wIRc8SDLo1qr21uYkFAeKGT4k8PZLk2t/NXeWoslmeiR0SH98D/+TsZjkkrRXie0P3ef0fGe/nvjyzeDf22MZtV5iRAyHkBDrj+FDU1FhQ47we3xfIKAtjRwWKWYjI4=
|
70
|
+
</X509Certificate>
|
71
|
+
</X509Data>
|
72
|
+
</KeyInfo>
|
73
|
+
</Signature>
|
74
|
+
</Rps>
|
75
|
+
</GerarNfseEnvio>
|
@@ -0,0 +1,95 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
4
|
+
<soap:Body>
|
5
|
+
<GerarNfseResponse xmlns="http://nfse.goiania.go.gov.br/ws/">
|
6
|
+
<GerarNfseResult>
|
7
|
+
<![CDATA[
|
8
|
+
<GerarNfseResposta xmlns="http://nfse.goiania.go.gov.br/xsd/nfse_gyn_v02.xsd">
|
9
|
+
<ListaNfse>
|
10
|
+
<CompNfse>
|
11
|
+
<Nfse>
|
12
|
+
<InfNfse>
|
13
|
+
<Numero>370</Numero>
|
14
|
+
<CodigoVerificacao>MB94-C3ZA</CodigoVerificacao>
|
15
|
+
<DataEmissao>2011-08-30T00:00:00</DataEmissao>
|
16
|
+
<OutrasInformacoes>OUTRAS INFORMACOES SOBRE O SERVICO.</OutrasInformacoes>
|
17
|
+
<ValoresNfse>
|
18
|
+
<BaseCalculo>0</BaseCalculo>
|
19
|
+
<Aliquota>5</Aliquota>
|
20
|
+
<ValorIss>0</ValorIss>
|
21
|
+
</ValoresNfse>
|
22
|
+
<DeclaracaoPrestacaoServico>
|
23
|
+
<IdentificacaoRps>
|
24
|
+
<Numero>14</Numero>
|
25
|
+
<Serie>UNICA</Serie>
|
26
|
+
<Tipo>1</Tipo>
|
27
|
+
</IdentificacaoRps>
|
28
|
+
<DataEmissao>2011-08-30</DataEmissao>
|
29
|
+
<Competencia>2011-08-30T00:00:00</Competencia>
|
30
|
+
<Servico>
|
31
|
+
<Valores>
|
32
|
+
<ValorServicos>1000.00</ValorServicos>
|
33
|
+
<ValorDeducoes>1000</ValorDeducoes>
|
34
|
+
<ValorPis>0.00</ValorPis>
|
35
|
+
<ValorCofins>0.00</ValorCofins>
|
36
|
+
<ValorInss>0.00</ValorInss>
|
37
|
+
<ValorIr>0.00</ValorIr>
|
38
|
+
<ValorCsll>0.00</ValorCsll>
|
39
|
+
<ValorIss>0</ValorIss>
|
40
|
+
<Aliquota>5</Aliquota>
|
41
|
+
<DescontoIncondicionado>0.00</DescontoIncondicionado>
|
42
|
+
</Valores>
|
43
|
+
<IssRetido>2</IssRetido>
|
44
|
+
<CodigoTributacaoMunicipio>791120000</CodigoTributacaoMunicipio>
|
45
|
+
<Discriminacao>TESTE DE GERACAO OK.\\s\\nEM PRODUCAO, SUA NOTA SERIA GERADA SEM CRITICAS.\\s\\nOS
|
46
|
+
DADOS
|
47
|
+
DESSA NOTA SAO FICTICIOS.</Discriminacao>
|
48
|
+
<CodigoMunicipio>0025300</CodigoMunicipio>
|
49
|
+
<ExigibilidadeISS>1</ExigibilidadeISS>
|
50
|
+
<MunicipioIncidencia>0025300</MunicipioIncidencia>
|
51
|
+
</Servico>
|
52
|
+
<Prestador>
|
53
|
+
<IdentificacaoPrestador>
|
54
|
+
<CpfCnpj>
|
55
|
+
<Cnpj>02843557000110</Cnpj>
|
56
|
+
</CpfCnpj>
|
57
|
+
<InscricaoMunicipal>1300687</InscricaoMunicipal>
|
58
|
+
</IdentificacaoPrestador>
|
59
|
+
</Prestador>
|
60
|
+
<Tomador>
|
61
|
+
<IdentificacaoTomador>
|
62
|
+
<CpfCnpj>
|
63
|
+
<Cpf>88888888888</Cpf>
|
64
|
+
</CpfCnpj>
|
65
|
+
</IdentificacaoTomador>
|
66
|
+
<RazaoSocial>JOSE DA SILVA TOMADOR DO SERVICO</RazaoSocial>
|
67
|
+
<Endereco>
|
68
|
+
<Endereco>RUA DAS AMENDOEIRAS</Endereco>
|
69
|
+
<Numero>30</Numero>
|
70
|
+
<Complemento>LOTE 4</Complemento>
|
71
|
+
<Bairro>CENTRO</Bairro>
|
72
|
+
<CodigoMunicipio>0025300</CodigoMunicipio>
|
73
|
+
<Uf>GO</Uf>
|
74
|
+
<Cep>74823350</Cep>
|
75
|
+
</Endereco>
|
76
|
+
</Tomador>
|
77
|
+
<OptanteSimplesNacional>2</OptanteSimplesNacional>
|
78
|
+
</DeclaracaoPrestacaoServico>
|
79
|
+
</InfNfse>
|
80
|
+
<versao>2.0</versao>
|
81
|
+
</Nfse>
|
82
|
+
</CompNfse>
|
83
|
+
</ListaNfse>
|
84
|
+
<ListaMensagemRetorno>
|
85
|
+
<MensagemRetorno>
|
86
|
+
<Codigo>L000</Codigo>
|
87
|
+
<Mensagem>NORMAL</Mensagem>
|
88
|
+
</MensagemRetorno>
|
89
|
+
</ListaMensagemRetorno>
|
90
|
+
</GerarNfseResposta>
|
91
|
+
]]>
|
92
|
+
</GerarNfseResult>
|
93
|
+
</GerarNfseResponse>
|
94
|
+
</soap:Body>
|
95
|
+
</soap:Envelope>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe NfseGyn::Configuration do
|
4
|
+
context 'when not configured' do
|
5
|
+
before do
|
6
|
+
NfseGyn.configure do |config|
|
7
|
+
config.test_mode = false
|
8
|
+
config.cert_path = nil
|
9
|
+
config.ca_cert_path = nil
|
10
|
+
config.cert_key_path = nil
|
11
|
+
config.cert_key_password = nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
NfseGyn.reset!
|
17
|
+
end
|
18
|
+
|
19
|
+
it { expect(NfseGyn.configuration.cert_path).to be_nil }
|
20
|
+
it { expect(NfseGyn.configuration.ca_cert_path).to be_nil }
|
21
|
+
it { expect(NfseGyn.configuration.cert_key_path).to be_nil }
|
22
|
+
it { expect(NfseGyn.configuration.cert_key_password).to be_nil }
|
23
|
+
it { expect(NfseGyn.configuration.wsdl).to eq 'https://nfse.goiania.go.gov.br/ws/nfse.asmx?wsdl' }
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when configured' do
|
27
|
+
before do
|
28
|
+
NfseGyn.configure do |config|
|
29
|
+
config.test_mode = true
|
30
|
+
|
31
|
+
config.cert_path = '/my/string/path/to/certicate.pem'
|
32
|
+
config.ca_cert_path = '/my/string/path/to/ca/certicate.pem'
|
33
|
+
config.cert_key_path = '/my/string/path/to/certicate/key.pem'
|
34
|
+
config.cert_key_password = 'very-secure-encrypted-password'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
after do
|
39
|
+
NfseGyn.reset!
|
40
|
+
end
|
41
|
+
|
42
|
+
it { expect(NfseGyn.configuration.cert_path).to eq '/my/string/path/to/certicate.pem' }
|
43
|
+
it { expect(NfseGyn.configuration.ca_cert_path).to eq '/my/string/path/to/ca/certicate.pem' }
|
44
|
+
it { expect(NfseGyn.configuration.cert_key_path).to eq '/my/string/path/to/certicate/key.pem' }
|
45
|
+
it { expect(NfseGyn.configuration.cert_key_password).to eq 'very-secure-encrypted-password' }
|
46
|
+
it { expect(NfseGyn.configuration.wsdl).to eq 'https://nfse.goiania.go.gov.br/ws/nfse.asmx?wsdl' }
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'savon/mock/spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe NfseGyn::ConsultarNfse do
|
5
|
+
include Savon::SpecHelper
|
6
|
+
|
7
|
+
subject { described_class.new(invoice_number, invoice_serie, invoice_type) }
|
8
|
+
|
9
|
+
let(:invoice_number) { 1 }
|
10
|
+
let(:invoice_serie) { 'UNICA' }
|
11
|
+
let(:invoice_type) { 1 }
|
12
|
+
|
13
|
+
before(:all) { savon.mock! }
|
14
|
+
after(:all) { savon.unmock! }
|
15
|
+
|
16
|
+
describe '#execute!' do
|
17
|
+
let(:xml_payload) { File.read(fixture_file_path('xmls/valid_consultar_nfse_request.xml')) }
|
18
|
+
let(:request_payload) { "<ArquivoXML><![CDATA[#{xml_payload}]]></ArquivoXML>" }
|
19
|
+
|
20
|
+
before do
|
21
|
+
allow(subject).to receive(:to_xml).and_return(xml_payload)
|
22
|
+
savon.expects(:consultar_nfse_rps).with(message: request_payload).returns(response)
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'valid request' do
|
26
|
+
let(:response) { File.read(fixture_file_path('xmls/valid_consultar_nfse_response.xml'))}
|
27
|
+
|
28
|
+
it 'returns a valid response' do
|
29
|
+
expect(subject.execute!).to be_successful
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'invalid request' do
|
34
|
+
let(:response) { File.read(fixture_file_path('xmls/invalid_consultar_nfse_response.xml'))}
|
35
|
+
|
36
|
+
it 'returns a invalid response' do
|
37
|
+
expect(subject.execute!).to_not be_successful
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'returns a error message' do
|
41
|
+
expect(subject.execute!.error_message).to eq('RPS NAO ENCONTRADO')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'savon/mock/spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe NfseGyn::GerarNfse do
|
5
|
+
include Savon::SpecHelper
|
6
|
+
|
7
|
+
subject { described_class.new(nota_fiscal_info) }
|
8
|
+
|
9
|
+
let(:nota_fiscal_info) { {} }
|
10
|
+
|
11
|
+
before(:all) { savon.mock! }
|
12
|
+
after(:all) { savon.unmock! }
|
13
|
+
|
14
|
+
describe '#to_xml' do
|
15
|
+
it 'should call GerarNfseXML builder class' do
|
16
|
+
expect_any_instance_of(NfseGyn::GerarNfseXML).to receive(:to_xml).once
|
17
|
+
subject.to_xml
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#execute!' do
|
22
|
+
let(:xml_payload) { File.read(fixture_file_path('xmls/valid_gerar_nfse_request.xml')) }
|
23
|
+
let(:request_payload) { "<ArquivoXML><![CDATA[#{xml_payload}]]></ArquivoXML>" }
|
24
|
+
|
25
|
+
before do
|
26
|
+
allow(subject).to receive(:to_xml).and_return(xml_payload)
|
27
|
+
savon.expects(:gerar_nfse).with(message: request_payload).returns(response)
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'valid request' do
|
31
|
+
let(:response) { File.read(fixture_file_path('xmls/valid_gerar_nfse_response.xml'))}
|
32
|
+
|
33
|
+
it 'returns a valid response' do
|
34
|
+
expect(subject.execute!).to be_successful
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'invalid request' do
|
39
|
+
let(:response) { File.read(fixture_file_path('xmls/invalid_gerar_nfse_response.xml'))}
|
40
|
+
|
41
|
+
it 'returns a invalid response' do
|
42
|
+
expect(subject.execute!).to_not be_successful
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns a error message' do
|
46
|
+
expect(subject.execute!.error_message).to eq('Para essa Inscrição Municipal/CNPJ já existe um RPS informado com o mesmo número, série e tipo.')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|