Skip to content

Commit

Permalink
initial nfselib generation
Browse files Browse the repository at this point in the history
  • Loading branch information
rvalyi committed Jun 22, 2024
1 parent 83cc3b9 commit a08b54c
Show file tree
Hide file tree
Showing 454 changed files with 265,079 additions and 23 deletions.
43 changes: 20 additions & 23 deletions generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from collections import OrderedDict


ibge_code_to_name = {}
city_data = {}
padrao_population = {}


Expand Down Expand Up @@ -35,7 +35,7 @@ def order_cities_by_population(cities, population_data):


def parse_wsdl_production(
xml_file, ibge_code_to_name, population_data, padrao_population
xml_file, city_data, population_data, padrao_population
):
# Load and parse the XML file
tree = ET.parse(xml_file)
Expand All @@ -49,7 +49,7 @@ def parse_wsdl_production(
padrao = item.get("Padrao")
city = item.get("Nome").split("-")[0].strip()
ibge_code = item.get("ID")
ibge_code_to_name[ibge_code] = (
city_data[ibge_code] = (
city,
ibge_code,
item.get("UF"),
Expand All @@ -71,12 +71,6 @@ def parse_wsdl_production(
for action in local_producao:
if action.text:
wsdl_files[action.text.split("\\")[-1]] = action.tag

# if len(wsdl_files) > 1:
# print(f"Warning: Different WSDL files found for Padrao '{padrao}' in production environment: {wsdl_files}")

# Use any one of the actions to find the WSDL file name (assuming all should be the same)
# wsdl_path = wsdl_files.pop() if wsdl_files else None
wsdl_dict[padrao][ibge_code] = wsdl_files

return wsdl_dict
Expand All @@ -87,34 +81,34 @@ def format_cities_to_markdown(
cities,
schema_status,
soap_status,
ibge_code_to_name,
city_data,
):
schema_emoji = "✅" if schema_status else "❌"
soap_emoji = "✅" if soap_status else "❌"

header = f"## {padrao}\n**Schema:** {schema_emoji}\n**SOAP:** {soap_emoji}\n\n"
table_header = (
"| Cidade | IBGE | UF | Population |\n|------|--------------|------------|\n"
)
header = f"## {padrao}\n**Schema:** {schema_emoji} - **SOAP:** {soap_emoji}\n\n"
table_header = "| Cidade | IBGE | UF | Population |\n|------|----|---|----------|\n"
table_rows = [
f"| {ibge_code_to_name[ibge_code][0]} | {ibge_code_to_name[ibge_code][1]} | {ibge_code_to_name[ibge_code][2]} | {ibge_code_to_name[ibge_code][3]} |"
f"| {city_data[ibge_code][0]} | {city_data[ibge_code][1]} | {city_data[ibge_code][2]} | {city_data[ibge_code][3]} |"
for ibge_code in cities.keys()
if ibge_code_to_name[ibge_code][1]
if city_data[ibge_code][1] and city_data[ibge_code][2] != "AN"
]
table = table_header + "\n".join(table_rows) + "\n"
return header + table


def create_markdown_report(
sorted_wsdl_dict,
ibge_code_to_name,
city_data,
schema_errors,
soap_errors,
):
report = "# NFSe Web Services\n\n"

for padrao, cities in sorted_wsdl_dict.items():
# cities = order_cities_by_population(cities, population_data)
if not len(cities.keys()):
continue
cities = order_cities_by_population(cities, population_data)
schema_status = padrao not in schema_errors
soap_status = padrao not in soap_errors

Expand All @@ -123,17 +117,18 @@ def create_markdown_report(
cities,
schema_status,
soap_status,
ibge_code_to_name,
city_data,
)
report += markdown_section + "\n"

return report


xml_file = "WSDL/Webservice.xml"
# csv comes from http://blog.mds.gov.br/redesuas/wp-content/uploads/2018/06/Lista_Munic%C3%ADpios_com_IBGE_Brasil_Versao_CSV.csv
population_data = load_population_data("cities_ibge_data.csv")
wsdl_dict = parse_wsdl_production(
xml_file, ibge_code_to_name, population_data, padrao_population
xml_file, city_data, population_data, padrao_population
)
sorted_wsdl_dict = OrderedDict(
sorted(wsdl_dict.items(), key=lambda item: padrao_population[item[0]], reverse=True)
Expand All @@ -144,6 +139,8 @@ def create_markdown_report(
soap_errors = set()

for padrao, cities in sorted_wsdl_dict.items():
if not len(cities.keys()):
continue
cities = order_cities_by_population(cities, population_data)
population = padrao_population[padrao]

Expand All @@ -163,8 +160,8 @@ def create_markdown_report(

soap_errors.add(padrao)
for city_code, wsdl_files in cities.items():
all_wsdl_files_ok = True
city = ibge_code_to_name[city_code]
all_wsdl_files_ok = len(wsdl_files.keys()) > 0
city = city_data[city_code]
for wsdl_file in wsdl_files.keys():
print(f"\t{city}, wsdl file: {wsdl_file}")
wsdl_result = subprocess.run(
Expand All @@ -188,7 +185,7 @@ def create_markdown_report(


markdown_report = create_markdown_report(
sorted_wsdl_dict, ibge_code_to_name, schema_errors, soap_errors
sorted_wsdl_dict, city_data, schema_errors, soap_errors
)

# Write the markdown_report to CITIES.md file
Expand Down
1 change: 1 addition & 0 deletions nfselib/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# nothing here
1 change: 1 addition & 0 deletions nfselib/abaco/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# nothing here
183 changes: 183 additions & 0 deletions nfselib/abaco/bindings/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
from nfselib.abaco.bindings.nfse_v2010 import (
CancelarNfseEnvio,
CancelarNfseResposta,
CompNfse,
ConsultarLoteRpsEnvio,
ConsultarLoteRpsResposta,
ConsultarNfseEnvio,
ConsultarNfseResposta,
ConsultarNfseRpsEnvio,
ConsultarNfseRpsResposta,
ConsultarSituacaoLoteRpsEnvio,
ConsultarSituacaoLoteRpsResposta,
EnviarLoteRpsEnvio,
EnviarLoteRpsResposta,
ListaMensagemRetorno,
TcCancelamentoNfse,
TcCompNfse,
TcConfirmacaoCancelamento,
TcContato,
TcCpfCnpj,
TcDadosConstrucaoCivil,
TcDadosPrestador,
TcDadosServico,
TcDadosTomador,
TcEndereco,
TcIdentificacaoIntermediarioServico,
TcIdentificacaoNfse,
TcIdentificacaoOrgaoGerador,
TcIdentificacaoPrestador,
TcIdentificacaoRps,
TcIdentificacaoTomador,
TcInfNfse,
TcInfPedidoCancelamento,
TcInfRps,
TcInfSubstituicaoNfse,
TcLoteRps,
TcMensagemRetorno,
TcMensagemRetornoLote,
TcNfse,
TcPedidoCancelamento,
TcRps,
TcSubstituicaoNfse,
TcValores,
)
from nfselib.abaco.bindings.xmldsig_core_schema20020212 import (
CanonicalizationMethod,
CanonicalizationMethodType,
DigestMethod,
DigestMethodType,
DigestValue,
DsakeyValue,
DsakeyValueType,
KeyInfo,
KeyInfoType,
KeyName,
KeyValue,
KeyValueType,
Manifest,
ManifestType,
MgmtData,
ObjectType,
Pgpdata,
PgpdataType,
Reference,
ReferenceType,
RetrievalMethod,
RetrievalMethodType,
RsakeyValue,
RsakeyValueType,
Signature,
SignatureMethod,
SignatureMethodType,
SignatureProperties,
SignaturePropertiesType,
SignatureProperty,
SignaturePropertyType,
SignatureType,
SignatureValue,
SignatureValueType,
SignedInfo,
SignedInfoType,
Spkidata,
SpkidataType,
Transform,
Transforms,
TransformsType,
TransformType,
X509Data,
X509DataType,
X509IssuerSerialType,
_Object,
)

__all__ = [
"CancelarNfseEnvio",
"CancelarNfseResposta",
"CompNfse",
"ConsultarLoteRpsEnvio",
"ConsultarLoteRpsResposta",
"ConsultarNfseEnvio",
"ConsultarNfseResposta",
"ConsultarNfseRpsEnvio",
"ConsultarNfseRpsResposta",
"ConsultarSituacaoLoteRpsEnvio",
"ConsultarSituacaoLoteRpsResposta",
"EnviarLoteRpsEnvio",
"EnviarLoteRpsResposta",
"ListaMensagemRetorno",
"TcCancelamentoNfse",
"TcCompNfse",
"TcConfirmacaoCancelamento",
"TcContato",
"TcCpfCnpj",
"TcDadosConstrucaoCivil",
"TcDadosPrestador",
"TcDadosServico",
"TcDadosTomador",
"TcEndereco",
"TcIdentificacaoIntermediarioServico",
"TcIdentificacaoNfse",
"TcIdentificacaoOrgaoGerador",
"TcIdentificacaoPrestador",
"TcIdentificacaoRps",
"TcIdentificacaoTomador",
"TcInfNfse",
"TcInfPedidoCancelamento",
"TcInfRps",
"TcInfSubstituicaoNfse",
"TcLoteRps",
"TcMensagemRetorno",
"TcMensagemRetornoLote",
"TcNfse",
"TcPedidoCancelamento",
"TcRps",
"TcSubstituicaoNfse",
"TcValores",
"CanonicalizationMethod",
"CanonicalizationMethodType",
"DsakeyValue",
"DsakeyValueType",
"DigestMethod",
"DigestMethodType",
"DigestValue",
"KeyInfo",
"KeyInfoType",
"KeyName",
"KeyValue",
"KeyValueType",
"Manifest",
"ManifestType",
"MgmtData",
"_Object",
"ObjectType",
"Pgpdata",
"PgpdataType",
"RsakeyValue",
"RsakeyValueType",
"Reference",
"ReferenceType",
"RetrievalMethod",
"RetrievalMethodType",
"Spkidata",
"SpkidataType",
"Signature",
"SignatureMethod",
"SignatureMethodType",
"SignatureProperties",
"SignaturePropertiesType",
"SignatureProperty",
"SignaturePropertyType",
"SignatureType",
"SignatureValue",
"SignatureValueType",
"SignedInfo",
"SignedInfoType",
"Transform",
"TransformType",
"Transforms",
"TransformsType",
"X509Data",
"X509DataType",
"X509IssuerSerialType",
]
Loading

0 comments on commit a08b54c

Please sign in to comment.