diff --git a/pytrustnfe/nfse/imperial/__init__.py b/pytrustnfe/nfse/imperial/__init__.py
new file mode 100644
index 0000000..64a8125
--- /dev/null
+++ b/pytrustnfe/nfse/imperial/__init__.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+# © 2016 Danimar Ribeiro, Trustcode
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+import os
+from lxml import etree
+from pytrustnfe import HttpClient
+from pytrustnfe.xml import render_xml, sanitize_response
+
+
+def _render(certificado, method, **kwargs):
+ path = os.path.join(os.path.dirname(__file__), 'templates')
+ xml_send = render_xml(path, '%s.xml' % method, True, **kwargs)
+ return etree.tostring(xml_send)
+
+
+def _send(certificado, method, **kwargs):
+ base_url = ''
+ if kwargs['ambiente'] == 'producao':
+ base_url = 'https://nfe.etransparencia.com.br/rj.petropolis/webservice/aws_nfe.aspx' # noqa
+ else:
+ base_url = 'https://nfehomologacao.etransparencia.com.br/rj.petropolis/webservice/aws_nfe.aspx' # noqa
+
+ xml_send = kwargs["xml"]
+ path = os.path.join(os.path.dirname(__file__), 'templates')
+ soap = render_xml(path, 'SoapRequest.xml', False, soap_body=xml_send)
+
+ client = HttpClient(base_url)
+ response = client.post_soap(soap, 'NFeaction/AWS_NFE.%s' % method)
+
+ response, obj = sanitize_response(response)
+ return {
+ 'sent_xml': xml_send,
+ 'received_xml': response,
+ 'object': obj
+ }
+
+
+def xml_processa_rps(certificado, **kwargs):
+ return _render(certificado, 'PROCESSARPS', **kwargs)
+
+
+def processa_rps(certificado, **kwargs):
+ if "xml" not in kwargs:
+ kwargs['xml'] = xml_processa_rps(certificado, **kwargs)
+ return _send(certificado, 'PROCESSARPS', **kwargs)
+
+
+def xml_consulta_protocolo(certificado, **kwargs):
+ return _render(certificado, 'CONSULTAPROTOCOLO', **kwargs)
+
+
+def consulta_protocolo(certificado, **kwargs):
+ if "xml" not in kwargs:
+ kwargs['xml'] = xml_consulta_protocolo(certificado, **kwargs)
+ return _send(certificado, 'CONSULTAPROTOCOLO', **kwargs)
+
+
+def xml_consulta_notas_protocolo(certificado, **kwargs):
+ return _render(certificado, 'CONSULTANOTASPROTOCOLO', **kwargs)
+
+
+def consulta_notas_protocolo(certificado, **kwargs):
+ if "xml" not in kwargs:
+ kwargs['xml'] = xml_consulta_notas_protocolo(certificado, **kwargs)
+ return _send(certificado, 'CONSULTANOTASPROTOCOLO', **kwargs)
+
+
+def xml_cancelar_nfse(certificado, **kwargs):
+ return _render(certificado, 'CANCELANOTAELETRONICA', **kwargs)
+
+
+def cancelar_nfse(certificado, **kwargs):
+ if "xml" not in kwargs:
+ kwargs['xml'] = xml_cancelar_nfse(certificado, **kwargs)
+ return _send(certificado, 'CANCELANOTAELETRONICA', **kwargs)
diff --git a/pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml b/pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml
new file mode 100644
index 0000000..3afb262
--- /dev/null
+++ b/pytrustnfe/nfse/imperial/templates/CANCELANOTAELETRONICA.xml
@@ -0,0 +1,17 @@
+
+
+
+ {{ cancelamento.codigo_usuario }}
+ {{ cancelamento.codigo_contribuinte }}
+
+
+ {{ cancelamento.serie_nota }}
+ {{ cancelamento.numero_nota }}
+ {{ cancelamento.serie_rps }}
+ {{ cancelamento.numero_rps }}
+ {{ cancelamento.valor }}
+ {{ cancelamento.motivo }}
+ {{ cancelamento.cancelar_guia }}
+
+
+
diff --git a/pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml b/pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml
new file mode 100644
index 0000000..30ea3d6
--- /dev/null
+++ b/pytrustnfe/nfse/imperial/templates/CONSULTANOTASPROTOCOLO.xml
@@ -0,0 +1,9 @@
+
+
+ {{ consulta.protocolo }}
+
+ {{ consulta.codigo_usuario }}
+ {{ consulta.codigo_contribuinte }}
+
+
+
diff --git a/pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml b/pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml
new file mode 100644
index 0000000..09765e5
--- /dev/null
+++ b/pytrustnfe/nfse/imperial/templates/CONSULTAPROTOCOLO.xml
@@ -0,0 +1,9 @@
+
+
+ {{ consulta.protocolo }}
+
+ {{ consulta.codigo_usuario }}
+ {{ consulta.codigo_contribuinte }}
+
+
+
diff --git a/pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml b/pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml
new file mode 100644
index 0000000..3cfb27a
--- /dev/null
+++ b/pytrustnfe/nfse/imperial/templates/PROCESSARPS.xml
@@ -0,0 +1,81 @@
+
+
+
+ {{ nfse.codigo_usuario }}
+ {{ nfse.codigo_contribuinte }}
+
+
+ {{ nfse.ano }}
+ {{ nfse.mes }}
+ {{ nfse.cnpj_prestador }}
+ {{ nfse.data_emissao }}
+ {{ nfse.data_emissao }}
+ {{ nfse.tipo_tributacao }}
+ {{ nfse.data_adesao_simples }}
+ {{ nfse.aliquota_simples_isencao|comma }}
+ 2.00
+ {% for rps in nfse.lista_rps -%}
+
+
+
+ {{ rps.tipo_nfse }}
+ {{ rps.numero }}
+ {{ rps.serie }}
+ {{ rps.data_emissao }}
+ {{ rps.iss_retido }}
+ {{ rps.codigo_servico }}
+ {{ rps.descricao}}
+ {{ rps.valor_liquido_nfse|comma }}
+ {{ rps.valor_deducao|comma }}
+ {{ rps.discriminacao_deducao }}
+ {{ rps.base_calculo|comma }}
+ {{ rps.aliquota_issqn|comma }}
+ {{ rps.valor_iss|comma }}
+ {{ rps.valor_iss_retido|comma }}
+ {{ rps.tomador.cnpj_cpf }}
+ {{ rps.tomador.razao_social }}
+ {{ rps.tomador.tipo_logradouro }}
+ {{ rps.tomador.logradouro }}
+ {{ rps.tomador.numero }}
+ {{ rps.tomador.complemento }}
+ {{ rps.tomador.bairro }}
+ {{ rps.tomador.municipio }}
+ {{ rps.tomador.uf }}
+ {{ rps.tomador.cep }}
+ {{ rps.tomador.telefone }}
+ {{ rps.tomador.inscricao_municipal }}
+ {% if rps.local_prestacao == 'prestador' %}
+ {{ rps.prestador.tipo_logradouro }}
+ {{ rps.prestador.logradouro }}
+ {{ rps.prestador.numero }}
+ {{ rps.prestador.complemento }}
+ {{ rps.prestador.bairro }}
+ {{ rps.prestador.municipio }}
+ {{ rps.prestador.uf }}
+ {{ rps.prestador.cep }}
+ {% endif %}
+ {{ rps.tomador.email }}
+ {% for imposto in rps.impostos -%}
+
+
+ {{ imposto.sigla }}
+ {{ imposto.aliquota|comma }}
+ {{ imposto.valor|comma }}
+
+
+ {% endfor %}
+
+
+ {% endfor %}
+
+ {{ nfse.lista_rps|length }}
+ {{ nfse.lista_rps|sum(attribute='valor_liquido_nfse')|comma }}
+ {{ nfse.lista_rps|sum(attribute='valor_iss')|comma }}
+ {{ nfse.lista_rps|sum(attribute='valor_deducao')|comma }}
+ {{ nfse.lista_rps|sum(attribute='valor_iss_retido')|comma }}
+ {{ nfse.quantidade_impostos }}
+ {{ nfse.valor_tributos|comma }}
+
+
+
+
diff --git a/pytrustnfe/nfse/imperial/templates/SoapRequest.xml b/pytrustnfe/nfse/imperial/templates/SoapRequest.xml
new file mode 100644
index 0000000..e8b56b4
--- /dev/null
+++ b/pytrustnfe/nfse/imperial/templates/SoapRequest.xml
@@ -0,0 +1,5 @@
+
+
+ {{ soap_body }}
+
+
diff --git a/pytrustnfe/xml/__init__.py b/pytrustnfe/xml/__init__.py
index 0ed0ee5..3acdbde 100644
--- a/pytrustnfe/xml/__init__.py
+++ b/pytrustnfe/xml/__init__.py
@@ -25,6 +25,7 @@ def render_xml(path, template_name, remove_empty, **nfe):
env.filters["format_percent"] = filters.format_percent
env.filters["format_datetime"] = filters.format_datetime
env.filters["format_date"] = filters.format_date
+ env.filters["comma"] = filters.format_with_comma
template = env.get_template(template_name)
diff --git a/pytrustnfe/xml/filters.py b/pytrustnfe/xml/filters.py
index afd19ec..c3f7cbf 100644
--- a/pytrustnfe/xml/filters.py
+++ b/pytrustnfe/xml/filters.py
@@ -59,3 +59,9 @@ def format_date(value):
if isinstance(value, date):
return value.strftime(dt_format)
return value
+
+
+def format_with_comma(value):
+ if isinstance(value, float):
+ return ('%.2f' % value).replace('.', ',')
+ return value
diff --git a/setup.py b/setup.py
index ff137cf..9774692 100644
--- a/setup.py
+++ b/setup.py
@@ -32,6 +32,7 @@ later (LGPLv2+)',
'nfse/simpliss/templates/*xml',
'nfse/betha/templates/*xml',
'nfse/susesu/templates/*xml',
+ 'nfse/imperial/templates/*xml',
'xml/schemas/*xsd',
]},
url='https://github.com/danimaribeiro/PyTrustNFe',