From 08bf3276c03cab3eca535f74a3f172faa512cef3 Mon Sep 17 00:00:00 2001 From: devmetal Date: Tue, 23 Oct 2018 23:35:14 -0300 Subject: [PATCH 1/7] =?UTF-8?q?valida=C3=A7=C3=A3o=20de=20registros,=20cri?= =?UTF-8?q?ado=20CampoInt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requeriments.txt | 1 + sped/arquivos.py | 6 +- sped/campos.py | 36 +++++++++- sped/efd/icms_ipi/registros.py | 120 +++++++++++++++++---------------- test/pis_cofins.py | 9 +-- 5 files changed, 105 insertions(+), 67 deletions(-) diff --git a/requeriments.txt b/requeriments.txt index 57c231d..776ddfa 100644 --- a/requeriments.txt +++ b/requeriments.txt @@ -1,3 +1,4 @@ coveralls==0.5 six==1.9.0 pytest==2.6.4 +Unidecode==1.0.22 diff --git a/sped/arquivos.py b/sped/arquivos.py index 98486e8..8e27391 100644 --- a/sped/arquivos.py +++ b/sped/arquivos.py @@ -4,15 +4,15 @@ from collections import OrderedDict from io import StringIO -from .registros import RegistroIndefinido +from sped.efd.icms_ipi.registros import Registro0000, Registro9999 class ArquivoDigital(object): registros = None blocos = None - registro_abertura = RegistroIndefinido - registro_fechamento = RegistroIndefinido + registro_abertura = Registro0000 + registro_fechamento = Registro9999 def __init__(self): self._registro_abertura = self.registro_abertura() diff --git a/sped/campos.py b/sped/campos.py index aa66f66..838058a 100644 --- a/sped/campos.py +++ b/sped/campos.py @@ -2,12 +2,12 @@ import re - from datetime import date from datetime import datetime from decimal import Decimal from six import string_types +from unidecode import unidecode from .erros import CampoFixoError from .erros import CampoObrigatorioError @@ -102,16 +102,26 @@ def set(self, registro, valor): class CampoAlfanumerico(Campo): - def __init__(self, indice, nome, obrigatorio=False, tamanho=255): + def __init__(self, indice, nome, obrigatorio=False, tamanho=255, somente_numeros=False, zfill=False, upper=True): super(CampoAlfanumerico, self).__init__(indice, nome, obrigatorio) self._tamanho = tamanho - + self._somente_numeros = somente_numeros + self._zill = zfill + self._upper = upper @property def tamanho(self): return self._tamanho def set(self, registro, valor): valor = valor or '' + if isinstance(valor, (str, unicode)): + valor = unidecode(valor) + if self._somente_numeros: + valor = re.sub('[\D]', '', valor) + if self._zill: + valor = valor.zfill(self._tamanho) + if self._upper: + valor = valor.upper() valor = valor[:self._tamanho] super(CampoAlfanumerico, self).set(registro, valor) @@ -184,9 +194,21 @@ def set(self, registro, valor): raise FormatoInvalidoError(registro, self.nome) +class CampoInteiro(Campo): + + @staticmethod + def validar(valor): + return valor.isdigit() + + def set(self, registro, valor): + super(CampoInteiro, self).set(registro, str(valor)) + + class CampoCNPJ(Campo): + @staticmethod def validar(valor): + valor = re.sub('[\D]', '', valor) if len(valor) != 14: return False @@ -210,10 +232,14 @@ def validar(valor): return True + def set(self, registro, valor): + super(CampoCNPJ, self).set(registro, re.sub('[\D]', '', valor or '')) + class CampoCPF(Campo): @staticmethod def validar(valor): + valor = re.sub('[\D]', '', valor) if len(valor) != 11: return False @@ -237,10 +263,14 @@ def validar(valor): return True + def set(self, registro, valor): + super(CampoCPF, self).set(registro, re.sub('[\D]', '', valor or '')) + class CampoCPFouCNPJ(Campo): @staticmethod def validar(valor): + valor = re.sub('[\D]', '', valor) if len(valor) == 14: return CampoCNPJ.validar(valor) if len(valor) == 11: diff --git a/sped/efd/icms_ipi/registros.py b/sped/efd/icms_ipi/registros.py index 4e0343a..851dde0 100644 --- a/sped/efd/icms_ipi/registros.py +++ b/sped/efd/icms_ipi/registros.py @@ -1,10 +1,16 @@ # -*- coding: utf-8 -*- +from ...campos import ( + Campo, + CampoAlfanumerico, + CampoCPF, + CampoCNPJ, + CampoData, + CampoFixo, + CampoNumerico, + CampoInteiro +) from ...registros import Registro -from ...campos import Campo -from ...campos import CampoData -from ...campos import CampoFixo -from ...campos import CampoNumerico class Registro0000(Registro): @@ -13,20 +19,20 @@ class Registro0000(Registro): """ campos = [ CampoFixo(1, 'REG', '0000'), - Campo(2, 'COD_VER'), - Campo(3, 'COD_FIN'), - Campo(4, 'DT_INI'), - Campo(5, 'DT_FIN'), - Campo(6, 'NOME'), - Campo(7, 'CNPJ'), - Campo(8, 'CPF'), - Campo(9, 'UF'), - Campo(10, 'IE'), - Campo(11, 'COD_MUN'), + CampoAlfanumerico(2, 'COD_VER', obrigatorio=True, tamanho=3), + CampoAlfanumerico(3, 'COD_FIN', tamanho=1), + CampoData(4, 'DT_INI', obrigatorio=True), + CampoData(5, 'DT_FIN', obrigatorio=True), + CampoAlfanumerico(6, 'NOME', tamanho=100), + CampoCNPJ(7, 'CNPJ', obrigatorio=True), + CampoCPF(8, 'CPF', obrigatorio=True), + CampoAlfanumerico(9, 'UF', tamanho=2), + CampoAlfanumerico(10, 'IE', tamanho=14, somente_numeros=True), + CampoAlfanumerico(11, 'COD_MUN', obrigatorio=True, tamanho=14), Campo(12, 'IM'), - Campo(13, 'SUFRAMA'), - Campo(14, 'IND_PERFIL'), - Campo(15, 'IND_ATIV'), + CampoAlfanumerico(13, 'SUFRAMA', obrigatorio=True, tamanho=9), + CampoAlfanumerico(14, 'IND_PERFIL', tamanho=1), + CampoAlfanumerico(15, 'IND_ATIV', tamanho=1), ] @@ -46,15 +52,15 @@ class Registro0005(Registro): """ campos = [ CampoFixo(1, 'REG', '0005'), - Campo(2, 'FANTASIA'), - Campo(3, 'CEP'), - Campo(4, 'END'), - Campo(5, 'NUM'), - Campo(6, 'COMPL'), - Campo(7, 'BAIRRO'), - Campo(8, 'FONE'), - Campo(9, 'FAX'), - Campo(10, 'EMAIL'), + CampoAlfanumerico(2, 'FANTASIA', tamanho=60), + CampoAlfanumerico(3, 'CEP', obrigatorio=True, tamanho=8, somente_numeros=True), + CampoAlfanumerico(4, 'END', tamanho=60), + CampoAlfanumerico(5, 'NUM', tamanho=10), + CampoAlfanumerico(6, 'COMPL', tamanho=60), + CampoAlfanumerico(7, 'BAIRRO', tamanho=60), + CampoAlfanumerico(8, 'FONE', obrigatorio=True, tamanho=10, somente_numeros=True), + CampoAlfanumerico(9, 'FAX', obrigatorio=True, tamanho=10, somente_numeros=True), + Campo(10, 'EMAIL', obrigatorio=True), ] @@ -75,19 +81,19 @@ class Registro0100(Registro): """ campos = [ CampoFixo(1, 'REG', '0100'), - Campo(2, 'NOME'), - Campo(3, 'CPF'), - Campo(4, 'CRC'), - Campo(5, 'CNPJ'), - Campo(6, 'CEP'), - Campo(7, 'END'), - Campo(8, 'NUM'), - Campo(9, 'COMPL'), - Campo(10, 'BAIRRO'), - Campo(11, 'FONE'), - Campo(12, 'FAX'), + CampoAlfanumerico(2, 'NOME', tamanho=100), + CampoCPF(3, 'CPF', obrigatorio=True), + CampoAlfanumerico(4, 'CRC', tamanho=15), + CampoCNPJ(5, 'CNPJ', obrigatorio=True), + CampoAlfanumerico(6, 'CEP', obrigatorio=True, tamanho=8, somente_numeros=True), + CampoAlfanumerico(7, 'END', tamanho=60), + CampoAlfanumerico(8, 'NUM', tamanho=10), + CampoAlfanumerico(9, 'COMPL', tamanho=60), + CampoAlfanumerico(10, 'BAIRRO', tamanho=60), + CampoAlfanumerico(11, 'FONE', obrigatorio=True, tamanho=10, somente_numeros=True), + CampoAlfanumerico(12, 'FAX', obrigatorio=True, tamanho=10, somente_numeros=True), Campo(13, 'EMAIL'), - Campo(14, 'COD_MUN'), + CampoAlfanumerico(14, 'COD_MUN', obrigatorio=True, tamanho=7), ] @@ -97,18 +103,18 @@ class Registro0150(Registro): """ campos = [ CampoFixo(1, 'REG', '0150'), - Campo(2, 'COD_PART'), - Campo(3, 'NOME'), - Campo(4, 'COD_PAIS'), - Campo(5, 'CNPJ'), - Campo(6, 'CPF'), - Campo(7, 'IE'), - Campo(8, 'COD_MUN'), - Campo(9, 'SUFRAMA'), - Campo(10, 'END'), - Campo(11, 'NUM'), - Campo(12, 'COMPL'), - Campo(13, 'BAIRRO'), + CampoInteiro(2, 'COD_PART'), + CampoAlfanumerico(3, 'NOME', tamanho=100), + CampoAlfanumerico(4, 'COD_PAIS', tamanho=5), + CampoCNPJ(5, 'CNPJ'), + CampoCPF(6, 'CPF'), + CampoAlfanumerico(7, 'IE', tamanho=14), + CampoAlfanumerico(8, 'COD_MUN', obrigatorio=True, tamanho=7), + CampoAlfanumerico(9, 'SUFRAMA', tamanho=9), + CampoAlfanumerico(10, 'END', tamanho=60), + CampoAlfanumerico(11, 'NUM', tamanho=10), + CampoAlfanumerico(12, 'COMPL', tamanho=60), + CampoAlfanumerico(13, 'BAIRRO', tamanho=60), ] @@ -130,8 +136,8 @@ class Registro0190(Registro): """ campos = [ CampoFixo(1, 'REG', '0190'), - Campo(2, 'UNID'), - Campo(3, 'DESCR'), + CampoAlfanumerico(2, 'UNID', tamanho=6), + CampoAlfanumerico(3, 'DESCR'), ] @@ -141,14 +147,14 @@ class Registro0200(Registro): """ campos = [ CampoFixo(1, 'REG', '0200'), - Campo(2, 'COD_ITEM'), + CampoAlfanumerico(2, 'COD_ITEM', 60), Campo(3, 'DESCR_ITEM'), Campo(4, 'COD_BARRA'), Campo(5, 'COD_ANT_ITEM'), - Campo(6, 'UNID_INV'), - Campo(7, 'TIPO_ITEM'), - Campo(8, 'COD_NCM'), - Campo(9, 'EX_IPI'), + CampoAlfanumerico(6, 'UNID_INV', tamanho=6), + CampoAlfanumerico(7, 'TIPO_ITEM', tamanho=2), + CampoAlfanumerico(8, 'COD_NCM', tamanho=8, somente_numeros=True), + CampoAlfanumerico(9, 'EX_IPI', tamanho=3, somente_numeros=True), Campo(10, 'COD_GEN'), Campo(11, 'COD_LST'), Campo(12, 'ALIQ_ICMS'), diff --git a/test/pis_cofins.py b/test/pis_cofins.py index 250a162..188db10 100644 --- a/test/pis_cofins.py +++ b/test/pis_cofins.py @@ -9,7 +9,7 @@ os.chdir(test_root) sys.path.insert(0, os.path.dirname(test_root)) sys.path.insert(0, test_root) - +from datetime import datetime from sped.efd.icms_ipi.arquivos import ArquivoDigital from sped.efd.icms_ipi.registros import Registro0100 @@ -45,9 +45,9 @@ def test_read_registro(self): arq._registro_abertura.COD_VER = '010' arq._registro_abertura.COD_FIN = '0' - arq._registro_abertura.DT_INI = '01102016' - arq._registro_abertura.DT_FIN = '30102016' - arq._registro_abertura.NOME = 'KMEE INFORMATICA LTDA' + arq._registro_abertura.DT_INI = datetime(2018, 11, 1).date() + arq._registro_abertura.DT_FIN = datetime(2018, 11, 30).date() + arq._registro_abertura.NOME = 'OUTTECH SERVICES IT' arq._registro_abertura.CNPJ = '53.939.351/0001-29' arq._registro_abertura.CPF = '333.333.333-33' arq._registro_abertura.UF = 'SP' @@ -68,6 +68,7 @@ def test_read_registro(self): arq._blocos['0'].add(contabilista) self.assertEqual(txt, arq.getstring()) + print arq.getstring() if __name__ == '__main__': unittest.main() From 1e65163a601f10cf97de5399b872604d7a8cbe79 Mon Sep 17 00:00:00 2001 From: devmetal Date: Thu, 25 Oct 2018 01:22:52 -0300 Subject: [PATCH 2/7] =?UTF-8?q?[UPD]=20Registro=200205:=20Altera=C3=A7?= =?UTF-8?q?=C3=A3o=20no=20produto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sped/efd/icms_ipi/registros.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sped/efd/icms_ipi/registros.py b/sped/efd/icms_ipi/registros.py index 851dde0..4a61274 100644 --- a/sped/efd/icms_ipi/registros.py +++ b/sped/efd/icms_ipi/registros.py @@ -168,8 +168,8 @@ class Registro0205(Registro): campos = [ CampoFixo(1, 'REG', '0205'), Campo(2, 'DESCR_ANT_ITEM'), - Campo(3, 'DT_INI'), - Campo(4, 'DT_FIM'), + CampoData(3, 'DT_INI'), + CampoData(4, 'DT_FIM'), Campo(5, 'COD_ANT_ITEM'), ] From f579d33d60cb5ca0b781581c10a4a0aa1c1a0119 Mon Sep 17 00:00:00 2001 From: devmetal Date: Tue, 30 Oct 2018 11:01:33 -0300 Subject: [PATCH 3/7] [UPD] Atualizado campos de registros (Data, Inteiro, etc) --- sped/efd/icms_ipi/registros.py | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/sped/efd/icms_ipi/registros.py b/sped/efd/icms_ipi/registros.py index 4a61274..4724508 100644 --- a/sped/efd/icms_ipi/registros.py +++ b/sped/efd/icms_ipi/registros.py @@ -228,8 +228,8 @@ class Registro0400(Registro): """ campos = [ CampoFixo(1, 'REG', '0400'), - Campo(2, 'COD_NAT'), - Campo(3, 'DESCR_NAT'), + CampoAlfanumerico(2, 'COD_NAT', tamanho=10, somente_numeros=True), + CampoAlfanumerico(3, 'DESCR_NAT'), ] @@ -2407,7 +2407,7 @@ class RegistroH001(Registro): """ campos = [ CampoFixo(1, 'REG', 'H001'), - Campo(2, 'IND_MO V'), + Campo(2, 'IND_MOV'), ] @@ -2417,8 +2417,8 @@ class RegistroH005(Registro): """ campos = [ CampoFixo(1, 'REG', 'H005'), - Campo(2, 'DT_INV'), - Campo(3, 'VL_INV'), + CampoData(2, 'DT_INV'), + CampoNumerico(3, 'VL_INV', precisao=2), Campo(4, 'MOT_INV'), ] @@ -2431,13 +2431,14 @@ class RegistroH010(Registro): CampoFixo(1, 'REG', 'H010'), Campo(2, 'COD_ITEM'), Campo(3, 'UNID'), - Campo(4, 'QTD'), - Campo(5, 'VL_UNIT'), - Campo(6, 'VL_ITEM'), + CampoNumerico(4, 'QTD', precisao=3), + CampoNumerico(5, 'VL_UNIT', precisao=6), + CampoNumerico(6, 'VL_ITEM', precisao=2), Campo(7, 'IND_PROP'), Campo(8, 'COD_PART'), Campo(9, 'TXT_COMPL'), Campo(10, 'COD_CTA'), + CampoNumerico(11, 'VL_ITEM_IR', precisao=2), ] @@ -2459,7 +2460,7 @@ class RegistroH990(Registro): """ campos = [ CampoFixo(1, 'REG', 'H990'), - CampoNumerico(2, 'QTD_LIN_H'), + CampoNumerico(2, 'QTD_LIN_H') ] @@ -2469,7 +2470,7 @@ class RegistroK001(Registro): """ campos = [ CampoFixo(1, 'REG', 'K001'), - Campo(2, 'IND_MOV'), + Campo(2, 'IND_MOV') ] @@ -2480,7 +2481,7 @@ class RegistroK100(Registro): campos = [ CampoFixo(1, 'REG', 'K100'), CampoData(2, 'DT_INI'), - CampoData(3, 'DT_FIN'), + CampoData(3, 'DT_FIN') ] @@ -2492,9 +2493,9 @@ class RegistroK200(Registro): CampoFixo(1, 'REG', 'K200'), CampoData(2, 'DT_EST'), Campo(3, 'COD_ITEM'), - Campo(4, 'QTD'), - Campo(5, 'IND_EST'), - Campo(6, 'COD_PART'), + CampoNumerico(4, 'QTD', precisao=3), + CampoAlfanumerico(5, 'IND_EST', tamanho=1), + Campo(6, 'COD_PART') ] @@ -2507,7 +2508,7 @@ class RegistroK220(Registro): CampoData(2, 'DT_MOV'), Campo(3, 'COD_ITEM_ORI'), Campo(4, 'COD_ITEM_DEST'), - Campo(5, 'QTD'), + Campo(5, 'QTD') ] @@ -2521,7 +2522,7 @@ class RegistroK230(Registro): CampoData(3, 'DT_FIN_OP'), Campo(4, 'COD_DOC_OP'), Campo(5, 'COD_ITEM'), - Campo(6, 'QTD_ENC'), + Campo(6, 'QTD_ENC') ] From 3f7be2f4999138f8077d529118ef607d3b67c11b Mon Sep 17 00:00:00 2001 From: devmetal Date: Tue, 30 Oct 2018 16:35:09 -0300 Subject: [PATCH 4/7] [NEW] REGISTRO K210: Desmontagem de Mercadorias --- sped/efd/icms_ipi/registros.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sped/efd/icms_ipi/registros.py b/sped/efd/icms_ipi/registros.py index 4724508..835b550 100644 --- a/sped/efd/icms_ipi/registros.py +++ b/sped/efd/icms_ipi/registros.py @@ -2499,6 +2499,20 @@ class RegistroK200(Registro): ] +class RegistroK210(Registro): + """ + DESMONTAGEM DE MERCADORIAS + """ + campos = [ + CampoFixo(1, 'REG', 'K210'), + CampoData(2, 'DT_INI_OS'), + CampoData(3, 'DT_FIN_OS'), + CampoAlfanumerico(4, 'COD_DOC_OS', tamanho=30), + CampoAlfanumerico(5, 'COD_ITEM_ORI', tamanho=60), + CampoNumerico(6, 'QTD_ORI', precisao=3) + ] + + class RegistroK220(Registro): """ OUTRAS MOVIMENTAÇÕES INTERNAS ENTRE MERCADORIAS From cc34fc1effc79741c0d44bb50045fe6dc723da28 Mon Sep 17 00:00:00 2001 From: devmetal Date: Thu, 1 Nov 2018 17:50:41 -0300 Subject: [PATCH 5/7] [NEW] REGISTRO K250/K255 --- sped/efd/icms_ipi/registros.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sped/efd/icms_ipi/registros.py b/sped/efd/icms_ipi/registros.py index 835b550..e07cfbe 100644 --- a/sped/efd/icms_ipi/registros.py +++ b/sped/efd/icms_ipi/registros.py @@ -2561,7 +2561,7 @@ class RegistroK250(Registro): CampoFixo(1, 'REG', 'K250'), CampoData(2, 'DT_PROD'), Campo(3, 'COD_ITEM'), - Campo(4, 'QTD'), + CampoNumerico(4, 'QTD', 3), ] @@ -2573,7 +2573,7 @@ class RegistroK255(Registro): CampoFixo(1, 'REG', 'K255'), CampoData(2, 'DT_CONS'), Campo(3, 'COD_ITEM'), - Campo(4, 'QTD'), + CampoNumerico(4, 'QTD', 3), Campo(5, 'COD_INS_SUBST'), ] From 298b2b059d368abfd33635b3c7c71497888ea2bc Mon Sep 17 00:00:00 2001 From: devmetal Date: Mon, 12 Nov 2018 17:06:18 -0200 Subject: [PATCH 6/7] [UPD] compatibilidade python 3 --- sped/campos.py | 2 +- sped/efd/icms_ipi/registros.py | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/sped/campos.py b/sped/campos.py index 838058a..b27c4b5 100644 --- a/sped/campos.py +++ b/sped/campos.py @@ -114,7 +114,7 @@ def tamanho(self): def set(self, registro, valor): valor = valor or '' - if isinstance(valor, (str, unicode)): + if isinstance(valor, string_types): valor = unidecode(valor) if self._somente_numeros: valor = re.sub('[\D]', '', valor) diff --git a/sped/efd/icms_ipi/registros.py b/sped/efd/icms_ipi/registros.py index e07cfbe..bcee76e 100644 --- a/sped/efd/icms_ipi/registros.py +++ b/sped/efd/icms_ipi/registros.py @@ -30,7 +30,7 @@ class Registro0000(Registro): CampoAlfanumerico(10, 'IE', tamanho=14, somente_numeros=True), CampoAlfanumerico(11, 'COD_MUN', obrigatorio=True, tamanho=14), Campo(12, 'IM'), - CampoAlfanumerico(13, 'SUFRAMA', obrigatorio=True, tamanho=9), + CampoAlfanumerico(13, 'SUFRAMA', tamanho=9), CampoAlfanumerico(14, 'IND_PERFIL', tamanho=1), CampoAlfanumerico(15, 'IND_ATIV', tamanho=1), ] @@ -59,7 +59,7 @@ class Registro0005(Registro): CampoAlfanumerico(6, 'COMPL', tamanho=60), CampoAlfanumerico(7, 'BAIRRO', tamanho=60), CampoAlfanumerico(8, 'FONE', obrigatorio=True, tamanho=10, somente_numeros=True), - CampoAlfanumerico(9, 'FAX', obrigatorio=True, tamanho=10, somente_numeros=True), + CampoAlfanumerico(9, 'FAX', tamanho=10, somente_numeros=True), Campo(10, 'EMAIL', obrigatorio=True), ] @@ -91,7 +91,7 @@ class Registro0100(Registro): CampoAlfanumerico(9, 'COMPL', tamanho=60), CampoAlfanumerico(10, 'BAIRRO', tamanho=60), CampoAlfanumerico(11, 'FONE', obrigatorio=True, tamanho=10, somente_numeros=True), - CampoAlfanumerico(12, 'FAX', obrigatorio=True, tamanho=10, somente_numeros=True), + CampoAlfanumerico(12, 'FAX', tamanho=10, somente_numeros=True), Campo(13, 'EMAIL'), CampoAlfanumerico(14, 'COD_MUN', obrigatorio=True, tamanho=7), ] @@ -2578,6 +2578,21 @@ class RegistroK255(Registro): ] +class RegistroK280(Registro): + """ + CORREÇÃO DE APONTAMENTO - ESTOQUE ESCRITURADO + """ + campos = [ + CampoFixo(1, 'REG', 'K280'), + CampoData(2, 'DT_EST'), + CampoAlfanumerico(3, 'COD_ITEM', tamanho=60), + CampoNumerico(4, 'QTD_COR_POS', 3), + CampoNumerico(5, 'QTD_COR_NEG', 3), + CampoAlfanumerico(6, 'IND_EST', tamanho=1), + CampoAlfanumerico(7, 'COD_PART', tamanho=60), + ] + + class RegistroK990(Registro): """ ENCERRAMENTO DO BLOCO K From ef00856524352081efbaaee51dc3cad14e9826f1 Mon Sep 17 00:00:00 2001 From: devmetal Date: Tue, 13 Nov 2018 14:08:23 -0200 Subject: [PATCH 7/7] dependencies --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0fe7986..c5f5ee9 100644 --- a/setup.py +++ b/setup.py @@ -64,7 +64,7 @@ def run_tests(self): 'Programming Language :: Python :: 3.4', ], keywords='sped fiscal contábil contabilidade receita federal', - install_requires=['six'], + install_requires=['six', 'Unidecode'], tests_require=['pytest'], cmdclass={'test': PyTest}, )