Browse Source

Layout de lote Ginfes

pull/46/head
Danimar Ribeiro 9 years ago
parent
commit
01ae8a22d4
  1. 18
      pytrustnfe/nfe/assinatura.py
  2. 52
      pytrustnfe/nfse/ginfes/__init__.py
  3. 12
      pytrustnfe/nfse/ginfes/templates/CancelarNfseV3.xml
  4. 9
      pytrustnfe/nfse/ginfes/templates/ConsultarLoteRpsV3.xml
  5. 6
      pytrustnfe/nfse/ginfes/templates/ConsultarSituacaoLoteRpsV3.xml
  6. 18
      pytrustnfe/nfse/ginfes/templates/RecepcionarLoteRpsV3.xml
  7. 125
      pytrustnfe/nfse/ginfes/templates/Rps.xml
  8. 44
      pytrustnfe/nfse/simpliss/__init__.py
  9. 14
      pytrustnfe/nfse/simpliss/templates/CancelarNfse.xml
  10. 10
      pytrustnfe/nfse/simpliss/templates/ConsultarLoteRps.xml
  11. 10
      pytrustnfe/nfse/simpliss/templates/ConsultarSituacaoLoteRps.xml
  12. 2
      pytrustnfe/nfse/simpliss/templates/RecepcionarLoteRps.xml
  13. 8
      pytrustnfe/nfse/simpliss/templates/Rps.xml
  14. 1
      pytrustnfe/test/test_ginfes.py
  15. 2
      pytrustnfe/test/test_simpliss.py

18
pytrustnfe/nfe/assinatura.py

@ -30,14 +30,16 @@ class Assinatura(object):
ns[None] = signer.namespaces['ds']
signer.namespaces = ns
ref_uri = ('#%s' % reference) if reference else None
signed_root = signer.sign(
xml_element, key=key, cert=cert,
reference_uri=('#%s' % reference))
element_signed = signed_root.find(".//*[@Id='%s']" % reference)
signature = signed_root.find(
".//{http://www.w3.org/2000/09/xmldsig#}Signature")
if element_signed is not None and signature is not None:
parent = element_signed.getparent()
parent.append(signature)
reference_uri=ref_uri)
if reference:
element_signed = signed_root.find(".//*[@Id='%s']" % reference)
signature = signed_root.find(
".//{http://www.w3.org/2000/09/xmldsig#}Signature")
if element_signed is not None and signature is not None:
parent = element_signed.getparent()
parent.append(signature)
return etree.tostring(signed_root)

52
pytrustnfe/nfse/ginfes/__init__.py

@ -4,16 +4,27 @@
import os
import suds
from lxml import etree
from pytrustnfe.xml import render_xml, sanitize_response
from pytrustnfe.client import get_authenticated_client
from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key
from pytrustnfe.nfse.assinatura import Assinatura
from pytrustnfe.nfe.assinatura import Assinatura
def _send(certificado, method, **kwargs):
def _render(certificado, method, **kwargs):
path = os.path.join(os.path.dirname(__file__), 'templates')
xml_send = render_xml(path, '%s.xml' % method, False, **kwargs)
xml_send = render_xml(path, '%s.xml' % method, True, **kwargs)
reference = ''
if method == 'RecepcionarLoteRpsV3':
reference = 'rps%s' % kwargs['nfse']['lista_rps'][0]['numero']
signer = Assinatura(certificado.pfx, certificado.password)
xml_send = signer.assina_xml(xml_send, reference)
return xml_send
def _send(certificado, method, **kwargs):
base_url = ''
if kwargs['ambiente'] == 'producao':
base_url = 'https://producao.ginfes.com.br/ServiceGinfesImpl?wsdl'
@ -23,14 +34,9 @@ def _send(certificado, method, **kwargs):
cert, key = extract_cert_and_key_from_pfx(
certificado.pfx, certificado.password)
cert, key = save_cert_key(cert, key)
client = get_authenticated_client(base_url, cert, key)
pfx_path = certificado.save_pfx()
signer = Assinatura(pfx_path, certificado.password)
xml_send = signer.assina_xml(xml_send, '')
try:
xml_send = kwargs['xml']
header = '<ns2:cabecalho xmlns:ns2="http://www.ginfes.com.br/cabecalho_v03.xsd" versao="3"><versaoDados>3</versaoDados></ns2:cabecalho>' #noqa
response = getattr(client.service, method)(header, xml_send)
except suds.WebFault, e:
@ -48,11 +54,23 @@ def _send(certificado, method, **kwargs):
}
def envio_lote_rps(certificado, **kwargs):
def xml_recepcionar_lote_rps(certificado, **kwargs):
return _render(certificado, 'RecepcionarLoteRpsV3', **kwargs)
def recepcionar_lote_rps(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_recepcionar_lote_rps(certificado, **kwargs)
return _send(certificado, 'RecepcionarLoteRpsV3', **kwargs)
def xml_consultar_situacao_lote(certificado, **kwargs):
return _render(certificado, 'ConsultarSituacaoLoteRpsV3', **kwargs)
def consultar_situacao_lote(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_consultar_situacao_lote(certificado, **kwargs)
return _send(certificado, 'ConsultarSituacaoLoteRpsV3', **kwargs)
@ -60,7 +78,13 @@ def consultar_nfse_por_rps(certificado, **kwargs):
return _send(certificado, 'ConsultarNfsePorRpsV3', **kwargs)
def consultar_lote(certificado, **kwargs):
def xml_consultar_lote_rps(certificado, **kwargs):
return _render(certificado, 'ConsultarLoteRpsV3', **kwargs)
def consultar_lote_rps(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_consultar_lote_rps(certificado, **kwargs)
return _send(certificado, 'ConsultarLoteRpsV3', **kwargs)
@ -68,5 +92,11 @@ def consultar_nfse(certificado, **kwargs):
return _send(certificado, 'ConsultarNfseV3', **kwargs)
def xml_cancelar_nfse(certificado, **kwargs):
return _render(certificado, 'CancelarNfseV3', **kwargs)
def cancelar_nfse(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_cancelar_nfse(certificado, **kwargs)
return _send(certificado, 'CancelarNfseV3', **kwargs)

12
pytrustnfe/nfse/ginfes/templates/CancelarNfseV3.xml

@ -1,15 +1,15 @@
<CancelarNfseEnvio xmlns = "http://www.betha.com.br/e-nota-contribuinte-ws">
<CancelarNfseEnvio xmlns="http://www.betha.com.br/e-nota-contribuinte-ws">
<Pedido>
<InfPedidoCancelamento Id="1">
<IdentificacaoNfse>
<Numero>58</Numero>
<Numero>{{ cancelamento.numero_nfse }}</Numero>
<CpfCnpj>
<Cnpj>45111111111100</Cnpj>
<Cnpj>{{ cancelamento.cnpj_prestador }}</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>123498</InscricaoMunicipal>
<CodigoMunicipio>4204608</CodigoMunicipio>
<InscricaoMunicipal>{{ cancelamento.inscricao_municipal }}</InscricaoMunicipal>
<CodigoMunicipio>{{ cancelamento.cidade }}</CodigoMunicipio>
</IdentificacaoNfse>
<CodigoCancelamento>1</CodigoCancelamento>
<CodigoCancelamento>{{ cancelamento.codigo_cancelamento }}</CodigoCancelamento>
</InfPedidoCancelamento>
</Pedido>
</CancelarNfseEnvio>

9
pytrustnfe/nfse/ginfes/templates/ConsultarLoteRpsV3.xml

@ -1,8 +1,7 @@
<ConsultarLoteRpsEnvio xmlns="http://www.betha.com.br/e-nota-contribuinte-ws">
<ConsultarLoteRpsEnvio xmlns="http://www.ginfes.com.br/servico_consultar_lote_rps_envio_v03.xsd" xmlns:tipos="http://www.ginfes.com.br/tipos_v03.xsd">
<Prestador>
<CpfCnpj>
<Cnpj>45111111111100</Cnpj>
</CpfCnpj>
<tipos:Cnpj>{{ consulta.cnpj_prestador }}</tipos:Cnpj>
<tipos:InscricaoMunicipal>{{ consulta.inscricao_municipal }}</tipos:InscricaoMunicipal>
</Prestador>
<Protocolo>141542179222170</Protocolo>
<Protocolo>{{ consulta.protocolo }}</Protocolo>
</ConsultarLoteRpsEnvio>

6
pytrustnfe/nfse/ginfes/templates/ConsultarSituacaoLoteRpsV3.xml

@ -1,7 +1,7 @@
<ConsultarSituacaoLoteRpsEnvio xmlns="http://www.ginfes.com.br/servico_consultar_situacao_lote_rps_envio_v03.xsd" xmlns:tipos="http://www.ginfes.com.br/tipos_v03.xsd">
<Prestador>
<tipos:Cnpj>45111111111100</tipos:Cnpj>
<tipos:InscricaoMunicipal>123456</tipos:InscricaoMunicipal>
<tipos:Cnpj>{{ consulta.cnpj_prestador }}</tipos:Cnpj>
<tipos:InscricaoMunicipal>{{ consulta.inscricao_municipal }}</tipos:InscricaoMunicipal>
</Prestador>
<Protocolo>141542179222170</Protocolo>
<Protocolo>{{ consulta.protocolo }}</Protocolo>
</ConsultarSituacaoLoteRpsEnvio>

18
pytrustnfe/nfse/ginfes/templates/RecepcionarLoteRpsV3.xml

@ -1,11 +1,13 @@
<EnviarLoteRpsEnvio xmlns = "http://www.betha.com.br/e-nota-contribuinte-ws">
<LoteRps Id="lote1" versao="2.02">
<NumeroLote>2012024</NumeroLote>
<Cnpj>45111111111100</Cnpj>
<InscricaoMunicipal>123498</InscricaoMunicipal>
<QuantidadeRps>1</QuantidadeRps>
<ListaRps>
{% include 'rps.xml' %}
<EnviarLoteRpsEnvio xmlns="http://www.ginfes.com.br/servico_enviar_lote_rps_envio_v03.xsd" xmlns:tipos="http://www.ginfes.com.br/tipos_v03.xsd">
<LoteRps Id="lote{{ nfse.numero_lote }}">
<tipos:NumeroLote>{{ nfse.numero_lote }}</tipos:NumeroLote>
<tipos:Cnpj>{{ nfse.cnpj_prestador }}</tipos:Cnpj>
<tipos:InscricaoMunicipal>{{ nfse.inscricao_municipal }}</tipos:InscricaoMunicipal>
<tipos:QuantidadeRps>{{ nfse.lista_rps|length }}</tipos:QuantidadeRps>
<ListaRps xmlns="http://www.ginfes.com.br/tipos_v03.xsd">
{% for rps in nfse.lista_rps -%}
{% include 'Rps.xml' %}
{% endfor %}
</ListaRps>
</LoteRps>
</EnviarLoteRpsEnvio>

125
pytrustnfe/nfse/ginfes/templates/Rps.xml

@ -1,82 +1,91 @@
<Rps>
<InfRps Id="rps1">
<InfRps Id="rps{{ rps.numero }}">
<IdentificacaoRps>
<Numero>25</Numero>
<Serie>A1</Serie>
<Tipo>1</Tipo>
<Numero>{{ rps.numero }}</Numero>
<Serie>{{ rps.serie }}</Serie>
<Tipo>{{ rps.tipo_rps }}</Tipo>
</IdentificacaoRps>
<DataEmissao>2014-12-06</DataEmissao>
<NaturezaOperacao>1</NaturezaOperacao>
<RegimeEspecialTributacao>1</RegimeEspecialTributacao>
<OptanteSimplesNacional>1</OptanteSimplesNacional>
<IncentivadorCultural>1</IncentivadorCultural>
<Status>1</Status>
<DataEmissao>{{ rps.data_emissao }}</DataEmissao>
<NaturezaOperacao>{{ rps.natureza_operacao }}</NaturezaOperacao>
<RegimeEspecialTributacao>{{ rps.regime_tributacao }}</RegimeEspecialTributacao>
<OptanteSimplesNacional>{{ rps.optante_simples }}</OptanteSimplesNacional>
<IncentivadorCultural>{{ rps.incentivador_cultural }}</IncentivadorCultural>
<Status>{{ rps.status }}</Status>
<RpsSubstituido>
<Numero>1</Numero>
<Serie>1</Serie>
<Tipo>1</Tipo>
<Numero>{{ rps.numero_substituido }}</Numero>
<Serie>{{ rps.serie_substituido }}</Serie>
<Tipo>{{ rps.tipo_substituido }}</Tipo>
</RpsSubstituido>
<OutrasInformacoes>1</OutrasInformacoes>
<Servico>
<Valores>
<ValorServicos>100</ValorServicos>
<ValorDeducoes>0</ValorDeducoes>
<ValorPis>0</ValorPis>
<ValorCofins>0</ValorCofins>
<ValorInss>0</ValorInss>
<ValorIr>0</ValorIr>
<ValorCsll>0</ValorCsll>
<OutrasRetencoes>0</OutrasRetencoes>
<DescontoIncondicionado>0</DescontoIncondicionado>
<DescontoCondicionado>0</DescontoCondicionado>
<ValorServicos>{{ rps.valor_servico }}</ValorServicos>
<ValorDeducoes>{{ rps.valor_deducao }}</ValorDeducoes>
<ValorPis>{{ rps.valor_pis }}</ValorPis>
<ValorCofins>{{ rps.valor_cofins }}</ValorCofins>
<ValorInss>{{ rps.valor_inss }}</ValorInss>
<ValorIr>{{ rps.valor_ir }}</ValorIr>
<ValorCsll>{{ rps.valor_csll }}</ValorCsll>
<IssRetido>{{ rps.iss_retido }}</IssRetido>
<ValorIss>{{ rps.valor_iss }}</ValorIss>
<ValorIssRetido>{{ rps.valor_iss_retido }}</ValorIssRetido>
<OutrasRetencoes>{{ rps.outras_retencoes }}</OutrasRetencoes>
<BaseCalculo>{{ rps.base_calculo }}</BaseCalculo>
<Aliquota>{{ rps.aliquota }}</Aliquota>
<ValorLiquidoNfse>{{ rps.valor_liquido_nfse }}</ValorLiquidoNfse>
<DescontoIncondicionado>{{ rps.desconto_incondicionado }}</DescontoIncondicionado>
<DescontoCondicionado>{{ rps.desconto_condicionado }}</DescontoCondicionado>
</Valores>
<IssRetido>2</IssRetido>
<ItemListaServico>0702</ItemListaServico>
<CodigoTributacaoMunicipio>2525</CodigoTributacaoMunicipio>
<Discriminacao>Prog.</Discriminacao>
<CodigoMunicipio>4204608</CodigoMunicipio>
<ExigibilidadeISS>1</ExigibilidadeISS>
<MunicipioIncidencia>4204608</MunicipioIncidencia>
<ItemListaServico>{{ rps.codigo_servico }}</ItemListaServico>
<CodigoCnae>{{ rps.cnae_servico }}</CodigoCnae>
<CodigoTributacaoMunicipio>{{ rps.codigo_tributacao_municipio }}</CodigoTributacaoMunicipio>
<Discriminacao>{{ rps.descricao }}</Discriminacao>
<CodigoMunicipio>{{ rps.codigo_municipio }}</CodigoMunicipio>
</Servico>
<Prestador>
<CpfCnpj>
<Cnpj>45111111111100</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>123498</InscricaoMunicipal>
<Cnpj>{{ rps.prestador.cnpj }}</Cnpj>
<InscricaoMunicipal>{{ rps.prestador.inscricao_municipal }}</InscricaoMunicipal>
</Prestador>
<Tomador>
<IdentificacaoTomador>
<CpfCnpj>
<Cnpj>83787494000123</Cnpj>
{% if rps.tomador.cnpj_cpf|length == 14 %}
<Cnpj>{{ rps.tomador.cnpj_cpf }}</Cnpj>
{% endif %}
{% if rps.tomador.cnpj_cpf|length == 11 %}
<Cpf>{{ rps.tomador.cnpj_cpf }}</Cpf>
{% endif %}
</CpfCnpj>
<InscricaoMunicipal>{{ rps.tomador.inscricao_municipal }}</InscricaoMunicipal>
</IdentificacaoTomador>
<RazaoSocial>INSTITUICAO FINANCEIRA</RazaoSocial>
<RazaoSocial>{{ rps.tomador.razao_social }}</RazaoSocial>
<Endereco>
<Endereco>AV. 7 DE SETEMBRO</Endereco>
<Numero>1505</Numero>
<Complemento>AO LADO DO JOAO AUTOMOVEIS</Complemento>
<Bairro>CENTRO</Bairro>
<CodigoMunicipio>4201406</CodigoMunicipio>
<Uf>SC</Uf>
<Cep>88900000</Cep>
<Endereco>{{ rps.tomador.logradouro }}</Endereco>
<Numero>{{ rps.tomador.numero }}</Numero>
<Complemento>{{ rps.tomador.complemento }}</Complemento>
<Bairro>{{ rps.tomador.bairro }}</Bairro>
<CodigoMunicipio>{{ rps.tomador.cidade }}</CodigoMunicipio>
<Uf>{{ rps.tomador.uf }}</Uf>
<Cep>{{ rps.tomador.cep }}</Cep>
</Endereco>
<Contato>
<Telefone>4835220026</Telefone>
<Email>luiz.alves@cxpostal.com</Email>
<Telefone>{{ rps.tomador.telefone }}</Telefone>
<Email>{{ rps.tomador.email }}</Email>
</Contato>
</Tomador>
{% if rps.intermediario is defined -%}
<IntermediarioServico>
<IdentificacaoIntermediario>
<CpfCnpj>
<Cnpj>06410987065144</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>22252</InscricaoMunicipal>
</IdentificacaoIntermediario>
<RazaoSocial>CONSTRUTORA TERRA FIRME</RazaoSocial>
<RazaoSocial>{{ rps.intermediario.razao_social }}</RazaoSocial>
<CpfCnpj>
<Cnpj>{{ rps.intermediario.cnpj }}</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>{{ rps.intermediario.inscricao_municipal }}</InscricaoMunicipal>
</IntermediarioServico>
<ConstrucaoCivil>
<CodigoObra>142</CodigoObra>
<Art>1/2014</Art>
</ConstrucaoCivil>
</InfDeclaracaoPrestacaoServico>
{% endif %}
{% if rps.construcao_civil is defined -%}
<ContrucaoCivil>
<CodigoObra>{{ rps.construcao_civil.codigo_obra }}</CodigoObra>
<Art>{{ rps.construcao_civil.art }}</Art>
</ContrucaoCivil>
{% endif %}
</InfRps>
</Rps>

44
pytrustnfe/nfse/simpliss/__init__.py

@ -12,22 +12,20 @@ import os
from lxml import etree
from pytrustnfe import HttpClient
from pytrustnfe.xml import render_xml, sanitize_response
from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key
from pytrustnfe.nfse.assinatura import Assinatura
def _render_xml(certificado, method, **kwargs):
path = os.path.join(os.path.dirname(__file__), 'templates')
xml_send = render_xml(path, '%s.xml' % method, False, **kwargs)
cert, key = extract_cert_and_key_from_pfx(
certificado.pfx, certificado.password)
cert, key = save_cert_key(cert, key)
pfx_path = certificado.save_pfx()
signer = Assinatura(pfx_path, certificado.password)
xml_send = signer.assina_xml(xml_send, '')
xml_send = render_xml(path, '%s.xml' % method, True, **kwargs)
xml_send = etree.tostring(xml_send)
# cert, key = extract_cert_and_key_from_pfx(
# certificado.pfx, certificado.password)
# cert, key = save_cert_key(cert, key)
#
# pfx_path = certificado.save_pfx()
# signer = Assinatura(pfx_path, certificado.password)
# xml_send = signer.assina_xml(xml_send, '')
return xml_send
@ -44,10 +42,11 @@ def _validate(method, xml):
def _send(method, **kwargs):
if kwargs['ambiente'] == 'producao':
base_url = 'http://sistemas.pmp.sp.gov.br/semfi/simpliss/ws_nfse/nfseservice.svc?WSDL' # noqa
base_url = 'http://sistemas.pmp.sp.gov.br/semfi/simpliss/ws_nfse/nfseservice.svc' # noqa
else:
base_url = 'http://wshomologacao.simplissweb.com.br/nfseservice.svc?WSDL' # noqa
base_url = 'http://wshomologacao.simplissweb.com.br/nfseservice.svc' # noqa
base_url = 'http://wshomologacao.simplissweb.com.br/nfseservice.svc'
xml_send = kwargs["xml"].replace('<?xml version="1.0"?>', '')
path = os.path.join(os.path.dirname(__file__), 'templates')
soap = render_xml(path, 'SoapRequest.xml', False, soap_body=xml_send)
@ -57,7 +56,6 @@ def _send(method, **kwargs):
client = HttpClient(base_url)
response = client.post_soap(soap, act)
print response
response, obj = sanitize_response(response)
return {
'sent_xml': xml_send,
@ -90,13 +88,29 @@ def consultar_nfse_por_rps(certificado, **kwargs):
return _send('ConsultarNfsePorRps', **kwargs)
def xml_consultar_lote_rps(certificado, **kwargs):
return _render_xml(certificado, 'ConsultarLoteRps', **kwargs)
def consultar_lote_rps(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_consultar_lote_rps(certificado, **kwargs)
return _send('ConsultarLoteRps', **kwargs)
def xml_consultar_nfse(certificado, **kwargs):
return _render_xml(certificado, 'ConsultarNfse', **kwargs)
def consultar_nfse(certificado, **kwargs):
return _send('ConsultarNfse', **kwargs)
def xml_cancelar_nfse(certificado, **kwargs):
return _render_xml(certificado, 'CancelarNfse', **kwargs)
def cancelar_nfse(certificado, **kwargs):
if "xml" not in kwargs:
kwargs['xml'] = xml_cancelar_nfse(certificado, **kwargs)
return _send('CancelarNfse', **kwargs)

14
pytrustnfe/nfse/simpliss/templates/CancelarNfse.xml

@ -3,17 +3,17 @@
<Pedido xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">
<InfPedidoCancelamento>
<IdentificacaoNfse>
<Numero>[nonNegativeInteger?]</Numero>
<Cnpj>[string?]</Cnpj>
<InscricaoMunicipal>[string?]</InscricaoMunicipal>
<CodigoMunicipio>[int]</CodigoMunicipio>
<Numero>{{ cancelamento.numero_nfse }}</Numero>
<Cnpj>{{ cancelamento.cnpj_prestador }}</Cnpj>
<InscricaoMunicipal>{{ cancelamento.inscricao_municipal }}</InscricaoMunicipal>
<CodigoMunicipio>{{ cancelamento.cidade }}</CodigoMunicipio>
</IdentificacaoNfse>
<CodigoCancelamento>[string?]</CodigoCancelamento>
<CodigoCancelamento>{{ cancelamento.codigo_cancelamento }}</CodigoCancelamento>
</InfPedidoCancelamento>
</Pedido>
</CancelarNfseEnvio>
<pParam>
<P1 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">[string?]</P1>
<P2 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">[string?]</P2>
<P1 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">{{ cancelamento.cnpj_prestador }}</P1>
<P2 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">{{ cancelamento.senha }}</P2>
</pParam>
</CancelarNfse>

10
pytrustnfe/nfse/simpliss/templates/ConsultarLoteRps.xml

@ -1,13 +1,13 @@
<ConsultarLoteRps xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse">
<ConsultarLoteRpsEnvio>
<Prestador xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">
<Cnpj>[string?]</Cnpj>
<InscricaoMunicipal>[string?]</InscricaoMunicipal>
<Cnpj>{{ consulta.cnpj_prestador }}</Cnpj>
<InscricaoMunicipal>{{ consulta.inscricao_municipal }}</InscricaoMunicipal>
</Prestador>
<Protocolo xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">[string?]</Protocolo>
<Protocolo xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">{{ consulta.protocolo }}</Protocolo>
</ConsultarLoteRpsEnvio>
<pParam>
<P1 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">[string?]</P1>
<P2 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">[string?]</P2>
<P1 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">{{ consulta.cnpj_prestador }}</P1>
<P2 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">{{ consulta.senha }}</P2>
</pParam>
</ConsultarLoteRps>

10
pytrustnfe/nfse/simpliss/templates/ConsultarSituacaoLoteRps.xml

@ -1,13 +1,13 @@
<ConsultarSituacaoLoteRps xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse">
<ConsultarSituacaoLoteRpsEnvio>
<Prestador xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">
<Cnpj>[string?]</Cnpj>
<InscricaoMunicipal>[string?]</InscricaoMunicipal>
<Cnpj>{{ consulta.cnpj_prestador }}</Cnpj>
<InscricaoMunicipal>{{ consulta.inscricao_municipal }}</InscricaoMunicipal>
</Prestador>
<Protocolo xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">[string?]</Protocolo>
<Protocolo xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">{{ consulta.protocolo }}</Protocolo>
</ConsultarSituacaoLoteRpsEnvio>
<pParam>
<P1 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">[string?]</P1>
<P2 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">[string?]</P2>
<P1 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">{{ consulta.cnpj_prestador }}</P1>
<P2 xmlns="http://www.sistema.com.br/Sistema.Ws.Nfse.Cn">{{ consulta.senha }}</P2>
</pParam>
</ConsultarSituacaoLoteRps>

2
pytrustnfe/nfse/simpliss/templates/RecepcionarLoteRps.xml

@ -4,7 +4,7 @@
<NumeroLote>{{ nfse.numero_lote }}</NumeroLote>
<Cnpj>{{ nfse.cnpj_prestador }}</Cnpj>
<InscricaoMunicipal>{{ nfse.inscricao_municipal }}</InscricaoMunicipal>
<QuantidadeRps>1</QuantidadeRps>
<QuantidadeRps>{{ nfse.lista_rps|length }}</QuantidadeRps>
<ListaRps>
{% for rps in nfse.lista_rps -%}
{% include 'Rps.xml' %}

8
pytrustnfe/nfse/simpliss/templates/Rps.xml

@ -3,7 +3,7 @@
<IdentificacaoRps>
<Numero>{{ rps.numero }}</Numero>
<Serie>{{ rps.serie }}</Serie>
<Tipo>{{ rps.tipo }}</Tipo>
<Tipo>{{ rps.tipo_rps }}</Tipo>
</IdentificacaoRps>
<DataEmissao>{{ rps.data_emissao }}</DataEmissao>
<NaturezaOperacao>{{ rps.natureza_operacao }}</NaturezaOperacao>
@ -55,8 +55,12 @@
<Tomador>
<IdentificacaoTomador>
<CpfCnpj>
{% if rps.tomador.cnpj_cpf|length == 14 %}
<Cnpj>{{ rps.tomador.cnpj_cpf }}</Cnpj>
{% endif %}
{% if rps.tomador.cnpj_cpf|length == 11 %}
<Cpf>{{ rps.tomador.cnpj_cpf }}</Cpf>
{% endif %}
</CpfCnpj>
<InscricaoMunicipal>{{ rps.tomador.inscricao_municipal }}</InscricaoMunicipal>
</IdentificacaoTomador>
@ -66,7 +70,7 @@
<Numero>{{ rps.tomador.numero }}</Numero>
<Complemento>{{ rps.tomador.complemento }}</Complemento>
<Bairro>{{ rps.tomador.bairro }}</Bairro>
<CodigoMunicipio>{{ rps.tomador.codigo_municipio }}</CodigoMunicipio>
<CodigoMunicipio>{{ rps.tomador.cidade }}</CodigoMunicipio>
<Uf>{{ rps.tomador.uf }}</Uf>
<Cep>{{ rps.tomador.cep }}</Cep>
</Endereco>

1
pytrustnfe/test/test_ginfes.py

@ -11,6 +11,7 @@ class test_nfse_ginfes(unittest.TestCase):
caminho = os.path.dirname(__file__)
@unittest.skip
def test_consulta_situacao_lote(self):
pfx_source = open('/home/danimar/Downloads/machado.pfx', 'r').read()
pfx = Certificado(pfx_source, '123456789')

2
pytrustnfe/test/test_simpliss.py

@ -19,5 +19,5 @@ class test_nfse_simpliss(unittest.TestCase):
'inscricao_prestador': '123',
'protocolo': '123'}
response = recepcionar_lote_rps(
pfx, consulta=dados, ambiente='homologacao')
pfx, nfse=dados, ambiente='homologacao')
print response
Loading…
Cancel
Save