From 77da25331edb376d3dc6ff85710eceb319bbaffe Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Thu, 11 May 2017 18:57:36 -0300 Subject: [PATCH 01/81] [REF] Improve test verbosit --- run_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run_tests.sh b/run_tests.sh index 0bd9174..5096e5f 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -1,3 +1,3 @@ #!/bin/bash -python -m unittest discover || unit2 discover +python -m unittest discover -v || unit2 discover From 866633bde3f99f43f180b6114def07d018212ccd Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Thu, 11 May 2017 19:13:09 -0300 Subject: [PATCH 02/81] [FIX] Add requirements.txt --- .travis.yml | 6 ++---- requirements.txt | 4 ++++ 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 requirements.txt diff --git a/.travis.yml b/.travis.yml index b002ef6..28414eb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,10 +3,8 @@ python: - "2.6" - "2.7" # - "3.2": Not supported yet -install: - - "pip install unittest2 --use-mirrors" - - "pip install ordereddict --use-mirrors || echo \"It's ok...\"" - - "pip install importlib --use-mirrors || echo \"It's ok...\"" +install: + - "pip install -r requirements.txt" script: ./run_tests.sh notifications: irc: diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2bcdc12 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +unittest2 +ordereddict +importlib +discover \ No newline at end of file From af062db92921cd6737e26529086cb71838e1b06c Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Thu, 11 May 2017 19:22:52 -0300 Subject: [PATCH 03/81] [FIX] travis.yml --- .travis.yml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 28414eb..74e94d1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,17 @@ language: python python: - "2.6" - "2.7" -# - "3.2": Not supported yet -install: + - "3.2" + - "3.3" + - "3.4" + # PyPy versions + - "pypy" # PyPy2 2.5.0 + - "pypy3" # Pypy3 2.4.0 + - "pypy-5.3.1" +script: + - "pip install ." - "pip install -r requirements.txt" -script: ./run_tests.sh -notifications: - irc: - - "irc.freenode.org#tracy-web-tech" + - "python -m unittest discover || unit2 discover" + +after_success: + coveralls \ No newline at end of file From 6472529363f3df37ac7b1c4ddd5857b438efca1b Mon Sep 17 00:00:00 2001 From: "Carlos R. Silveira" Date: Wed, 13 Jul 2016 15:10:18 -0300 Subject: [PATCH 04/81] Ajustado para CEF. --- cnab240/bancos/cef/specs/header_arquivo.json | 12 ++-- .../cef/specs/header_lote_cobranca.json | 8 +-- cnab240/bancos/cef/specs/segmento_p.json | 63 +++++++++++-------- cnab240/bancos/cef/specs/trailer_arquivo.json | 6 +- .../cef/specs/trailer_lote_cobranca.json | 24 ++++--- 5 files changed, 64 insertions(+), 49 deletions(-) diff --git a/cnab240/bancos/cef/specs/header_arquivo.json b/cnab240/bancos/cef/specs/header_arquivo.json index fd84ef9..70c8fd3 100644 --- a/cnab240/bancos/cef/specs/header_arquivo.json +++ b/cnab240/bancos/cef/specs/header_arquivo.json @@ -26,7 +26,7 @@ }, "04.0": { - "nome": "FEBRABANCNAB", + "nome": "vazio1", "posicao_inicio": 9, "posicao_fim": 17, "formato": "alfa", @@ -48,7 +48,7 @@ }, "07.0": { - "nome": "cedente_usoexclusivo_caixa", + "nome": "vazio2", "posicao_inicio": 33, "posicao_fim": 52, "formato": "num", @@ -56,14 +56,14 @@ }, "08.0": { - "nome": "cedente_codigo_agencia_cod", + "nome": "cedente_agencia", "posicao_inicio": 53, "posicao_fim": 57, "formato": "num" }, "09.0": { - "nome": "cedente_codigo_agencia_digito", + "nome": "cedente_agencia_dv", "posicao_inicio": 58, "posicao_fim": 58, "formato": "alfa" @@ -93,14 +93,14 @@ }, "13.0": { - "nome": "cedente_nomeEmpresa", + "nome": "cedente_nome", "posicao_inicio": 73, "posicao_fim": 102, "formato": "alfa" }, "14.0": { - "nome": "nomeDoBanco", + "nome": "nome_do_banco", "posicao_inicio": 103, "posicao_fim": 132, "formato": "alfa" diff --git a/cnab240/bancos/cef/specs/header_lote_cobranca.json b/cnab240/bancos/cef/specs/header_lote_cobranca.json index c57e50c..1053738 100644 --- a/cnab240/bancos/cef/specs/header_lote_cobranca.json +++ b/cnab240/bancos/cef/specs/header_lote_cobranca.json @@ -92,7 +92,7 @@ }, "12.1": { - "nome": "cedente_agencia_cod", + "nome": "cedente_agencia", "posicao_inicio": 54, "posicao_fim": 58, "formato": "num" @@ -106,7 +106,7 @@ }, "14.1": { - "nome": "cedente_cod_cedente", + "nome": "cedente_codigo_codCedente", "posicao_inicio": 60, "posicao_fim": 65, "formato": "num" @@ -149,14 +149,14 @@ }, "20.1": { - "nome": "controleCobranca_remessaRetorno", + "nome": "arquivo_sequencia", "posicao_inicio": 184, "posicao_fim": 191, "formato": "num" }, "21.1": { - "nome": "controleCobranca_dataGravacao", + "nome": "controlecob_data_gravacao", "posicao_inicio": 192, "posicao_fim": 199, "formato": "num" diff --git a/cnab240/bancos/cef/specs/segmento_p.json b/cnab240/bancos/cef/specs/segmento_p.json index 3f21f1f..437b01a 100644 --- a/cnab240/bancos/cef/specs/segmento_p.json +++ b/cnab240/bancos/cef/specs/segmento_p.json @@ -25,10 +25,11 @@ }, "04.3P": { - "nome": "servico_numeroRegistro", + "nome": "servico_numero_registro", "posicao_inicio": 9, "posicao_fim": 13, - "formato": "num" + "formato": "num", + "default": 1 }, "05.3P": { @@ -40,7 +41,7 @@ }, "06.3P": { - "nome": "cnab_exclusivo_campo06dot3", + "nome": "vazio1", "posicao_inicio": 15, "posicao_fim": 15, "formato": "alfa", @@ -48,35 +49,37 @@ }, "07.3P": { - "nome": "servico_codigoMovimento", + "nome": "servico_codigo_movimento", "posicao_inicio": 16, "posicao_fim": 17, - "formato": "num" + "formato": "num", + "default": 1 }, "08.3P": { - "nome": "cedente_agencia_cod", + "nome": "cedente_agencia", "posicao_inicio": 18, "posicao_fim": 22, "formato": "num" }, "09.3P": { - "nome": "cedente_agencia_conta_dv", + "nome": "cedente_agencia_dv", "posicao_inicio": 23, "posicao_fim": 23, "formato": "alfa" }, "10.3P": { - "nome": "cedente_codigoCedente", + "nome": "cedente_convenio", "posicao_inicio": 24, "posicao_fim": 29, - "formato": "num" + "formato": "num", + "default": 1 }, "11.3P": { - "nome": "cedente_caixa_exclusivo_campo11dot3-", + "nome": "vazio4", "posicao_inicio": 30, "posicao_fim": 37, "formato": "num", @@ -84,15 +87,15 @@ }, "12.3P": { - "nome": "caixa_exclusivo_campo12dot3-", + "nome": "vazio5", "posicao_inicio": 38, "posicao_fim": 40, "formato": "num", "default": 0 }, - "13.3P": { - "nome": "carteira_numero", + "13.3.1P": { + "nome": "boleto_modalidade", "posicao_inicio": 41, "posicao_fim": 42, "formato": "num" @@ -102,21 +105,24 @@ "nome": "carteira_titulo", "posicao_inicio": 43, "posicao_fim": 57, - "formato": "num" + "formato": "num", + "default": 1 }, "14.3P": { "nome": "cobranca_carteiraCod", "posicao_inicio": 58, "posicao_fim": 58, - "formato": "num" + "formato": "num", + "default": 1 }, "15.3P": { "nome": "cobranca_cadastramento", "posicao_inicio": 59, "posicao_fim": 59, - "formato": "num" + "formato": "num", + "default": 1 }, "16.3P": { @@ -131,14 +137,16 @@ "nome": "cobranca_emissaoBloqueto", "posicao_inicio": 61, "posicao_fim": 61, - "formato": "num" + "formato": "num", + "default": 1 }, "18.3P": { "nome": "cobranca_distribuicaoBloqueto", "posicao_inicio": 62, "posicao_fim": 62, - "formato": "alfa" + "formato": "alfa", + "default": "1" }, "19.3P": { @@ -149,7 +157,7 @@ }, "19.3.2P": { - "nome": "caixa_exclusivo_campo19dot3dot2P", + "nome": "vazio7", "posicao_inicio": 74, "posicao_fim": 77, "formato": "alfa", @@ -184,7 +192,7 @@ "posicao_inicio": 106, "posicao_fim": 106, "formato": "alfa", - "default": 0 + "default": "0" }, "24.3P": { @@ -216,14 +224,14 @@ }, "28.3P": { - "nome": "juros_data_mora", + "nome": "juros_mora_data", "posicao_inicio": 119, "posicao_fim": 126, "formato": "num" }, "29.3P": { - "nome": "juros_mora", + "nome": "juros_mora_taxa_dia", "posicao_inicio": 127, "posicao_fim": 141, "formato": "num", @@ -234,7 +242,8 @@ "nome": "desconto1_cod", "posicao_inicio": 142, "posicao_fim": 142, - "formato": "num" + "formato": "num", + "default": 1 }, "31.3P": { @@ -269,7 +278,7 @@ }, "35.3P": { - "nome": "cedente_identificacaoTitulo", + "nome": "identificacao_titulo", "posicao_inicio": 196, "posicao_fim": 220, "formato": "alfa" @@ -311,15 +320,15 @@ }, "41.3P": { - "nome": "caixa_exclusivo_campo41dot3P", + "nome": "vazio11", "posicao_inicio": 230, - "posicao_fim": 229, + "posicao_fim": 239, "formato": "num", "default": 0 }, "42.3P": { - "nome": "cnab_exclusivo_campo42dot3P", + "nome": "vazio12", "posicao_inicio": 240, "posicao_fim": 240, "formato": "alfa", diff --git a/cnab240/bancos/cef/specs/trailer_arquivo.json b/cnab240/bancos/cef/specs/trailer_arquivo.json index 3dbafed..aaa3ccb 100644 --- a/cnab240/bancos/cef/specs/trailer_arquivo.json +++ b/cnab240/bancos/cef/specs/trailer_arquivo.json @@ -26,7 +26,7 @@ }, "04.9": { - "nome": "cnab_exclusivo_campo04dot9", + "nome": "vazio1", "posicao_inicio": 9, "posicao_fim": 17, "formato": "alfa", @@ -48,7 +48,7 @@ }, "07.9": { - "nome": "cnab_exclusivo_campo07dot9", + "nome": "vazio2", "posicao_inicio": 30, "posicao_fim": 35, "formato": "alfa", @@ -56,7 +56,7 @@ }, "08.9": { - "nome": "cnab_exclusivo_campo08dot9", + "nome": "vazio3", "posicao_inicio": 36, "posicao_fim": 240, "formato": "alfa", diff --git a/cnab240/bancos/cef/specs/trailer_lote_cobranca.json b/cnab240/bancos/cef/specs/trailer_lote_cobranca.json index 0581d5b..1c167ea 100644 --- a/cnab240/bancos/cef/specs/trailer_lote_cobranca.json +++ b/cnab240/bancos/cef/specs/trailer_lote_cobranca.json @@ -25,7 +25,7 @@ }, "04.5": { - "nome": "cnab_exclusivo_04dot5", + "nome": "vazio1", "posicao_inicio": 9, "posicao_fim": 17, "formato": "alfa", @@ -43,7 +43,8 @@ "nome": "cobrancasimples_quantidade_titulos", "posicao_inicio": 24, "posicao_fim": 29, - "formato": "num" + "formato": "num", + "default": 0 }, "07.5": { @@ -51,28 +52,32 @@ "posicao_inicio": 30, "posicao_fim": 46, "formato": "num", - "decimais": 2 + "decimais": 2, + "default": 0 }, "08.5": { "nome": "cobrancaCaucionada_quantidade_titulos", "posicao_inicio": 47, "posicao_fim": 52, - "formato": "alfa" + "formato": "num", + "default": 1 }, "09.5": { "nome": "cobrancaCaucionada_valor_titulos", "posicao_inicio": 53, "posicao_fim": 69, - "formato": "alfa" + "formato": "num", + "default": 0 }, "10.5": { "nome": "total_desc_titulosCobranca", "posicao_inicio": 70, "posicao_fim": 75, - "formato": "num" + "formato": "num", + "default": 0 }, "11.5": { @@ -80,11 +85,12 @@ "posicao_inicio": 76, "posicao_fim": 92, "formato": "num", - "decimais": 2 + "decimais": 2, + "default": 0 }, "12.5": { - "nome": "FebrabanExclusivo_12dot5", + "nome": "vazio2", "posicao_inicio": 93, "posicao_fim": 123, "formato": "alfa", @@ -92,7 +98,7 @@ }, "13.5": { - "nome": "FebrabanExclusivo_13dot5", + "nome": "vazio3", "posicao_inicio": 124, "posicao_fim": 240, "formato": "alfa", From 4c11896cf62e2adf98f3225e1a69878cb345a7cd Mon Sep 17 00:00:00 2001 From: "Carlos R. Silveira" Date: Wed, 13 Jul 2016 15:10:41 -0300 Subject: [PATCH 05/81] Ajuste agencia itau. --- cnab240/bancos/itau/specs/segmento_p.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cnab240/bancos/itau/specs/segmento_p.json b/cnab240/bancos/itau/specs/segmento_p.json index 6cc0106..512829e 100644 --- a/cnab240/bancos/itau/specs/segmento_p.json +++ b/cnab240/bancos/itau/specs/segmento_p.json @@ -101,7 +101,7 @@ }, "14.3P": { - "nome": "cedente_agencia_conta_dv", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 37, "posicao_fim": 37, "formato": "num" From 0674121e767d25d7f2b25ee69c644de7f6d3d4ac Mon Sep 17 00:00:00 2001 From: "Carlos R. Silveira" Date: Wed, 13 Jul 2016 15:11:25 -0300 Subject: [PATCH 06/81] Ajustes Santander. --- cnab240/bancos/santander/specs/segmento_p.json | 12 ++++++------ cnab240/bancos/santander/specs/trailer_arquivo.json | 6 +++--- .../santander/specs/trailer_lote_cobranca.json | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/cnab240/bancos/santander/specs/segmento_p.json b/cnab240/bancos/santander/specs/segmento_p.json index 7ab5fe0..78d053e 100644 --- a/cnab240/bancos/santander/specs/segmento_p.json +++ b/cnab240/bancos/santander/specs/segmento_p.json @@ -76,7 +76,7 @@ }, "11.3P": { - "nome": "cedente_conta_dv", + "nome": "cedente_agencia_conta_dv", "posicao_inicio": 32, "posicao_fim": 32, "formato": "num" @@ -118,7 +118,7 @@ "posicao_inicio": 58, "posicao_fim": 58, "formato": "num", - "default": 0 + "default": 1 }, "17.3P": { @@ -126,7 +126,7 @@ "posicao_inicio": 59, "posicao_fim": 59, "formato": "num", - "default": 0 + "default": 1 }, "18.3P": { @@ -134,7 +134,7 @@ "posicao_inicio": 60, "posicao_fim": 60, "formato": "num", - "default": 0 + "default": 1 }, "19.3P": { @@ -327,8 +327,8 @@ "nome": "vazio6", "posicao_inicio": 225, "posicao_fim": 225, - "formato": "alfa", - "default": "" + "formato": "num", + "default": 0 }, "43.3P": { diff --git a/cnab240/bancos/santander/specs/trailer_arquivo.json b/cnab240/bancos/santander/specs/trailer_arquivo.json index 8faef6c..b29201c 100644 --- a/cnab240/bancos/santander/specs/trailer_arquivo.json +++ b/cnab240/bancos/santander/specs/trailer_arquivo.json @@ -14,7 +14,7 @@ "posicao_inicio": 4, "posicao_fim": 7, "formato": "num", - "default": 0 + "default": 9999 }, "03.9": { @@ -29,8 +29,8 @@ "nome": "vazio1", "posicao_inicio": 9, "posicao_fim": 17, - "formato": "num", - "default": 0 + "formato": "alfa", + "default": "" }, "05.9": { diff --git a/cnab240/bancos/santander/specs/trailer_lote_cobranca.json b/cnab240/bancos/santander/specs/trailer_lote_cobranca.json index 4dc7ab7..3154e0e 100644 --- a/cnab240/bancos/santander/specs/trailer_lote_cobranca.json +++ b/cnab240/bancos/santander/specs/trailer_lote_cobranca.json @@ -29,8 +29,8 @@ "nome": "vazio1", "posicao_inicio": 9, "posicao_fim": 17, - "formato": "num", - "default": 0 + "formato": "alfa", + "default": "" }, "05.5": { @@ -41,9 +41,9 @@ "default": 0 }, - "05.5": { + "06.5": { "nome": "vazio2", - "posicao_inicio": 25, + "posicao_inicio": 24, "posicao_fim": 240, "formato": "alfa", "default": "" From 8de8598a84afb77b649e18b52fcf650d0c70ee18 Mon Sep 17 00:00:00 2001 From: "Carlos R. Silveira" Date: Wed, 13 Jul 2016 15:13:29 -0300 Subject: [PATCH 07/81] =?UTF-8?q?Removido=20espa=C3=A7os=20e=20alguns=20aj?= =?UTF-8?q?ustes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/errors.py | 42 +++++++---- cnab240/registro.py | 79 ++++++++++++-------- cnab240/tipos.py | 176 +++++++++++++++++++++++++++++--------------- 3 files changed, 191 insertions(+), 106 deletions(-) diff --git a/cnab240/errors.py b/cnab240/errors.py index 3f7c08c..329b585 100644 --- a/cnab240/errors.py +++ b/cnab240/errors.py @@ -1,33 +1,44 @@ # -*- coding: utf-8 -*- + class Cnab240Error(Exception): """Excessao base para o CNAB 240""" -class AtribuicaoCampoError(Cnab240Error): - """Tentativa de atribuicao de valor indevido ao campo""" +class AtribuicaoCampoError(Cnab240Error): + """Tentativa de atribuicao de valor indevido ao campo""" def __init__(self, campo, valor): self.campo = campo self.valor = valor - super(AtribuicaoCampoError, self).__init__(self) - - def __unicode__(self): + #super(AtribuicaoCampoError, self).__init__(self) + super(AtribuicaoCampoError, self).__init__() + + def __unicode__(self): return u'campo:{0} formato:{1} decimais:{2} digitos:{3} - valor:{4}'.\ - format( - self.campo.nome, - self.campo.formato, + format( + self.campo.nome, + self.campo.formato, self.campo.decimais, - self.campo.digitos, + self.campo.digitos, repr(self.valor), ) + def __str__(self): + return 'campo:{0} formato:{1} decimais:{2} digitos:{3} - valor:{4}'.\ + format( + self.campo.nome, + self.campo.formato, + self.campo.decimais, + self.campo.digitos, + repr(self.valor), + ) + +class NumDigitosExcedidoError(AtribuicaoCampoError): + """Tentativa de atribuicao de valor mais longo que o campo suportaia""" -class NumDigitosExcedidoError(AtribuicaoCampoError): - """Tentativa de atribuicao de valor mais longo que o campo suportaia""" - -class TipoError(AtribuicaoCampoError): +class TipoError(AtribuicaoCampoError): """Tentativa de atribuicao de tipo nao suportado pelo campo""" @@ -40,7 +51,8 @@ class FaltandoArgsError(Cnab240Error): def __init__(self, args_faltantes): self.args_faltantes = args_faltantes - super(FaltandoArgsError, self).__init__(self) + #super(FaltandoArgsError, self).__init__(self) + super(FaltandoArgsError, self).__init__() def __unicode__(self): return (u'Os seguintes kwargs sao obrigatorios e nao foram ' @@ -57,5 +69,3 @@ class NenhumEventoError(Cnab240Error): class CampoObrigatorioError(Cnab240Error): """Campo obrigatorio nao preenchido.""" - - diff --git a/cnab240/registro.py b/cnab240/registro.py index a6103a2..408fc30 100644 --- a/cnab240/registro.py +++ b/cnab240/registro.py @@ -24,44 +24,64 @@ def valor(self): @valor.setter def valor(self, valor): if self.formato == 'alfa': - if not isinstance(valor, unicode): + #if not isinstance(valor, unicode): + if not isinstance(valor, basestring): + print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) if len(valor) > self.digitos: - raise errors.NumDigitosExcedidoError(self, valor) + print "{0} - {1}".format(self.nome, self.valor) + # raise errors.NumDigitosExcedidoError(self, valor) + # reduz o len(valor) + cortar = len(valor) - self.digitos + valor = valor[:-(cortar)] + elif self.decimais: if not isinstance(valor, Decimal): + print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) - + num_decimais = valor.as_tuple().exponent * -1 if num_decimais != self.decimais: + print "{0} - {1}".format(self.nome, self.valor) raise errors.NumDecimaisError(self, valor) - + if len(str(valor).replace('.', '')) > self.digitos: + print "{0} - {1}".format(self.nome, self.valor) raise errors.NumDigitosExcedidoError(self, valor) else: if not isinstance(valor, (int, long)): + print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) if len(str(valor)) > self.digitos: + print "{0} - {1}".format(self.nome, self.valor) raise errors.NumDigitosExcedidoError(self, valor) - + self._valor = valor - def __unicode__(self): + if self.valor is None: if self.default is not None: if self.decimais: - self.valor = Decimal('{0:0.{1}f}'.format(self.default, - self.decimais)) + self.valor = Decimal( + '{0:0.{1}f}'.format(self.default, + self.decimais) + ) else: self.valor = self.default + elif (self.default is None) & (self.valor is None): + if self.decimais or self.formato == 'num': + self.valor = 0 + else: + self.valor = u'' else: raise errors.CampoObrigatorioError(self.nome) - + if self.formato == 'alfa' or self.decimais: if self.decimais: + # if self.formato == 'num': valor = unicode(self.valor).replace('.', '') chars_faltantes = self.digitos - len(valor) return (u'0' * chars_faltantes) + valor @@ -84,43 +104,42 @@ def __get__(self, instance, owner): def criar_classe_campo(spec): nome = spec.get('nome') - inicio = spec.get('posicao_inicio') - 1 - fim = spec.get('posicao_fim') + inicio = spec.get('posicao_inicio') - 1 + fim = spec.get('posicao_fim') attrs = { - 'nome': nome, - 'inicio': inicio, - 'fim': fim, + 'nome': nome, + 'inicio': inicio, + 'fim': fim, 'digitos': fim - inicio, 'formato': spec.get('formato', 'alfa'), 'decimais': spec.get('decimais', 0), 'default': spec.get('default'), } - + return type(nome.encode('utf8'), (CampoBase,), attrs) class RegistroBase(object): - + def __new__(cls, **kwargs): campos = OrderedDict() attrs = {'_campos': campos} for Campo in cls._campos_cls.values(): campo = Campo() - campos.update({campo.nome: campo}) + campos.update({campo.nome: campo}) attrs.update({campo.nome: campo}) new_cls = type(cls.__name__, (cls, ), attrs) return super(RegistroBase, cls).__new__(new_cls, **kwargs) - + def __init__(self, **kwargs): self.fromdict(kwargs) def necessario(self): for campo in self._campos.values(): - eh_controle = campo.nome.startswith('controle_') or \ - campo.nome.startswith('servico_') + eh_controle = campo.nome.startswith('controle_') or campo.nome.startswith('servico_') if not eh_controle and campo.valor != None: return True @@ -130,19 +149,19 @@ def todict(self): data_dict = dict() for campo in self._campos.values(): if campo.valor is not None: - data_dict[campo.nome] = campo.valor + data_dict[campo.nome] = campo.valor return data_dict - + def fromdict(self, data_dict): - ignore_fields = lambda key: any(( - key.startswith('vazio'), - key.startswith('servico_'), - key.startswith('controle_'), + ignore_fields = lambda key: any(( + key.startswith('vazio'), + key.startswith('servico_'), + key.startswith('controle_'), )) for key, value in data_dict.items(): if hasattr(self, key) and not ignore_fields(key): - setattr(self, key, value) + setattr(self, key, value) def carregar(self, registro_str): for campo in self._campos.values(): @@ -153,7 +172,7 @@ def carregar(self, registro_str): try: campo.valor = Decimal(dec) except InvalidOperation: - raise # raise custom? + raise # raise custom? elif campo.formato == 'num': try: @@ -181,7 +200,6 @@ def __init__(self, specs_dirpath): setattr(self, spec.get('nome'), self.criar_classe_registro(spec)) - def criar_classe_registro(self, spec): campos = OrderedDict() attrs = {'_campos_cls': campos} @@ -193,6 +211,5 @@ def criar_classe_registro(self, spec): entrada = {Campo.nome: Campo} campos.update(entrada) - - return type(cls_name, (RegistroBase, ), attrs) + return type(cls_name, (RegistroBase, ), attrs) diff --git a/cnab240/tipos.py b/cnab240/tipos.py index 7c6cf33..000ce33 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos.py @@ -2,7 +2,6 @@ import codecs import importlib - from datetime import datetime from cnab240 import errors @@ -11,25 +10,25 @@ class Evento(object): def __init__(self, banco, codigo_evento): self._segmentos = [] - self.banco = banco + self.banco = banco self.codigo_evento = codigo_evento self._codigo_lote = None - + def adicionar_segmento(self, segmento): - self._segmentos.append(segmento) + self._segmentos.append(segmento) for segmento in self._segmentos: segmento.servico_codigo_movimento = self.codigo_evento - + @property - def segmentos(self): + def segmentos(self): return self._segmentos - + def __getattribute__(self, name): for segmento in object.__getattribute__(self, '_segmentos'): if hasattr(segmento, name): return getattr(segmento, name) return object.__getattribute__(self, name) - + def __unicode__(self): return u'\r\n'.join(unicode(seg) for seg in self._segmentos) @@ -44,34 +43,38 @@ def codigo_lote(self): def codigo_lote(self, valor): self._codigo_lote = valor for segmento in self._segmentos: - segmento.controle_lote = valor - + segmento.controle_lote = valor + def atualizar_codigo_registros(self, last_id): - current_id = last_id + current_id = last_id for segmento in self._segmentos: current_id += 1 segmento.servico_numero_registro = current_id return current_id + class Lote(object): def __init__(self, banco, header=None, trailer=None): self.banco = banco self.header = header - self.trailer = trailer + self.trailer = trailer self._codigo = None - self.trailer.quantidade_registros = 2 - self._eventos = [] + if self.trailer != None: + self.trailer.quantidade_registros = 2 + self._eventos = [] @property def codigo(self): - return self._codigo + return self._codigo @codigo.setter def codigo(self, valor): self._codigo = valor - self.header.controle_lote = valor - self.trailer.controle_lote = valor + if self.header != None: + self.header.controle_lote = valor + if self.trailer != None: + self.trailer.controle_lote = valor self.atualizar_codigo_eventos() def atualizar_codigo_eventos(self): @@ -80,52 +83,59 @@ def atualizar_codigo_eventos(self): def atualizar_codigo_registros(self): last_id = 0 - for evento in self._eventos: - last_id = evento.atualizar_codigo_registros(last_id) - + for evento in self._eventos: + last_id = evento.atualizar_codigo_registros(last_id) + @property def eventos(self): - return self._eventos - + return self._eventos + def adicionar_evento(self, evento): if not isinstance(evento, Evento): raise TypeError self._eventos.append(evento) - self.trailer.quantidade_registros += len(evento) - self.atualizar_codigo_registros() - + if self.trailer != None and hasattr(self.trailer, 'quantidade_registros'): + self.trailer.quantidade_registros += len(evento) + self.atualizar_codigo_registros() + if self._codigo: self.atualizar_codigo_eventos() + # Breakpoint def __unicode__(self): if not self._eventos: raise errors.NenhumEventoError() - - result = [] - result.append(unicode(self.header)) + + result = [] + if self.header != None: + result.append(unicode(self.header)) result.extend(unicode(evento) for evento in self._eventos) - result.append(unicode(self.trailer)) + if self.trailer != None: + result.append(unicode(self.trailer)) return '\r\n'.join(result) def __len__(self): - return self.trailer.quantidade_registros + if self.trailer != None and hasattr(self.trailer, 'quantidade_registros'): + return self.trailer.quantidade_registros + else: + return len(self._eventos) class Arquivo(object): def __init__(self, banco, **kwargs): - """Arquivo Cnab240.""" + """Arquivo Cnab240.""" self._lotes = [] self.banco = banco arquivo = kwargs.get('arquivo') if isinstance(arquivo, (file, codecs.StreamReaderWriter)): return self.carregar_retorno(arquivo) - - self.header = self.banco.registros.HeaderArquivo(**kwargs) + + self.header = self.banco.registros.HeaderArquivo(**kwargs) self.trailer = self.banco.registros.TrailerArquivo(**kwargs) - self.trailer.totais_quantidade_lotes = 0 + self.trailer.totais_quantidade_lotes = 0 self.trailer.totais_quantidade_registros = 2 if self.header.arquivo_data_de_geracao is None: @@ -142,8 +152,8 @@ def __init__(self, banco, **kwargs): pass def carregar_retorno(self, arquivo): - - lote_aberto = None + + lote_aberto = None evento_aberto = None for linha in arquivo: @@ -162,12 +172,12 @@ def carregar_retorno(self, arquivo): trailer_lote = self.banco.registros.TrailerLoteCobranca() lote_aberto = Lote(self.banco, header_lote, trailer_lote) self._lotes.append(lote_aberto) - + elif tipo_registro == '3': tipo_segmento = linha[13] codigo_evento = linha[15:17] - - if tipo_segmento == 'T': + + if tipo_segmento == 'T': seg_t = self.banco.registros.SegmentoT() seg_t.carregar(linha) @@ -185,9 +195,9 @@ def carregar_retorno(self, arquivo): if trailer_lote is not None: lote_aberto.trailer.carregar(linha) else: - raise Exception + raise Exception - elif tipo_registro == '9': + elif tipo_registro == '9': self.trailer = self.banco.registros.TrailerArquivo() self.trailer.carregar(linha) @@ -195,46 +205,52 @@ def carregar_retorno(self, arquivo): def lotes(self): return self._lotes - def incluir_cobranca(self, **kwargs): + #def incluir_cobranca(self, **kwargs): + def incluir_cobranca(self, header, **kwargs): # 1 eh o codigo de cobranca + #import pudb;pu.db codigo_evento = 1 - evento = Evento(self.banco, codigo_evento) - + evento = Evento(self.banco, codigo_evento) + seg_p = self.banco.registros.SegmentoP(**kwargs) evento.adicionar_segmento(seg_p) - + seg_q = self.banco.registros.SegmentoQ(**kwargs) evento.adicionar_segmento(seg_q) - + seg_r = self.banco.registros.SegmentoR(**kwargs) if seg_r.necessario(): evento.adicionar_segmento(seg_r) lote_cobranca = self.encontrar_lote(codigo_evento) - + if lote_cobranca is None: - header = self.banco.registros.HeaderLoteCobranca(**self.header.todict()) + #import pudb;pu.db + #header = self.banco.registros.HeaderLoteCobranca(**self.header.todict()) + header = self.banco.registros.HeaderLoteCobranca(**header) trailer = self.banco.registros.TrailerLoteCobranca() - lote_cobranca = Lote(self.banco, header, trailer) + lote_cobranca = Lote(self.banco, header, trailer) self.adicionar_lote(lote_cobranca) - if header.controlecob_numero is None: + #if header.controlecob_numero is None: + if "controlecob_numero" not in dir(header) or header.controlecob_numero is None: header.controlecob_numero = int('{0}{1:02}'.format( self.header.arquivo_sequencia, lote_cobranca.codigo)) - if header.controlecob_data_gravacao is None: + #if header.controlecob_data_gravacao is None: + if "controlecob_data_gravacao" not in dir(header) or header.controlecob_data_gravacao is None: header.controlecob_data_gravacao = self.header.arquivo_data_de_geracao - + lote_cobranca.adicionar_evento(evento) # Incrementar numero de registros no trailer do arquivo self.trailer.totais_quantidade_registros += len(evento) - + def encontrar_lote(self, codigo_servico): for lote in self.lotes: if lote.header.servico_servico == codigo_servico: return lote - + def adicionar_lote(self, lote): if not isinstance(lote, Lote): raise TypeError('Objeto deve ser instancia de "Lote"') @@ -242,11 +258,14 @@ def adicionar_lote(self, lote): self._lotes.append(lote) lote.codigo = len(self._lotes) - # Incrementar numero de lotes no trailer do arquivo - self.trailer.totais_quantidade_lotes += 1 + if self.trailer != None: + if hasattr(self.trailer, 'totais_quantidade_lotes'): + # Incrementar numero de lotes no trailer do arquivo + self.trailer.totais_quantidade_lotes += 1 - # Incrementar numero de registros no trailer do arquivo - self.trailer.totais_quantidade_registros += len(lote) + if hasattr(self.trailer, 'totais_quantidade_registros'): + # Incrementar numero de registros no trailer do arquivo + self.trailer.totais_quantidade_registros += len(lote) def escrever(self, file_): file_.write(unicode(self).encode('ascii')) @@ -254,7 +273,7 @@ def escrever(self, file_): def __unicode__(self): if not self._lotes: raise errors.ArquivoVazioError() - + result = [] result.append(unicode(self.header)) result.extend(unicode(lote) for lote in self._lotes) @@ -263,3 +282,42 @@ def __unicode__(self): result.append(u'') return u'\r\n'.join(result) + def encontrar_lote_pag(self, codigo_servico): + for lote in self.lotes: + # FIXME + if codigo_servico == 20: + return lote + # + if lote.header.servico_servico == codigo_servico: + return lote + + # Implementação para Pag_For + def incluir_pagamento(self, **kwargs): + # 20: PAGTO FORNECEDORES + codigo_evento = 20 + evento = Evento(self.banco, codigo_evento) + + t_pag_for = self.banco.registros.TransacaoPagFor(**kwargs) + evento.adicionar_segmento(t_pag_for) + + lote_pag = self.encontrar_lote_pag(codigo_evento) + + if lote_pag is None: + # header = self.banco.registros.HeaderLoteCobranca(**self.header.todict()) + # trailer = self.banco.registros.TrailerLoteCobranca() + header = None + trailer = None + lote_pag = Lote(self.banco, header, trailer) + self.adicionar_lote(lote_pag) + + # if header.controlecob_numero is None: + # header.controlecob_numero = int('{0}{1:02}'.format( + # self.header.arquivo_sequencia, + # lote_pag.codigo)) + + # if header.controlecob_data_gravacao is None: + # header.controlecob_data_gravacao = self.header.arquivo_data_de_geracao + + lote_pag.adicionar_evento(evento) + # Incrementar numero de registros no trailer do arquivo + self.trailer.totais_quantidade_registros += len(evento) From 3dcfa77d007c54a8aa5952b039f72d582d62244a Mon Sep 17 00:00:00 2001 From: "Carlos R. Silveira" Date: Wed, 13 Jul 2016 15:14:10 -0300 Subject: [PATCH 08/81] Adicionado Sicredi. --- cnab240/bancos/sicredi/__init__.py | 0 .../bancos/sicredi/specs/header_arquivo.json | 184 ++++++++++ .../sicredi/specs/header_lote_cobranca.json | 180 ++++++++++ cnab240/bancos/sicredi/specs/segmento_p.json | 337 ++++++++++++++++++ cnab240/bancos/sicredi/specs/segmento_q.json | 177 +++++++++ cnab240/bancos/sicredi/specs/segmento_r.json | 196 ++++++++++ cnab240/bancos/sicredi/specs/segmento_t.json | 216 +++++++++++ cnab240/bancos/sicredi/specs/segmento_u.json | 190 ++++++++++ .../bancos/sicredi/specs/trailer_arquivo.json | 66 ++++ .../sicredi/specs/trailer_lote_cobranca.json | 102 ++++++ 10 files changed, 1648 insertions(+) create mode 100644 cnab240/bancos/sicredi/__init__.py create mode 100644 cnab240/bancos/sicredi/specs/header_arquivo.json create mode 100644 cnab240/bancos/sicredi/specs/header_lote_cobranca.json create mode 100644 cnab240/bancos/sicredi/specs/segmento_p.json create mode 100644 cnab240/bancos/sicredi/specs/segmento_q.json create mode 100644 cnab240/bancos/sicredi/specs/segmento_r.json create mode 100644 cnab240/bancos/sicredi/specs/segmento_t.json create mode 100644 cnab240/bancos/sicredi/specs/segmento_u.json create mode 100644 cnab240/bancos/sicredi/specs/trailer_arquivo.json create mode 100644 cnab240/bancos/sicredi/specs/trailer_lote_cobranca.json diff --git a/cnab240/bancos/sicredi/__init__.py b/cnab240/bancos/sicredi/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/sicredi/specs/header_arquivo.json b/cnab240/bancos/sicredi/specs/header_arquivo.json new file mode 100644 index 0000000..7a339db --- /dev/null +++ b/cnab240/bancos/sicredi/specs/header_arquivo.json @@ -0,0 +1,184 @@ +{ + "nome": "HeaderArquivo", + "campos": { + "01.0": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.0": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.0": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 0 + }, + + "04.0": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.0": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "alfa" + }, + + "06.0": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "alfa" + }, + + "07.0": { + "nome": "cedente_convenio", + "posicao_inicio": 33, + "posicao_fim": 52, + "formato": "alfa", + "default": "" + }, + + "08.0": { + "nome": "cedente_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "alfa" + }, + + "09.0": { + "nome": "vazio3", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "alfa", + "default": "" + }, + + "10.0": { + "nome": "cedente_conta", + "posicao_inicio": 59, + "posicao_fim": 70, + "formato": "num" + }, + + "11.0": { + "nome": "vazio5", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa", + "default": "" + }, + + "12.0": { + "nome": "cedente_agencia_conta_dv", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "13.0": { + "nome": "cedente_nome", + "posicao_inicio": 73, + "posicao_fim": 102, + "formato": "alfa" + }, + + "14.0": { + "nome": "nome_do_banco", + "posicao_inicio": 103, + "posicao_fim": 132, + "formato": "alfa", + "default": "SICREDI" + }, + + "15.0": { + "nome": "vazio6", + "posicao_inicio": 133, + "posicao_fim": 142, + "formato": "alfa", + "default": "" + }, + + "16.0": { + "nome": "arquivo_codigo", + "posicao_inicio": 143, + "posicao_fim": 143, + "formato": "alfa" + }, + + "17.0": { + "nome": "arquivo_data_de_geracao", + "posicao_inicio": 144, + "posicao_fim": 151, + "formato": "alfa" + }, + + "18.0": { + "nome": "arquivo_hora_de_geracao", + "posicao_inicio": 152, + "posicao_fim": 157, + "formato": "alfa" + }, + + "19.0": { + "nome": "arquivo_sequencia", + "posicao_inicio": 158, + "posicao_fim": 163, + "formato": "alfa" + }, + + "20.0": { + "nome": "arquivo_layout", + "posicao_inicio": 164, + "posicao_fim": 166, + "formato": "alfa" + }, + + "21.0": { + "nome": "vazio7", + "posicao_inicio": 167, + "posicao_fim": 171, + "formato": "alfa" + }, + + "22.0": { + "nome": "vazio8", + "posicao_inicio": 172, + "posicao_fim": 191, + "formato": "alfa", + "default": "" + }, + + "23.0": { + "nome": "vazio9", + "posicao_inicio": 192, + "posicao_fim": 211, + "formato": "alfa", + "default": "" + }, + + "24.0": { + "nome": "vazio10", + "posicao_inicio": 212, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/sicredi/specs/header_lote_cobranca.json b/cnab240/bancos/sicredi/specs/header_lote_cobranca.json new file mode 100644 index 0000000..5c76525 --- /dev/null +++ b/cnab240/bancos/sicredi/specs/header_lote_cobranca.json @@ -0,0 +1,180 @@ +{ + "nome": "HeaderLoteCobranca", + "campos": { + "01.1": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.1": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.1": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 1 + }, + + "04.1": { + "nome": "servico_operacao", + "posicao_inicio": 9, + "posicao_fim": 9, + "formato": "alfa", + "default": "R" + }, + + "05.1": { + "nome": "servico_servico", + "posicao_inicio": 10, + "posicao_fim": 11, + "formato": "num", + "default": 1 + }, + + "06.1": { + "nome": "vazio1", + "posicao_inicio": 12, + "posicao_fim": 13, + "formato": "alfa", + "default": "" + }, + + "07.1": { + "nome": "servico_layout", + "posicao_inicio": 14, + "posicao_fim": 16, + "formato": "num", + "default": 40 + }, + + "08.1": { + "nome": "vazio2", + "posicao_inicio": 17, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "09.1": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "alfa" + }, + + "10.1": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 33, + "formato": "alfa" + }, + + "11.1": { + "nome": "vazio3", + "posicao_inicio": 34, + "posicao_fim": 53, + "formato": "alfa", + "default": "" + }, + + "12.1": { + "nome": "cedente_agencia", + "posicao_inicio": 54, + "posicao_fim": 58, + "formato": "alfa" + }, + + "13.1": { + "nome": "vazio5", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "alfa", + "default": "" + }, + + "14.1": { + "nome": "cedente_conta", + "posicao_inicio": 60, + "posicao_fim": 71, + "formato": "num" + }, + + "15.1": { + "nome": "vazio7", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa", + "default": "" + }, + + "16.1": { + "nome": "cedente_agencia_conta_dv", + "posicao_inicio": 73, + "posicao_fim": 73, + "formato": "alfa" + }, + + "17.1": { + "nome": "cedente_nome", + "posicao_inicio": 74, + "posicao_fim": 103, + "formato": "alfa" + }, + + "18.1": { + "nome": "vazio8", + "posicao_inicio": 104, + "posicao_fim": 143, + "formato": "alfa", + "default": "" + }, + + "19.1": { + "nome": "vazio9", + "posicao_inicio": 144, + "posicao_fim": 183, + "formato": "alfa", + "default": "" + }, + + "20.1": { + "nome": "controlecob_numero", + "posicao_inicio": 184, + "posicao_fim": 191, + "formato": "num" + }, + + "21.1": { + "nome": "controlecob_data_gravacao", + "posicao_inicio": 192, + "posicao_fim": 199, + "formato": "num" + }, + + "22.1": { + "nome": "data_credito", + "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num", + "default": 0 + }, + + "23.1": { + "nome": "vazio9", + "posicao_inicio": 208, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicredi/specs/segmento_p.json b/cnab240/bancos/sicredi/specs/segmento_p.json new file mode 100644 index 0000000..6cc0106 --- /dev/null +++ b/cnab240/bancos/sicredi/specs/segmento_p.json @@ -0,0 +1,337 @@ +{ + "nome": "SegmentoP", + "campos": { + "01.3P": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.3P": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3P": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3P": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3P": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "P" + }, + + "06.3P": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3P": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3P": { + "nome": "vazio2", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num", + "default": 0 + }, + + "09.3P": { + "nome": "cedente_agencia", + "posicao_inicio": 19, + "posicao_fim": 22, + "formato": "num" + }, + + "10.3P": { + "nome": "vazio3", + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "alfa", + "default": "" + }, + + "11.3P": { + "nome": "vazio4", + "posicao_inicio": 24, + "posicao_fim": 30, + "formato": "num", + "default": 0 + }, + + "12.3P": { + "nome": "cedente_conta", + "posicao_inicio": 31, + "posicao_fim": 35, + "formato": "num" + }, + + "13.3P": { + "nome": "vazio5", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "alfa", + "default": "" + }, + + "14.3P": { + "nome": "cedente_agencia_conta_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "num" + }, + + "15.3P": { + "nome": "carteira_numero", + "posicao_inicio": 38, + "posicao_fim": 40, + "formato": "num" + }, + + "16.3P": { + "nome": "nosso_numero", + "posicao_inicio": 41, + "posicao_fim": 48, + "formato": "num" + }, + + "17.3P": { + "nome": "nosso_numero_dv", + "posicao_inicio": 49, + "posicao_fim": 49, + "formato": "num" + }, + + "18.3P": { + "nome": "vazio6", + "posicao_inicio": 50, + "posicao_fim": 57, + "formato": "alfa", + "default": "" + }, + + "19.3P": { + "nome": "vazio7", + "posicao_inicio": 58, + "posicao_fim": 62, + "formato": "num", + "default": 0 + }, + + "20.3P": { + "nome": "numero_documento", + "posicao_inicio": 63, + "posicao_fim": 72, + "formato": "alfa" + }, + + "21.3P": { + "nome": "vazio8", + "posicao_inicio": 73, + "posicao_fim": 77, + "formato": "alfa", + "default": "" + }, + + "22.3P": { + "nome": "vencimento_titulo", + "posicao_inicio": 78, + "posicao_fim": 85, + "formato": "num" + }, + + "23.3P": { + "nome": "valor_titulo", + "posicao_inicio": 86, + "posicao_fim": 100, + "formato": "num", + "decimais": 2 + }, + + "24.3P": { + "nome": "agencia_cobradora", + "posicao_inicio": 101, + "posicao_fim": 105, + "formato": "num", + "default": 0 + }, + + "25.3P": { + "nome": "agencia_cobradora_dv", + "posicao_inicio": 106, + "posicao_fim": 106, + "formato": "num", + "default": 0 + }, + + "26.3P": { + "nome": "especie_titulo", + "posicao_inicio": 107, + "posicao_fim": 108, + "formato": "num" + }, + + "27.3P": { + "nome": "aceite_titulo", + "posicao_inicio": 109, + "posicao_fim": 109, + "formato": "alfa" + }, + + "28.3P": { + "nome": "data_emissao_titulo", + "posicao_inicio": 110, + "posicao_fim": 117, + "formato": "num" + }, + + "29.3P": { + "nome": "vazio9", + "posicao_inicio": 118, + "posicao_fim": 118, + "formato": "num", + "default": 0 + }, + + "30.3P": { + "nome": "juros_mora_data", + "posicao_inicio": 119, + "posicao_fim": 126, + "formato": "num", + "default": 0 + }, + + "31.3P": { + "nome": "juros_mora_taxa_dia", + "posicao_inicio": 127, + "posicao_fim": 141, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "32.3P": { + "nome": "vazio10", + "posicao_inicio": 142, + "posicao_fim": 142, + "formato": "num", + "default": 0 + }, + + "33.3P": { + "nome": "desconto1_data", + "posicao_inicio": 143, + "posicao_fim": 150, + "formato": "num", + "default": 0 + }, + + "34.3P": { + "nome": "desconto1_percentual", + "posicao_inicio": 151, + "posicao_fim": 165, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "35.3P": { + "nome": "valor_iof", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "36.3P": { + "nome": "valor_abatimento", + "posicao_inicio": 181, + "posicao_fim": 195, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "37.3P": { + "nome": "identificacao_titulo", + "posicao_inicio": 196, + "posicao_fim": 220, + "formato": "alfa" + }, + + "38.3P": { + "nome": "codigo_protesto", + "posicao_inicio": 221, + "posicao_fim": 221, + "formato": "num", + "default": 0 + }, + + "39.3P": { + "nome": "prazo_protesto", + "posicao_inicio": 222, + "posicao_fim": 223, + "formato": "num", + "default": 0 + }, + + "40.3P": { + "nome": "codigo_baixa", + "posicao_inicio": 224, + "posicao_fim": 224, + "formato": "num", + "default": 0 + }, + + "41.3P": { + "nome": "prazo_baixa", + "posicao_inicio": 225, + "posicao_fim": 226, + "formato": "num", + "default": 0 + }, + + "42.3P": { + "nome": "vazio11", + "posicao_inicio": 227, + "posicao_fim": 239, + "formato": "num", + "default": 0 + }, + + "43.3P": { + "nome": "vazio12", + "posicao_inicio": 240, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/sicredi/specs/segmento_q.json b/cnab240/bancos/sicredi/specs/segmento_q.json new file mode 100644 index 0000000..42ba219 --- /dev/null +++ b/cnab240/bancos/sicredi/specs/segmento_q.json @@ -0,0 +1,177 @@ +{ + "nome": "SegmentoQ", + "campos": { + "01.3Q": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.3Q": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3Q": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3Q": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3Q": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "Q" + }, + + "06.3Q": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3Q": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3Q": { + "nome": "sacado_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "09.3Q": { + "nome": "sacado_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 33, + "formato": "num" + }, + + "10.3Q": { + "nome": "sacado_nome", + "posicao_inicio": 34, + "posicao_fim": 63, + "formato": "alfa" + }, + + "11.3Q": { + "nome": "vazio2", + "posicao_inicio": 64, + "posicao_fim": 73, + "formato": "alfa", + "default": "" + }, + + "12.3Q": { + "nome": "sacado_endereco", + "posicao_inicio": 74, + "posicao_fim": 113, + "formato": "alfa" + }, + + "13.3Q": { + "nome": "sacado_bairro", + "posicao_inicio": 114, + "posicao_fim": 128, + "formato": "alfa" + }, + + "14.3Q": { + "nome": "sacado_cep", + "posicao_inicio": 129, + "posicao_fim": 133, + "formato": "num" + }, + + "15.3Q": { + "nome": "sacado_cep_sufixo", + "posicao_inicio": 134, + "posicao_fim": 136, + "formato": "num" + }, + + "16.3Q": { + "nome": "sacado_cidade", + "posicao_inicio": 137, + "posicao_fim": 151, + "formato": "alfa" + }, + + "17.3Q": { + "nome": "sacado_uf", + "posicao_inicio": 152, + "posicao_fim": 153, + "formato": "alfa" + }, + + "18.3Q": { + "nome": "sacador_inscricao_tipo", + "posicao_inicio": 154, + "posicao_fim": 154, + "formato": "num", + "default": 0 + }, + + "19.3Q": { + "nome": "sacador_inscricao_numero", + "posicao_inicio": 155, + "posicao_fim": 169, + "formato": "num", + "default": 0 + }, + + "20.3Q": { + "nome": "sacador_nome", + "posicao_inicio": 170, + "posicao_fim": 199, + "formato": "alfa", + "default": "" + }, + + "21.3Q": { + "nome": "vazio3", + "posicao_inicio": 200, + "posicao_fim": 209, + "formato": "alfa", + "default": "" + }, + + "22.3Q": { + "nome": "vazio4", + "posicao_inicio": 210, + "posicao_fim": 212, + "formato": "num", + "default": 0 + }, + + "23.3Q": { + "nome": "vazio5", + "posicao_inicio": 213, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicredi/specs/segmento_r.json b/cnab240/bancos/sicredi/specs/segmento_r.json new file mode 100644 index 0000000..94a6367 --- /dev/null +++ b/cnab240/bancos/sicredi/specs/segmento_r.json @@ -0,0 +1,196 @@ +{ + "nome": "SegmentoR", + "campos": { + "01.3R": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.3R": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3R": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3R": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3R": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "R" + }, + + "06.3R": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3R": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3R": { + "nome": "vazio2", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num", + "default": 0 + }, + + "09.3R": { + "nome": "desc2_data", + "posicao_inicio": 19, + "posicao_fim": 26, + "formato": "num", + "default": 0 + }, + + "10.3R": { + "nome": "desc2_percentual", + "posicao_inicio": 27, + "posicao_fim": 41, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "11.3R": { + "nome": "vazio3", + "posicao_inicio": 42, + "posicao_fim": 42, + "formato": "num", + "default": 0 + }, + + "12.3R": { + "nome": "desc3_data", + "posicao_inicio": 43, + "posicao_fim": 50, + "formato": "num", + "default": 0 + }, + + "13.3R": { + "nome": "desc3_percentual", + "posicao_inicio": 51, + "posicao_fim": 65, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "14.3R": { + "nome": "vazio4", + "posicao_inicio": 66, + "posicao_fim": 89, + "formato": "num", + "default": 0 + }, + + "15.3R": { + "nome": "vazio5", + "posicao_inicio": 90, + "posicao_fim": 99, + "formato": "alfa", + "default": "" + }, + + "16.3R": { + "nome": "informacao6", + "posicao_inicio": 100, + "posicao_fim": 139, + "formato": "alfa", + "default": "" + }, + + "17.3R": { + "nome": "vazio7", + "posicao_inicio": 140, + "posicao_fim": 199, + "formato": "alfa", + "default": "" + }, + + "18.3R": { + "nome": "codigo_ocorrencia_sacado", + "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num", + "default": 0 + }, + + "19.3R": { + "nome": "vazio8", + "posicao_inicio": 208, + "posicao_fim": 215, + "formato": "num", + "default": 0 + }, + + "20.3R": { + "nome": "vazio9", + "posicao_inicio": 216, + "posicao_fim": 216, + "formato": "alfa", + "default": "" + }, + + "21.3R": { + "nome": "vazio10", + "posicao_inicio": 217, + "posicao_fim": 228, + "formato": "num", + "default": 0 + }, + + "22.3R": { + "nome": "vazio11", + "posicao_inicio": 229, + "posicao_fim": 230, + "formato": "alfa", + "default": "" + }, + + "23.3R": { + "nome": "vazio12", + "posicao_inicio": 231, + "posicao_fim": 231, + "formato": "num", + "default": 0 + }, + + "24.3R": { + "nome": "vazio13", + "posicao_inicio": 232, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicredi/specs/segmento_t.json b/cnab240/bancos/sicredi/specs/segmento_t.json new file mode 100644 index 0000000..e90a90a --- /dev/null +++ b/cnab240/bancos/sicredi/specs/segmento_t.json @@ -0,0 +1,216 @@ +{ + "nome": "SegmentoT", + "campos": { + "01.3T": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.3T": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3T": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3T": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3T": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "T" + }, + + "06.3T": { + "nome": "boleto_dda", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa" + }, + + "07.3T": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "alfa" + }, + + "08.3T": { + "nome": "cedente_agencia", + "posicao_inicio": 18, + "posicao_fim": 22, + "formato": "num" + }, + + "09.3T": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "alfa" + }, + + "10.3T": { + "nome": "cedente_conta", + "posicao_inicio": 24, + "posicao_fim": 35, + "formato": "num" + }, + + "11.3T": { + "nome": "vazio3", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "alfa", + "default": "" + }, + + "12.3T": { + "nome": "cedente_agencia_conta_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "alfa" + }, + + "13.3T": { + "nome": "nosso_numero", + "posicao_inicio": 38, + "posicao_fim": 57, + "formato": "alfa" + }, + + "14.3T": { + "nome": "cobranca_carteira", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num" + }, + + "15.3T": { + "nome": "numero_documento", + "posicao_inicio": 59, + "posicao_fim": 73, + "formato": "alfa" + }, + + "16.3T": { + "nome": "vencimento_titulo", + "posicao_inicio": 74, + "posicao_fim": 81, + "formato": "alfa" + }, + + "17.3T": { + "nome": "valor_titulo", + "posicao_inicio": 82, + "posicao_fim": 96, + "formato": "num", + "decimais": 2 + }, + + "18.3T": { + "nome": "vazio7", + "posicao_inicio": 97, + "posicao_fim": 99, + "formato": "alfa" + }, + + "19.3T": { + "nome": "agencia_cobradora", + "posicao_inicio": 100, + "posicao_fim": 104, + "formato": "alfa" + }, + + "20.3T": { + "nome": "agencia_cobradora_dv", + "posicao_inicio": 105, + "posicao_fim": 105, + "formato": "alfa" + }, + + "21.3T": { + "nome": "identificacao_titulo", + "posicao_inicio": 106, + "posicao_fim": 130, + "formato": "alfa" + }, + + "22.3T": { + "nome": "vazio8", + "posicao_inicio": 131, + "posicao_fim": 132, + "formato": "alfa" + }, + + "23.3T": { + "nome": "sacado_inscricao_tipo", + "posicao_inicio": 133, + "posicao_fim": 133, + "formato": "num" + }, + + "24.3T": { + "nome": "sacado_inscricao_numero", + "posicao_inicio": 134, + "posicao_fim": 148, + "formato": "num" + }, + + "25.3T": { + "nome": "sacado_nome", + "posicao_inicio": 149, + "posicao_fim": 188, + "formato": "alfa" + }, + + "26.3T": { + "nome": "vazio9", + "posicao_inicio": 189, + "posicao_fim": 198, + "formato": "num", + "default": 0 + }, + + "27.3T": { + "nome": "valor_tarifas", + "posicao_inicio": 199, + "posicao_fim": 213, + "formato": "num", + "decimais": 2 + }, + + "28.3T": { + "nome": "motivo_ocorrencia", + "posicao_inicio": 214, + "posicao_fim": 223, + "formato": "alfa" + }, + + "29.3T": { + "nome": "vazio11", + "posicao_inicio": 224, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicredi/specs/segmento_u.json b/cnab240/bancos/sicredi/specs/segmento_u.json new file mode 100644 index 0000000..a1c3c95 --- /dev/null +++ b/cnab240/bancos/sicredi/specs/segmento_u.json @@ -0,0 +1,190 @@ +{ + "nome": "SegmentoU", + "campos": { + "01.3U": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.3U": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3U": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3U": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3U": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "U" + }, + + "06.3U": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3U": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3U": { + "nome": "titulo_acrescimos", + "posicao_inicio": 18, + "posicao_fim": 32, + "formato": "num", + "decimais": 2 + }, + + "09.3U": { + "nome": "titulo_desconto", + "posicao_inicio": 33, + "posicao_fim": 47, + "formato": "num", + "decimais": 2 + }, + + "10.3U": { + "nome": "titulo_abatimento", + "posicao_inicio": 48, + "posicao_fim": 62, + "formato": "num", + "decimais": 2 + }, + + "11.3U": { + "nome": "titulo_iof", + "posicao_inicio": 63, + "posicao_fim": 77, + "formato": "num", + "decimais": 2 + }, + + "12.3U": { + "nome": "titulo_pago", + "posicao_inicio": 78, + "posicao_fim": 92, + "formato": "num", + "decimais": 2 + }, + + "13.3U": { + "nome": "titulo_liquido", + "posicao_inicio": 93, + "posicao_fim": 107, + "formato": "num", + "decimais": 2 + }, + + "14.3U": { + "nome": "vazio2", + "posicao_inicio": 108, + "posicao_fim": 122, + "formato": "num", + "default": 0 + }, + + "15.3U": { + "nome": "vazio7", + "posicao_inicio": 123, + "posicao_fim": 137, + "formato": "num", + "default": 0 + }, + + "16.3U": { + "nome": "data_ocorrencia", + "posicao_inicio": 138, + "posicao_fim": 145, + "formato": "num" + }, + + "17.3U": { + "nome": "data_credito", + "posicao_inicio": 146, + "posicao_fim": 153, + "formato": "num" + }, + + "18.3U": { + "nome": "ocorrencia_codigo", + "posicao_inicio": 154, + "posicao_fim": 157, + "formato": "alfa" + }, + + "19.3U": { + "nome": "ocorrencia_data", + "posicao_inicio": 158, + "posicao_fim": 165, + "formato": "alfa" + }, + + "20.3U": { + "nome": "ocorrencia_valor", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2 + }, + + "21.3U": { + "nome": "vazio3", + "posicao_inicio": 181, + "posicao_fim": 210, + "formato": "alfa", + "default": "" + }, + + "22.3U": { + "nome": "vazio4", + "posicao_inicio": 211, + "posicao_fim": 213, + "formato": "num", + "default": 0 + }, + + "23.3U": { + "nome": "vazio5", + "posicao_inicio": 214, + "posicao_fim": 233, + "formato": "num", + "default": 0 + }, + + "24.3U": { + "nome": "vazio6", + "posicao_inicio": 234, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicredi/specs/trailer_arquivo.json b/cnab240/bancos/sicredi/specs/trailer_arquivo.json new file mode 100644 index 0000000..e7c7abe --- /dev/null +++ b/cnab240/bancos/sicredi/specs/trailer_arquivo.json @@ -0,0 +1,66 @@ +{ + "nome": "TrailerArquivo", + "campos": { + "01.9": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.9": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 9999 + }, + + "03.9": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 9 + }, + + "04.9": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.9": { + "nome": "totais_quantidade_lotes", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num" + }, + + "06.9": { + "nome": "totais_quantidade_registros", + "posicao_inicio": 24, + "posicao_fim": 29, + "formato": "num" + }, + + "07.9": { + "nome": "vazio2", + "posicao_inicio": 30, + "posicao_fim": 35, + "formato": "alfa", + "default": "" + }, + + "08.9": { + "nome": "vazio3", + "posicao_inicio": 36, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/sicredi/specs/trailer_lote_cobranca.json b/cnab240/bancos/sicredi/specs/trailer_lote_cobranca.json new file mode 100644 index 0000000..26ff496 --- /dev/null +++ b/cnab240/bancos/sicredi/specs/trailer_lote_cobranca.json @@ -0,0 +1,102 @@ +{ + "nome": "TrailerLoteCobranca", + "campos": { + "01.5": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.5": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.5": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 5 + }, + + "04.5": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.5": { + "nome": "quantidade_registros", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num" + }, + + "06.5": { + "nome": "cobrancasimples_quantidade_titulos", + "posicao_inicio": 24, + "posicao_fim": 29, + "formato": "num", + "default": 0 + }, + + "07.5": { + "nome": "cobrancasimples_valor_titulos", + "posicao_inicio": 30, + "posicao_fim": 46, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "08.5": { + "nome": "cobrancavinculada_quantidade_titulos", + "posicao_inicio": 47, + "posicao_fim": 52, + "formato": "num", + "default": 0 + }, + + "09.5": { + "nome": "cobrancavinculada_valor_titulos", + "posicao_inicio": 53, + "posicao_fim": 69, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "10.5": { + "nome": "vazio2", + "posicao_inicio": 70, + "posicao_fim": 115, + "formato": "num", + "default": 0, + "default": 0 + }, + + "11.5": { + "nome": "numero_aviso", + "posicao_inicio": 116, + "posicao_fim": 123, + "formato": "alfa", + "default": "" + }, + + "12.5": { + "nome": "vazio3", + "posicao_inicio": 124, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} From 649c4fd25e8eea22cd3230f044ca8055e46848bf Mon Sep 17 00:00:00 2001 From: Thiago Malaquias Pastor Date: Wed, 27 Jul 2016 06:40:57 -0300 Subject: [PATCH 09/81] No layout do Santander campo "multa_valor_percentual" tem 2 decimais. --- cnab240/bancos/santander/specs/segmento_r.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cnab240/bancos/santander/specs/segmento_r.json b/cnab240/bancos/santander/specs/segmento_r.json index 2a550f7..d9baeee 100644 --- a/cnab240/bancos/santander/specs/segmento_r.json +++ b/cnab240/bancos/santander/specs/segmento_r.json @@ -108,7 +108,7 @@ "posicao_inicio": 75, "posicao_fim": 89, "formato": "num", - "default": 0 + "decimais": 2 }, "15.3R": { From e749a99d5109c095349c0b6c28b5917c68ba1c54 Mon Sep 17 00:00:00 2001 From: Thiago Malaquias Pastor Date: Wed, 27 Jul 2016 06:49:50 -0300 Subject: [PATCH 10/81] =?UTF-8?q?Varias=20cobran=C3=A7as=20no=20mesmo=20lo?= =?UTF-8?q?te?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/tipos.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cnab240/tipos.py b/cnab240/tipos.py index 000ce33..58b82dc 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos.py @@ -230,6 +230,10 @@ def incluir_cobranca(self, header, **kwargs): header = self.banco.registros.HeaderLoteCobranca(**header) trailer = self.banco.registros.TrailerLoteCobranca() lote_cobranca = Lote(self.banco, header, trailer) + + #Para conseguir inserir todos os eventos de cobrança em um unico lote precisa informar o código do serviço + lote_cobranca.header.servico_servico = codigo_evento + self.adicionar_lote(lote_cobranca) #if header.controlecob_numero is None: @@ -242,6 +246,7 @@ def incluir_cobranca(self, header, **kwargs): if "controlecob_data_gravacao" not in dir(header) or header.controlecob_data_gravacao is None: header.controlecob_data_gravacao = self.header.arquivo_data_de_geracao + lote_cobranca.adicionar_evento(evento) # Incrementar numero de registros no trailer do arquivo self.trailer.totais_quantidade_registros += len(evento) From 13a44e881269f0f5f00dff946425107d8cae03b2 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 13:23:22 -0200 Subject: [PATCH 11/81] ignorando .idea --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index fd4faff..e6522d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.py[co] +.idea/ # Packages *.egg From 3fee002342d212f48db3a2581b7586aa071686c8 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 13:25:51 -0200 Subject: [PATCH 12/81] idea --- .idea/cnab240.iml | 8 ++++++++ .idea/deployment.xml | 14 ++++++++++++++ .idea/encodings.xml | 6 ++++++ .idea/misc.xml | 14 ++++++++++++++ .idea/modules.xml | 8 ++++++++ .idea/workspace.xml | 40 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 90 insertions(+) create mode 100644 .idea/cnab240.iml create mode 100644 .idea/deployment.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/cnab240.iml b/.idea/cnab240.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/.idea/cnab240.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/deployment.xml b/.idea/deployment.xml new file mode 100644 index 0000000..348e77f --- /dev/null +++ b/.idea/deployment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4774420 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9c66324 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..0c8691d --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + 1485169208898 + + + + + + + + + + \ No newline at end of file From 9eab7537289180d97da367b2efcdec918e6a0b54 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 13:30:14 -0200 Subject: [PATCH 13/81] deletando idea --- .idea/cnab240.iml | 8 -------- .idea/deployment.xml | 14 -------------- .idea/encodings.xml | 6 ------ .idea/misc.xml | 14 -------------- .idea/modules.xml | 8 -------- .idea/workspace.xml | 40 ---------------------------------------- 6 files changed, 90 deletions(-) delete mode 100644 .idea/cnab240.iml delete mode 100644 .idea/deployment.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/workspace.xml diff --git a/.idea/cnab240.iml b/.idea/cnab240.iml deleted file mode 100644 index d0876a7..0000000 --- a/.idea/cnab240.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/deployment.xml b/.idea/deployment.xml deleted file mode 100644 index 348e77f..0000000 --- a/.idea/deployment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 4774420..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 9c66324..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 0c8691d..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - 1485169208898 - - - - - - - - - - \ No newline at end of file From cd093f1acc067633ef39a2f887eb7f80672a87dc Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 13:32:07 -0200 Subject: [PATCH 14/81] adicionando banco do brasil --- cnab240/bancos/bancodobrasil/__init__.py | 0 .../specs/header_lote_cobranca.json | 149 ++++++++ .../bancodobrasil/specs/segmento_p.json | 358 ++++++++++++++++++ .../bancodobrasil/specs/segmento_q.json | 196 ++++++++++ .../bancodobrasil/specs/segmento_r.json | 146 +++++++ .../bancodobrasil/specs/segmento_t.json | 295 +++++++++++++++ .../bancodobrasil/specs/segmento_u.json | 188 +++++++++ .../bancos/bancodobrasil/specs/spec_to_doc.py | 28 ++ .../bancodobrasil/specs/trailer_arquivo.json | 60 +++ .../specs/trailer_lote_cobranca.json | 52 +++ 10 files changed, 1472 insertions(+) create mode 100644 cnab240/bancos/bancodobrasil/__init__.py create mode 100644 cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json create mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_p.json create mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_q.json create mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_r.json create mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_t.json create mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_u.json create mode 100644 cnab240/bancos/bancodobrasil/specs/spec_to_doc.py create mode 100644 cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json create mode 100644 cnab240/bancos/bancodobrasil/specs/trailer_lote_cobranca.json diff --git a/cnab240/bancos/bancodobrasil/__init__.py b/cnab240/bancos/bancodobrasil/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json new file mode 100644 index 0000000..8a88857 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json @@ -0,0 +1,149 @@ +{ + "nome": "HeaderLoteCobranca", + "campos": { + "01.1": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 1 + }, + + "02.1": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.1": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 1 + }, + + "04.1": { + "nome": "servico_operacao", + "posicao_inicio": 9, + "posicao_fim": 9, + "formato": "alfa", + "default": "R" + }, + + "05.1": { + "nome": "servico_servico", + "posicao_inicio": 10, + "posicao_fim": 11, + "formato": "num", + "default": 1 + }, + + "06.1": { + "nome": "vazio1", + "posicao_inicio": 12, + "posicao_fim": 13, + "formato": "alfa", + "default": "" + }, + + "07.1": { + "nome": "servico_layout", + "posicao_inicio": 14, + "posicao_fim": 16, + "formato": "num", + "default": 30 + }, + + "08.1": { + "nome": "vazio2", + "posicao_inicio": 17, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "09.1": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "10.1": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 33, + "formato": "num" + }, + + "11.1": { + "nome": "vazio3", + "posicao_inicio": 34, + "posicao_fim": 53, + "formato": "alfa", + "default": "" + }, + + "12.1": { + "nome": "codigo_transmissao", + "posicao_inicio": 54, + "posicao_fim": 68, + "formato": "num" + }, + + "13.1": { + "nome": "vazio4", + "posicao_inicio": 69, + "posicao_fim": 73, + "formato": "alfa", + "default": "" + }, + + "14.1": { + "nome": "cedente_nome", + "posicao_inicio": 74, + "posicao_fim": 103, + "formato": "alfa" + }, + + "15.1": { + "nome": "mensagem1", + "posicao_inicio": 104, + "posicao_fim": 143, + "formato": "alfa", + "default": "" + }, + + "16.1": { + "nome": "mensagem2", + "posicao_inicio": 144, + "posicao_fim": 183, + "formato": "alfa", + "default": "" + }, + + "17.1": { + "nome": "controlecob_numero", + "posicao_inicio": 184, + "posicao_fim": 191, + "formato": "num" + }, + + "18.1": { + "nome": "controlecob_data_gravacao", + "posicao_inicio": 192, + "posicao_fim": 199, + "formato": "num" + }, + + "19.1": { + "nome": "vazio5", + "posicao_inicio": 200, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_p.json b/cnab240/bancos/bancodobrasil/specs/segmento_p.json new file mode 100644 index 0000000..7ab5fe0 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_p.json @@ -0,0 +1,358 @@ +{ + "nome": "SegmentoP", + "campos": { + "01.3P": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 33 + }, + + "02.3P": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3P": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3P": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3P": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "P" + }, + + "06.3P": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3P": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3P": { + "nome": "cedente_agencia", + "posicao_inicio": 18, + "posicao_fim": 21, + "formato": "num" + }, + + "09.3P": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 22, + "posicao_fim": 22, + "formato": "num" + }, + + "10.3P": { + "nome": "cedente_conta", + "posicao_inicio": 23, + "posicao_fim": 31, + "formato": "num" + }, + + "11.3P": { + "nome": "cedente_conta_dv", + "posicao_inicio": 32, + "posicao_fim": 32, + "formato": "num" + }, + + "12.3P": { + "nome": "conta_cobranca", + "posicao_inicio": 33, + "posicao_fim": 41, + "formato": "num", + "default": 0 + }, + + "13.3P": { + "nome": "conta_cobranca_dv", + "posicao_inicio": 42, + "posicao_fim": 42, + "formato": "num", + "default": 0 + }, + + "14.3P": { + "nome": "vazio2", + "posicao_inicio": 43, + "posicao_fim": 44, + "formato": "alfa", + "default": "" + }, + + "15.3P": { + "nome": "nosso_numero", + "posicao_inicio": 45, + "posicao_fim": 57, + "formato": "num" + }, + + "16.3P": { + "nome": "tipo_cobranca", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num", + "default": 0 + }, + + "17.3P": { + "nome": "forma_cadastramento", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "num", + "default": 0 + }, + + "18.3P": { + "nome": "tipo_documento", + "posicao_inicio": 60, + "posicao_fim": 60, + "formato": "num", + "default": 0 + }, + + "19.3P": { + "nome": "vazio3", + "posicao_inicio": 61, + "posicao_fim": 61, + "formato": "alfa", + "default": "" + }, + + "20.3P": { + "nome": "vazio4", + "posicao_inicio": 62, + "posicao_fim": 62, + "formato": "alfa", + "default": "" + }, + + "21.3P": { + "nome": "numero_documento", + "posicao_inicio": 63, + "posicao_fim": 77, + "formato": "alfa" + }, + + "22.3P": { + "nome": "vencimento_titulo", + "posicao_inicio": 78, + "posicao_fim": 85, + "formato": "num", + "default": 0 + }, + + "23.3P": { + "nome": "valor_titulo", + "posicao_inicio": 86, + "posicao_fim": 100, + "formato": "num", + "decimais": 2 + }, + + "24.3P": { + "nome": "conta_cobradora", + "posicao_inicio": 101, + "posicao_fim": 104, + "formato": "num", + "default": 0 + }, + + "25.3P": { + "nome": "agencia_beneficiario_dv", + "posicao_inicio": 105, + "posicao_fim": 105, + "formato": "num", + "default": 0 + }, + + "26.3P": { + "nome": "vazio5", + "posicao_inicio": 106, + "posicao_fim": 106, + "formato": "alfa", + "default": "" + }, + + "27.3P": { + "nome": "especie_titulo", + "posicao_inicio": 107, + "posicao_fim": 108, + "formato": "num", + "default": 0 + }, + + "28.3P": { + "nome": "aceite_titulo", + "posicao_inicio": 109, + "posicao_fim": 109, + "formato": "alfa", + "default": "N" + }, + + "29.3P": { + "nome": "data_emissao_titulo", + "posicao_inicio": 110, + "posicao_fim": 117, + "formato": "num", + "default": 0 + }, + + "30.3P": { + "nome": "codigo_juros_mora", + "posicao_inicio": 118, + "posicao_fim": 118, + "formato": "num", + "default": 0 + }, + + "31.3P": { + "nome": "juros_mora_data", + "posicao_inicio": 119, + "posicao_fim": 126, + "formato": "num", + "default": 0 + }, + + "32.3P": { + "nome": "juros_mora_taxa_dia", + "posicao_inicio": 127, + "posicao_fim": 141, + "formato": "num", + "decimais": 2 + }, + + "33.3P": { + "nome": "desconto1_codigo", + "posicao_inicio": 142, + "posicao_fim": 142, + "formato": "num", + "default": 0 + }, + + "34.3P": { + "nome": "desconto1_data", + "posicao_inicio": 143, + "posicao_fim": 150, + "formato": "num", + "default": 0 + }, + + "35.3P": { + "nome": "desconto1_percentual", + "posicao_inicio": 151, + "posicao_fim": 165, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "36.3P": { + "nome": "valor_iof", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "37.3P": { + "nome": "valor_abatimento", + "posicao_inicio": 181, + "posicao_fim": 195, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "38.3P": { + "nome": "identificacao_titulo", + "posicao_inicio": 196, + "posicao_fim": 220, + "formato": "alfa", + "default": "" + }, + + "39.3P": { + "nome": "codigo_protesto", + "posicao_inicio": 221, + "posicao_fim": 221, + "formato": "num", + "default": 0 + }, + + "40.3P": { + "nome": "prazo_protesto", + "posicao_inicio": 222, + "posicao_fim": 223, + "formato": "num", + "default": 0 + }, + + "41.3P": { + "nome": "codigo_baixa", + "posicao_inicio": 224, + "posicao_fim": 224, + "formato": "num", + "default": 0 + }, + + "42.3P": { + "nome": "vazio6", + "posicao_inicio": 225, + "posicao_fim": 225, + "formato": "alfa", + "default": "" + }, + + "43.3P": { + "nome": "prazo_baixa", + "posicao_inicio": 226, + "posicao_fim": 227, + "formato": "num", + "default": 0 + }, + + "44.3P": { + "nome": "codigo_moeda", + "posicao_inicio": 228, + "posicao_fim": 229, + "formato": "num", + "default": 0 + }, + + "45.3P": { + "nome": "vazio7", + "posicao_inicio": 230, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_q.json b/cnab240/bancos/bancodobrasil/specs/segmento_q.json new file mode 100644 index 0000000..9d99779 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_q.json @@ -0,0 +1,196 @@ +{ + "nome": "SegmentoQ", + "campos": { + "01.3Q": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 33 + }, + + "02.3Q": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.3Q": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3Q": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num", + "default": 0 + }, + + "05.3Q": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "Q" + }, + + "06.3Q": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3Q": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num", + "default": 0 + }, + + "08.3Q": { + "nome": "sacado_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num", + "default": 0 + }, + + "09.3Q": { + "nome": "sacado_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 33, + "formato": "num", + "default": 0 + }, + + "10.3Q": { + "nome": "sacado_nome", + "posicao_inicio": 34, + "posicao_fim": 73, + "formato": "alfa", + "default": "" + }, + + "11.3Q": { + "nome": "sacado_endereco", + "posicao_inicio": 74, + "posicao_fim": 113, + "formato": "alfa", + "default": "" + }, + + "12.3Q": { + "nome": "sacado_bairro", + "posicao_inicio": 114, + "posicao_fim": 128, + "formato": "alfa", + "default": "" + }, + + "13.3Q": { + "nome": "sacado_cep", + "posicao_inicio": 129, + "posicao_fim": 133, + "formato": "num", + "default": 0 + }, + + "14.3Q": { + "nome": "sacado_cep_sufixo", + "posicao_inicio": 134, + "posicao_fim": 136, + "formato": "num", + "default": 0 + }, + + "15.3Q": { + "nome": "sacado_cidade", + "posicao_inicio": 137, + "posicao_fim": 151, + "formato": "alfa", + "default": "" + }, + + "16.3Q": { + "nome": "sacado_uf", + "posicao_inicio": 152, + "posicao_fim": 153, + "formato": "alfa", + "default": "" + }, + + "17.3Q": { + "nome": "sacador_inscricao_tipo", + "posicao_inicio": 154, + "posicao_fim": 154, + "formato": "num", + "default": 0 + }, + + "18.3Q": { + "nome": "sacador_inscricao_numero", + "posicao_inicio": 155, + "posicao_fim": 169, + "formato": "num", + "default": 0 + }, + + "19.3Q": { + "nome": "sacador_nome", + "posicao_inicio": 170, + "posicao_fim": 209, + "formato": "alfa", + "default": "" + }, + + "20.3Q": { + "nome": "carne_identificador", + "posicao_inicio": 210, + "posicao_fim": 212, + "formato": "num", + "default": 0 + }, + + "21.3Q": { + "nome": "parcela_numero", + "posicao_inicio": 213, + "posicao_fim": 215, + "formato": "num", + "default": 0 + }, + + "22.3Q": { + "nome": "parcela_quantidade", + "posicao_inicio": 216, + "posicao_fim": 218, + "formato": "num", + "default": 0 + }, + + "23.3Q": { + "nome": "plano_numero", + "posicao_inicio": 219, + "posicao_fim": 221, + "formato": "num", + "default": 0 + }, + + "24.3Q": { + "nome": "vazio2", + "posicao_inicio": 222, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_r.json b/cnab240/bancos/bancodobrasil/specs/segmento_r.json new file mode 100644 index 0000000..2a550f7 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_r.json @@ -0,0 +1,146 @@ +{ + "nome": "SegmentoR", + "campos": { + "01.3R": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 33 + }, + + "02.3R": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3R": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3R": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3R": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "R" + }, + + "06.3R": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3R": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num", + "default": 0 + }, + + "08.3R": { + "nome": "desc2_codigo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num", + "default": 0 + }, + + "09.3R": { + "nome": "desc2_data", + "posicao_inicio": 19, + "posicao_fim": 26, + "formato": "num", + "default": 0 + }, + + "10.3R": { + "nome": "desc2_percentual", + "posicao_inicio": 27, + "posicao_fim": 41, + "formato": "num", + "decimais": 2 + }, + + "11.3R": { + "nome": "vazio2", + "posicao_inicio": 42, + "posicao_fim": 65, + "formato": "alfa", + "default": "" + }, + + "12.3R": { + "nome": "multa_codigo", + "posicao_inicio": 66, + "posicao_fim": 66, + "formato": "num", + "default": 0 + }, + + "13.3R": { + "nome": "multa_data", + "posicao_inicio": 67, + "posicao_fim": 74, + "formato": "num", + "default": 0 + }, + + "14.3R": { + "nome": "multa_valor_percentual", + "posicao_inicio": 75, + "posicao_fim": 89, + "formato": "num", + "default": 0 + }, + + "15.3R": { + "nome": "vazio3", + "posicao_inicio": 90, + "posicao_fim": 99, + "formato": "alfa", + "default": "" + }, + + "16.3R": { + "nome": "informacao3", + "posicao_inicio": 100, + "posicao_fim": 139, + "formato": "alfa", + "default": "" + }, + + "17.3R": { + "nome": "informacao4", + "posicao_inicio": 140, + "posicao_fim": 179, + "formato": "alfa", + "default": "" + }, + + "19.3R": { + "nome": "vazio4", + "posicao_inicio": 180, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_t.json b/cnab240/bancos/bancodobrasil/specs/segmento_t.json new file mode 100644 index 0000000..84a5a18 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_t.json @@ -0,0 +1,295 @@ +{ + "nome": "SegmentoT", + "campos": { + "01.3T": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 33 + }, + + "02.3T": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.3T": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3T": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num", + "default": 0 + }, + + "05.3T": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "T" + }, + + "06.3T": { + "nome": "boleto_dda", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3T": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num", + "default": 0 + }, + + "08.3T": { + "nome": "vazio1", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num", + "default": 0 + }, + + "09.3T": { + "nome": "cedente_agencia", + "posicao_inicio": 19, + "posicao_fim": 22, + "formato": "num", + "default": 0 + }, + + "10.3T": { + "nome": "vazio2", + "posicao_inicio": 23, + "posicao_fim": 30, + "formato": "num", + "default": 0 + }, + + "11.3T": { + "nome": "cedente_conta", + "posicao_inicio": 31, + "posicao_fim": 35, + "formato": "num", + "default": 0 + }, + + "12.3T": { + "nome": "vazio3", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "alfa", + "default": "" + }, + + "13.3T": { + "nome": "cedente_agencia_conta_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "num", + "default": 0 + }, + + "14.3T": { + "nome": "cobranca_carteira", + "posicao_inicio": 38, + "posicao_fim": 40, + "formato": "num", + "default": 0 + }, + + "15.3T": { + "nome": "nosso_numero", + "posicao_inicio": 41, + "posicao_fim": 48, + "formato": "num", + "default": 0 + }, + + "16.3T": { + "nome": "nosso_numero_dv", + "posicao_inicio": 49, + "posicao_fim": 49, + "formato": "num", + "default": 0 + }, + + "17.3T": { + "nome": "vazio4", + "posicao_inicio": 50, + "posicao_fim": 57, + "formato": "alfa", + "default": "" + }, + + "18.3T": { + "nome": "vazio5", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num", + "default": 0 + }, + + "19.3T": { + "nome": "numero_documento", + "posicao_inicio": 59, + "posicao_fim": 68, + "formato": "alfa", + "default": "" + }, + + "20.3T": { + "nome": "vazio6", + "posicao_inicio": 69, + "posicao_fim": 73, + "formato": "alfa", + "default": "" + }, + + "21.3T": { + "nome": "vencimento_titulo", + "posicao_inicio": 74, + "posicao_fim": 81, + "formato": "num", + "default": 0 + }, + + "22.3T": { + "nome": "valor_titulo", + "posicao_inicio": 82, + "posicao_fim": 96, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "23.3T": { + "nome": "vazio7", + "posicao_inicio": 97, + "posicao_fim": 99, + "formato": "num", + "default": 0 + }, + + "24.3T": { + "nome": "agencia_cobradora", + "posicao_inicio": 100, + "posicao_fim": 104, + "formato": "num", + "default": 0 + }, + + "25.3T": { + "nome": "agencia_cobradora_dv", + "posicao_inicio": 105, + "posicao_fim": 105, + "formato": "num", + "default": 0 + }, + + "26.3T": { + "nome": "identificacao_titulo", + "posicao_inicio": 106, + "posicao_fim": 130, + "formato": "alfa", + "default": "" + }, + + "27.3T": { + "nome": "vazio8", + "posicao_inicio": 131, + "posicao_fim": 132, + "formato": "num", + "default": 0 + }, + + "28.3T": { + "nome": "sacado_inscricao_tipo", + "posicao_inicio": 133, + "posicao_fim": 133, + "formato": "num", + "default": 0 + }, + + "29.3T": { + "nome": "sacado_inscricao_numero", + "posicao_inicio": 134, + "posicao_fim": 148, + "formato": "num", + "default": 0 + }, + + "30.3T": { + "nome": "sacado_nome", + "posicao_inicio": 149, + "posicao_fim": 178, + "formato": "alfa", + "default": "" + }, + + "31.3T": { + "nome": "vazio9", + "posicao_inicio": 179, + "posicao_fim": 188, + "formato": "alfa", + "default": "" + }, + + "32.3T": { + "nome": "vazio10", + "posicao_inicio": 189, + "posicao_fim": 198, + "formato": "num", + "default": 0 + }, + + "33.3T": { + "nome": "valor_tarifas", + "posicao_inicio": 199, + "posicao_fim": 213, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "34.3T": { + "nome": "motivo_ocorrencia", + "posicao_inicio": 214, + "posicao_fim": 221, + "formato": "alfa", + "default": "" + }, + + "35.3T": { + "nome": "codigo_liquidacao", + "posicao_inicio": 222, + "posicao_fim": 223, + "formato": "alfa", + "default": "" + }, + + "36.3T": { + "nome": "vazio11", + "posicao_inicio": 224, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_u.json b/cnab240/bancos/bancodobrasil/specs/segmento_u.json new file mode 100644 index 0000000..f2fcdbe --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_u.json @@ -0,0 +1,188 @@ +{ + "nome": "SegmentoU", + "campos": { + "01.3U": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 33 + }, + + "02.3U": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.3U": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3U": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num", + "default": 0 + }, + + "05.3U": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "U" + }, + + "06.3U": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3U": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num", + "default": 0 + }, + + "08.3U": { + "nome": "titulo_acrescimos", + "posicao_inicio": 18, + "posicao_fim": 32, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "09.3U": { + "nome": "titulo_desconto", + "posicao_inicio": 33, + "posicao_fim": 47, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "10.3U": { + "nome": "titulo_abatimento", + "posicao_inicio": 48, + "posicao_fim": 62, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "11.3U": { + "nome": "titulo_iof", + "posicao_inicio": 63, + "posicao_fim": 77, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "12.3U": { + "nome": "titulo_pago", + "posicao_inicio": 78, + "posicao_fim": 92, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "13.3U": { + "nome": "titulo_liquido", + "posicao_inicio": 93, + "posicao_fim": 107, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "14.3U": { + "nome": "vazio2", + "posicao_inicio": 108, + "posicao_fim": 137, + "formato": "num", + "default": 0 + }, + + "15.3U": { + "nome": "data_ocorrencia", + "posicao_inicio": 138, + "posicao_fim": 145, + "formato": "num", + "default": 0 + }, + + "16.3U": { + "nome": "data_credito", + "posicao_inicio": 146, + "posicao_fim": 153, + "formato": "num", + "default": 0 + }, + + "17.3U": { + "nome": "ocorrencia_codigo", + "posicao_inicio": 154, + "posicao_fim": 157, + "formato": "num", + "default": 0 + }, + + "18.3U": { + "nome": "ocorrencia_data", + "posicao_inicio": 158, + "posicao_fim": 165, + "formato": "num", + "default": 0 + }, + + "19.3U": { + "nome": "ocorrencia_valor", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "20.3U": { + "nome": "vazio3", + "posicao_inicio": 181, + "posicao_fim": 210, + "formato": "alfa", + "default": "" + }, + + "21.3U": { + "nome": "vazio4", + "posicao_inicio": 211, + "posicao_fim": 233, + "formato": "num", + "default": 0 + }, + + "22.3U": { + "nome": "vazio5", + "posicao_inicio": 234, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/spec_to_doc.py b/cnab240/bancos/bancodobrasil/specs/spec_to_doc.py new file mode 100644 index 0000000..74519b6 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/spec_to_doc.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import sys +import json +from collections import OrderedDict + +fname = sys.argv[1] +f = file(fname) +spec = json.load(f, object_pairs_hook=OrderedDict) +f.close() + +campos = spec.get('campos') +for campo in campos.values(): + campo_nome = campo.get('nome') + campo_formato = campo.get('formato') + campo_decimais = campo.get('decimais') + + if campo_decimais: + tipo = 'Decimal ({0} digitos)'.format(campo_decimais) + elif campo_formato == 'alfa': + tipo = 'str' + else: + tipo = 'int' + + print (' '* 8) + ':param {0}:'.format(campo_nome) + print (' '* 8) + ':type {0}: {1}'.format(campo_nome, tipo) + print + diff --git a/cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json b/cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json new file mode 100644 index 0000000..8faef6c --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json @@ -0,0 +1,60 @@ +{ + "nome": "TrailerArquivo", + "campos": { + "01.9": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 33 + }, + + "02.9": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.9": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 9 + }, + + "04.9": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "num", + "default": 0 + }, + + "05.9": { + "nome": "totais_quantidade_lotes", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num", + "default": 0 + }, + + "06.9": { + "nome": "totais_quantidade_registros", + "posicao_inicio": 24, + "posicao_fim": 29, + "formato": "num", + "default": 0 + }, + + "07.9": { + "nome": "vazio2", + "posicao_inicio": 30, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/trailer_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/trailer_lote_cobranca.json new file mode 100644 index 0000000..4dc7ab7 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/trailer_lote_cobranca.json @@ -0,0 +1,52 @@ +{ + "nome": "TrailerLoteCobranca", + "campos": { + "01.5": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 33 + }, + + "02.5": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.5": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 5 + }, + + "04.5": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "num", + "default": 0 + }, + + "05.5": { + "nome": "quantidade_registros", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num", + "default": 0 + }, + + "05.5": { + "nome": "vazio2", + "posicao_inicio": 25, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} From 81687500e60de6498516c74a37d95ded34f4205f Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 13:32:46 -0200 Subject: [PATCH 15/81] adicionando arquivo header --- .../bancodobrasil/specs/header_arquivo.json | 183 ++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 cnab240/bancos/bancodobrasil/specs/header_arquivo.json diff --git a/cnab240/bancos/bancodobrasil/specs/header_arquivo.json b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json new file mode 100644 index 0000000..4945346 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json @@ -0,0 +1,183 @@ +{ + "nome": "HeaderArquivo", + "campos": { + "01.0": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 1 + }, + + "02.0": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.0": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 0 + }, + + "04.0": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.0": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "06.0": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "num" + }, + + "07.0": { + "nome": "cedente_convenio", + "posicao_inicio": 33, + "posicao_fim": 52, + "formato": "alfa", + "default": "" + }, + + "08.0": { + "nome": "cedente_conta_agencia_codigo", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num" + }, + + "09.0": { + "nome": "cedente_conta_agencia_DV", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "alfa" + }, + + "10.0": { + "nome": "cedente_conta_conta_numero", + "posicao_inicio": 59, + "posicao_fim": 70, + "formato": "num" + }, + + "11.0": { + "nome": "cedente_conta_conta_DV", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa" + }, + + "12.0": { + "nome": "cedente_conta_DV", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "13.0": { + "nome": "cedente_nome_da_empresa", + "posicao_inicio": 73, + "posicao_fim": 102, + "formato": "alfa", + "default": "BANCO SANTANDER" + }, + + "14.0": { + "nome": "nome_do_banco", + "posicao_inicio": 103, + "posicao_fim": 132, + "formato": "alfa", + "default": "BANCO DO BRASIL S.A." + }, + + "15.0": { + "nome": "vazio3", + "posicao_inicio": 133, + "posicao_fim": 142, + "formato": "alfa", + "default": "" + }, + + "16.0": { + "nome": "arquivo_codigo", + "posicao_inicio": 143, + "posicao_fim": 143, + "formato": "num", + "default": 1 + }, + + "17.0": { + "nome": "arquivo_data_de_geracao", + "posicao_inicio": 144, + "posicao_fim": 151, + "formato": "num" + }, + + "18.0": { + "nome": "arquivo_hora_de_geracao", + "posicao_inicio": 152, + "posicao_fim": 157, + "formato": "num" + }, + + "19.0": { + "nome": "arquivo_sequencia", + "posicao_inicio": 158, + "posicao_fim": 163, + "formato": "num" + }, + + "20.0": { + "nome": "arquivo_layout", + "posicao_inicio": 164, + "posicao_fim": 166, + "formato": "num", + "default": 83 + }, + + "21.0": { + "nome": "arquivo_densidade", + "posicao_inicio": 167, + "posicao_fim": 171, + "formato": "num" + }, + + "22.0": { + "nome": "reservado_banco", + "posicao_inicio": 172, + "posicao_fim": 191, + "formato": "alfa" + }, + + "23.0": { + "nome": "reservado_empresa", + "posicao_inicio": 192, + "posicao_fim": 211, + "formato": "alfa" + }, + + "24.0": { + "nome": "vazio4", + "posicao_inicio": 212, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} From d34137bbd672692d8e8e11125f4c4af65fbd09d4 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 15:59:50 -0200 Subject: [PATCH 16/81] arrumando o header_lote_cobranca no formato BB --- .../specs/header_lote_cobranca.json | 90 +++++++++++++++---- 1 file changed, 72 insertions(+), 18 deletions(-) diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json index 8a88857..2f35442 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json @@ -53,7 +53,7 @@ "posicao_inicio": 14, "posicao_fim": 16, "formato": "num", - "default": 30 + "default": 42 }, "08.1": { @@ -78,37 +78,84 @@ "formato": "num" }, - "11.1": { - "nome": "vazio3", + "11.1BB1": { + "nome": "cedente_convenio", "posicao_inicio": 34, + "posicao_fim": 42, + "formato": "num" + }, + + "11.1BB2": { + "nome": "cedente_cobranca", + "posicao_inicio": 43, + "posicao_fim": 46, + "formato": "num" + }, + + "11.1BB3": { + "nome": "cedente_carteira", + "posicao_inicio": 47, + "posicao_fim": 48, + "formato": "num" + }, + + "11.1BB4": { + "nome": "cedente_variacao_carteira", + "posicao_inicio": 49, + "posicao_fim": 51, + "formato": "num" + }, + + "11.1BB5": { + "nome": "cedente_identifica_remessa", + "posicao_inicio": 52, "posicao_fim": 53, - "formato": "alfa", - "default": "" + "formato": "alfa" }, "12.1": { - "nome": "codigo_transmissao", + "nome": "cedente_agencia", "posicao_inicio": 54, - "posicao_fim": 68, + "posicao_fim": 58, "formato": "num" }, "13.1": { - "nome": "vazio4", - "posicao_inicio": 69, - "posicao_fim": 73, - "formato": "alfa", - "default": "" + "nome": "cedente_agencia_DV", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "alfa" }, "14.1": { + "nome": "cedente_conta", + "posicao_inicio": 60, + "posicao_fim": 71, + "formato": "num" + }, + + "15.1": { + "nome": "cedente_conta_DV", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "16.1": { + "nome": "cedente_DV", + "posicao_inicio": 73, + "posicao_fim": 73, + "formato": "alfa" + }, + + "17.1": { "nome": "cedente_nome", "posicao_inicio": 74, "posicao_fim": 103, "formato": "alfa" }, - "15.1": { + "18.1": { "nome": "mensagem1", "posicao_inicio": 104, "posicao_fim": 143, @@ -116,7 +163,7 @@ "default": "" }, - "16.1": { + "19.1": { "nome": "mensagem2", "posicao_inicio": 144, "posicao_fim": 183, @@ -124,23 +171,30 @@ "default": "" }, - "17.1": { + "20.1": { "nome": "controlecob_numero", "posicao_inicio": 184, "posicao_fim": 191, "formato": "num" }, - "18.1": { + "21.1": { "nome": "controlecob_data_gravacao", "posicao_inicio": 192, "posicao_fim": 199, "formato": "num" }, - "19.1": { - "nome": "vazio5", + "22.1": { + "nome": "controlecob_data_credito", "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num" + }, + + "23.1": { + "nome": "vazio5", + "posicao_inicio": 208, "posicao_fim": 240, "formato": "alfa", "default": "" From 0628ec685633bdc558d3f3fbf8135cc71842260f Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 16:27:59 -0200 Subject: [PATCH 17/81] arrumando o segmento_p no formato BB --- .../bancodobrasil/specs/segmento_p.json | 168 +++++++----------- 1 file changed, 68 insertions(+), 100 deletions(-) diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_p.json b/cnab240/bancos/bancodobrasil/specs/segmento_p.json index 7ab5fe0..d163856 100644 --- a/cnab240/bancos/bancodobrasil/specs/segmento_p.json +++ b/cnab240/bancos/bancodobrasil/specs/segmento_p.json @@ -6,7 +6,7 @@ "posicao_inicio": 1, "posicao_fim": 3, "formato": "num", - "default": 33 + "default": 1 }, "02.3P": { @@ -57,110 +57,89 @@ "08.3P": { "nome": "cedente_agencia", "posicao_inicio": 18, - "posicao_fim": 21, + "posicao_fim": 22, "formato": "num" }, "09.3P": { "nome": "cedente_agencia_dv", - "posicao_inicio": 22, - "posicao_fim": 22, - "formato": "num" + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "alfa" }, "10.3P": { "nome": "cedente_conta", - "posicao_inicio": 23, - "posicao_fim": 31, + "posicao_inicio": 24, + "posicao_fim": 35, "formato": "num" }, "11.3P": { "nome": "cedente_conta_dv", - "posicao_inicio": 32, - "posicao_fim": 32, - "formato": "num" + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "alfa" }, "12.3P": { - "nome": "conta_cobranca", - "posicao_inicio": 33, - "posicao_fim": 41, - "formato": "num", + "nome": "cedente_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "alfa", "default": 0 }, "13.3P": { - "nome": "conta_cobranca_dv", - "posicao_inicio": 42, - "posicao_fim": 42, - "formato": "num", - "default": 0 - }, - - "14.3P": { - "nome": "vazio2", - "posicao_inicio": 43, - "posicao_fim": 44, - "formato": "alfa", - "default": "" - }, - - "15.3P": { - "nome": "nosso_numero", - "posicao_inicio": 45, + "nome": "cedente_identificacao", + "posicao_inicio": 38, "posicao_fim": 57, - "formato": "num" + "formato": "alfa" }, - "16.3P": { - "nome": "tipo_cobranca", + "14.3P": { + "nome": "cedente_carteira", "posicao_inicio": 58, "posicao_fim": 58, - "formato": "num", - "default": 0 + "formato": "num" }, - "17.3P": { - "nome": "forma_cadastramento", + "15.3P": { + "nome": "cedente_forma_cad", "posicao_inicio": 59, "posicao_fim": 59, - "formato": "num", - "default": 0 + "formato": "num" }, - "18.3P": { + "16.3P": { "nome": "tipo_documento", "posicao_inicio": 60, "posicao_fim": 60, - "formato": "num", - "default": 0 + "formato": "alfa" }, - "19.3P": { - "nome": "vazio3", + "17.3P": { + "nome": "ident_emissao_bloqueto", "posicao_inicio": 61, "posicao_fim": 61, - "formato": "alfa", - "default": "" + "formato": "num" }, - "20.3P": { - "nome": "vazio4", + "18.3P": { + "nome": "ident_distribuicao", "posicao_inicio": 62, "posicao_fim": 62, - "formato": "alfa", - "default": "" + "formato": "num" }, - "21.3P": { + "19.3P": { "nome": "numero_documento", "posicao_inicio": 63, "posicao_fim": 77, "formato": "alfa" }, - "22.3P": { + "20.3P": { "nome": "vencimento_titulo", "posicao_inicio": 78, "posicao_fim": 85, @@ -168,7 +147,7 @@ "default": 0 }, - "23.3P": { + "21.3P": { "nome": "valor_titulo", "posicao_inicio": 86, "posicao_fim": 100, @@ -176,39 +155,29 @@ "decimais": 2 }, - "24.3P": { - "nome": "conta_cobradora", + "22.3P": { + "nome": "agencia_cobradora", "posicao_inicio": 101, - "posicao_fim": 104, - "formato": "num", - "default": 0 - }, - - "25.3P": { - "nome": "agencia_beneficiario_dv", - "posicao_inicio": 105, "posicao_fim": 105, - "formato": "num", - "default": 0 + "formato": "num" }, - "26.3P": { - "nome": "vazio5", + "23.3P": { + "nome": "agencia_beneficiario_dv", "posicao_inicio": 106, "posicao_fim": 106, - "formato": "alfa", - "default": "" + "formato": "alfa" }, - "27.3P": { + "24.3P": { "nome": "especie_titulo", "posicao_inicio": 107, "posicao_fim": 108, "formato": "num", - "default": 0 + "default": 18 }, - "28.3P": { + "25.3P": { "nome": "aceite_titulo", "posicao_inicio": 109, "posicao_fim": 109, @@ -216,7 +185,7 @@ "default": "N" }, - "29.3P": { + "26.3P": { "nome": "data_emissao_titulo", "posicao_inicio": 110, "posicao_fim": 117, @@ -224,7 +193,7 @@ "default": 0 }, - "30.3P": { + "27.3P": { "nome": "codigo_juros_mora", "posicao_inicio": 118, "posicao_fim": 118, @@ -232,7 +201,7 @@ "default": 0 }, - "31.3P": { + "28.3P": { "nome": "juros_mora_data", "posicao_inicio": 119, "posicao_fim": 126, @@ -240,7 +209,7 @@ "default": 0 }, - "32.3P": { + "29.3P": { "nome": "juros_mora_taxa_dia", "posicao_inicio": 127, "posicao_fim": 141, @@ -248,7 +217,7 @@ "decimais": 2 }, - "33.3P": { + "30.3P": { "nome": "desconto1_codigo", "posicao_inicio": 142, "posicao_fim": 142, @@ -256,7 +225,7 @@ "default": 0 }, - "34.3P": { + "31.3P": { "nome": "desconto1_data", "posicao_inicio": 143, "posicao_fim": 150, @@ -264,7 +233,7 @@ "default": 0 }, - "35.3P": { + "32.3P": { "nome": "desconto1_percentual", "posicao_inicio": 151, "posicao_fim": 165, @@ -273,7 +242,7 @@ "default": 0 }, - "36.3P": { + "33.3P": { "nome": "valor_iof", "posicao_inicio": 166, "posicao_fim": 180, @@ -282,7 +251,7 @@ "default": 0 }, - "37.3P": { + "34.3P": { "nome": "valor_abatimento", "posicao_inicio": 181, "posicao_fim": 195, @@ -291,7 +260,7 @@ "default": 0 }, - "38.3P": { + "35.3P": { "nome": "identificacao_titulo", "posicao_inicio": 196, "posicao_fim": 220, @@ -299,7 +268,7 @@ "default": "" }, - "39.3P": { + "36.3P": { "nome": "codigo_protesto", "posicao_inicio": 221, "posicao_fim": 221, @@ -307,7 +276,7 @@ "default": 0 }, - "40.3P": { + "37.3P": { "nome": "prazo_protesto", "posicao_inicio": 222, "posicao_fim": 223, @@ -315,7 +284,7 @@ "default": 0 }, - "41.3P": { + "38.3P": { "nome": "codigo_baixa", "posicao_inicio": 224, "posicao_fim": 224, @@ -323,23 +292,15 @@ "default": 0 }, - "42.3P": { - "nome": "vazio6", - "posicao_inicio": 225, - "posicao_fim": 225, - "formato": "alfa", - "default": "" - }, - - "43.3P": { + "39.3P": { "nome": "prazo_baixa", - "posicao_inicio": 226, + "posicao_inicio": 225, "posicao_fim": 227, "formato": "num", "default": 0 }, - "44.3P": { + "40.3P": { "nome": "codigo_moeda", "posicao_inicio": 228, "posicao_fim": 229, @@ -347,9 +308,16 @@ "default": 0 }, - "45.3P": { - "nome": "vazio7", + "41.3P": { + "nome": "numero_contrato_operacao", "posicao_inicio": 230, + "posicao_fim": 239, + "formato": "num" + }, + + "42.3P": { + "nome": "vazio7", + "posicao_inicio": 240, "posicao_fim": 240, "formato": "alfa", "default": "" From bef931582d5168824834367386b54a08b2d4fb2c Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 16:40:32 -0200 Subject: [PATCH 18/81] arrumando o segmento_q no formato BB --- .../bancodobrasil/specs/segmento_q.json | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_q.json b/cnab240/bancos/bancodobrasil/specs/segmento_q.json index 9d99779..db556fb 100644 --- a/cnab240/bancos/bancodobrasil/specs/segmento_q.json +++ b/cnab240/bancos/bancodobrasil/specs/segmento_q.json @@ -6,7 +6,7 @@ "posicao_inicio": 1, "posicao_fim": 3, "formato": "num", - "default": 33 + "default": 1 }, "02.3Q": { @@ -154,7 +154,7 @@ }, "20.3Q": { - "nome": "carne_identificador", + "nome": "codigo_compensacao", "posicao_inicio": 210, "posicao_fim": 212, "formato": "num", @@ -162,32 +162,15 @@ }, "21.3Q": { - "nome": "parcela_numero", + "nome": "nosso_numero", "posicao_inicio": 213, - "posicao_fim": 215, - "formato": "num", - "default": 0 + "posicao_fim": 232, + "formato": "alfa" }, "22.3Q": { - "nome": "parcela_quantidade", - "posicao_inicio": 216, - "posicao_fim": 218, - "formato": "num", - "default": 0 - }, - - "23.3Q": { - "nome": "plano_numero", - "posicao_inicio": 219, - "posicao_fim": 221, - "formato": "num", - "default": 0 - }, - - "24.3Q": { "nome": "vazio2", - "posicao_inicio": 222, + "posicao_inicio": 233, "posicao_fim": 240, "formato": "alfa", "default": "" From eb175962d9d2b8d777ecc780c5a923cc8fafc920 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 17:06:37 -0200 Subject: [PATCH 19/81] arrumando o segmento_r no formato BB --- .../bancodobrasil/specs/segmento_r.json | 117 +++++++++++++++--- 1 file changed, 103 insertions(+), 14 deletions(-) diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_r.json b/cnab240/bancos/bancodobrasil/specs/segmento_r.json index 2a550f7..b991b17 100644 --- a/cnab240/bancos/bancodobrasil/specs/segmento_r.json +++ b/cnab240/bancos/bancodobrasil/specs/segmento_r.json @@ -6,7 +6,7 @@ "posicao_inicio": 1, "posicao_fim": 3, "formato": "num", - "default": 33 + "default": 1 }, "02.3R": { @@ -80,14 +80,30 @@ }, "11.3R": { - "nome": "vazio2", + "nome": "desc3_codigo", "posicao_inicio": 42, - "posicao_fim": 65, - "formato": "alfa", - "default": "" + "posicao_fim": 42, + "formato": "num", + "default": 0 }, "12.3R": { + "nome": "desc3_data", + "posicao_inicio": 43, + "posicao_fim": 50, + "formato": "num", + "default": 0 + }, + + "13.3R": { + "nome": "desc3_percentual", + "posicao_inicio": 51, + "posicao_fim": 65, + "formato": "num", + "decimais": 2 + }, + + "14.3R": { "nome": "multa_codigo", "posicao_inicio": 66, "posicao_fim": 66, @@ -95,7 +111,7 @@ "default": 0 }, - "13.3R": { + "15.3R": { "nome": "multa_data", "posicao_inicio": 67, "posicao_fim": 74, @@ -103,41 +119,114 @@ "default": 0 }, - "14.3R": { + "16.3R": { "nome": "multa_valor_percentual", "posicao_inicio": 75, "posicao_fim": 89, "formato": "num", + "decimais": 2, "default": 0 }, - "15.3R": { - "nome": "vazio3", + "17.3R": { + "nome": "info_sacado", "posicao_inicio": 90, "posicao_fim": 99, "formato": "alfa", "default": "" }, - "16.3R": { - "nome": "informacao3", + "18.3R": { + "nome": "mensagem3", "posicao_inicio": 100, "posicao_fim": 139, "formato": "alfa", "default": "" }, - "17.3R": { - "nome": "informacao4", + "19.3R": { + "nome": "mensagem4", "posicao_inicio": 140, "posicao_fim": 179, "formato": "alfa", "default": "" }, - "19.3R": { + "20.3R": { "nome": "vazio4", "posicao_inicio": 180, + "posicao_fim": 199, + "formato": "alfa", + "default": "" + }, + + "21.3R": { + "nome": "codigo_ocorrencia", + "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num", + "default": 0 + }, + + "22.3R": { + "nome": "codigo_banco_conta_debito", + "posicao_inicio": 208, + "posicao_fim": 210, + "formato": "num", + "default": 0 + }, + + "23.3R": { + "nome": "codigo_banco_agencia_debito", + "posicao_inicio": 211, + "posicao_fim": 215, + "formato": "num", + "default": 0 + }, + + "24.3R": { + "nome": "verificador_agencia", + "posicao_inicio": 216, + "posicao_fim": 216, + "formato": "alfa", + "default": "" + }, + + "25.3R": { + "nome": "codigo_banco_corrente_debito", + "posicao_inicio": 217, + "posicao_fim": 228, + "formato": "num", + "default": 0 + }, + + "26.3R": { + "nome": "verificador_corrente_debito", + "posicao_inicio": 229, + "posicao_fim": 229, + "formato": "alfa", + "default": "" + }, + + "27.3R": { + "nome": "verificador_ag_conta_debito", + "posicao_inicio": 230, + "posicao_fim": 230, + "formato": "alfa", + "default": "" + }, + + "28.3R": { + "nome": "aviso_debito_auto", + "posicao_inicio": 231, + "posicao_fim": 231, + "formato": "num", + "default": 0 + }, + + "29.3R": { + "nome": "vazio5", + "posicao_inicio": 232, "posicao_fim": 240, "formato": "alfa", "default": "" From 0d75721e7bc6bf72191a700755e20c4b45cb5d72 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 17:45:35 -0200 Subject: [PATCH 20/81] arrumando o trailer_lote_cobranca no formato BB --- .../bancodobrasil/specs/segmento_u.json | 188 ------------------ .../specs/trailer_lote_cobranca.json | 10 +- 2 files changed, 5 insertions(+), 193 deletions(-) delete mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_u.json diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_u.json b/cnab240/bancos/bancodobrasil/specs/segmento_u.json deleted file mode 100644 index f2fcdbe..0000000 --- a/cnab240/bancos/bancodobrasil/specs/segmento_u.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "nome": "SegmentoU", - "campos": { - "01.3U": { - "nome": "controle_banco", - "posicao_inicio": 1, - "posicao_fim": 3, - "formato": "num", - "default": 33 - }, - - "02.3U": { - "nome": "controle_lote", - "posicao_inicio": 4, - "posicao_fim": 7, - "formato": "num", - "default": 0 - }, - - "03.3U": { - "nome": "controle_registro", - "posicao_inicio": 8, - "posicao_fim": 8, - "formato": "num", - "default": 3 - }, - - "04.3U": { - "nome": "servico_numero_registro", - "posicao_inicio": 9, - "posicao_fim": 13, - "formato": "num", - "default": 0 - }, - - "05.3U": { - "nome": "servico_segmento", - "posicao_inicio": 14, - "posicao_fim": 14, - "formato": "alfa", - "default": "U" - }, - - "06.3U": { - "nome": "vazio1", - "posicao_inicio": 15, - "posicao_fim": 15, - "formato": "alfa", - "default": "" - }, - - "07.3U": { - "nome": "servico_codigo_movimento", - "posicao_inicio": 16, - "posicao_fim": 17, - "formato": "num", - "default": 0 - }, - - "08.3U": { - "nome": "titulo_acrescimos", - "posicao_inicio": 18, - "posicao_fim": 32, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "09.3U": { - "nome": "titulo_desconto", - "posicao_inicio": 33, - "posicao_fim": 47, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "10.3U": { - "nome": "titulo_abatimento", - "posicao_inicio": 48, - "posicao_fim": 62, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "11.3U": { - "nome": "titulo_iof", - "posicao_inicio": 63, - "posicao_fim": 77, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "12.3U": { - "nome": "titulo_pago", - "posicao_inicio": 78, - "posicao_fim": 92, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "13.3U": { - "nome": "titulo_liquido", - "posicao_inicio": 93, - "posicao_fim": 107, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "14.3U": { - "nome": "vazio2", - "posicao_inicio": 108, - "posicao_fim": 137, - "formato": "num", - "default": 0 - }, - - "15.3U": { - "nome": "data_ocorrencia", - "posicao_inicio": 138, - "posicao_fim": 145, - "formato": "num", - "default": 0 - }, - - "16.3U": { - "nome": "data_credito", - "posicao_inicio": 146, - "posicao_fim": 153, - "formato": "num", - "default": 0 - }, - - "17.3U": { - "nome": "ocorrencia_codigo", - "posicao_inicio": 154, - "posicao_fim": 157, - "formato": "num", - "default": 0 - }, - - "18.3U": { - "nome": "ocorrencia_data", - "posicao_inicio": 158, - "posicao_fim": 165, - "formato": "num", - "default": 0 - }, - - "19.3U": { - "nome": "ocorrencia_valor", - "posicao_inicio": 166, - "posicao_fim": 180, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "20.3U": { - "nome": "vazio3", - "posicao_inicio": 181, - "posicao_fim": 210, - "formato": "alfa", - "default": "" - }, - - "21.3U": { - "nome": "vazio4", - "posicao_inicio": 211, - "posicao_fim": 233, - "formato": "num", - "default": 0 - }, - - "22.3U": { - "nome": "vazio5", - "posicao_inicio": 234, - "posicao_fim": 240, - "formato": "alfa", - "default": "" - } - - } -} diff --git a/cnab240/bancos/bancodobrasil/specs/trailer_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/trailer_lote_cobranca.json index 4dc7ab7..24b3fc0 100644 --- a/cnab240/bancos/bancodobrasil/specs/trailer_lote_cobranca.json +++ b/cnab240/bancos/bancodobrasil/specs/trailer_lote_cobranca.json @@ -6,7 +6,7 @@ "posicao_inicio": 1, "posicao_fim": 3, "formato": "num", - "default": 33 + "default": 1 }, "02.5": { @@ -29,8 +29,8 @@ "nome": "vazio1", "posicao_inicio": 9, "posicao_fim": 17, - "formato": "num", - "default": 0 + "formato": "alfa", + "default": "" }, "05.5": { @@ -41,9 +41,9 @@ "default": 0 }, - "05.5": { + "06.5": { "nome": "vazio2", - "posicao_inicio": 25, + "posicao_inicio": 24, "posicao_fim": 240, "formato": "alfa", "default": "" From 03269f52edc2f2cd72f1cacb62965fb8e586daab Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Mon, 23 Jan 2017 17:48:02 -0200 Subject: [PATCH 21/81] arrumando o trailer_arquivo no formato BB --- .../bancodobrasil/specs/trailer_arquivo.json | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json b/cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json index 8faef6c..99750cf 100644 --- a/cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json +++ b/cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json @@ -6,7 +6,7 @@ "posicao_inicio": 1, "posicao_fim": 3, "formato": "num", - "default": 33 + "default": 1 }, "02.9": { @@ -29,8 +29,8 @@ "nome": "vazio1", "posicao_inicio": 9, "posicao_fim": 17, - "formato": "num", - "default": 0 + "formato": "alfa", + "default": "" }, "05.9": { @@ -50,8 +50,16 @@ }, "07.9": { - "nome": "vazio2", + "nome": "totais_quantidade_contas", "posicao_inicio": 30, + "posicao_fim": 35, + "formato": "num", + "default": 0 + }, + + "08.9": { + "nome": "vazio2", + "posicao_inicio": 36, "posicao_fim": 240, "formato": "alfa", "default": "" From 99999267d71248fc047bc3c26da51575e2bf0c2b Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Tue, 24 Jan 2017 17:59:29 -0200 Subject: [PATCH 22/81] arrumando o segmento --- .../bancodobrasil/specs/segmento_t.json | 295 ------------------ cnab240/teste.py | 2 + 2 files changed, 2 insertions(+), 295 deletions(-) delete mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_t.json create mode 100644 cnab240/teste.py diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_t.json b/cnab240/bancos/bancodobrasil/specs/segmento_t.json deleted file mode 100644 index 84a5a18..0000000 --- a/cnab240/bancos/bancodobrasil/specs/segmento_t.json +++ /dev/null @@ -1,295 +0,0 @@ -{ - "nome": "SegmentoT", - "campos": { - "01.3T": { - "nome": "controle_banco", - "posicao_inicio": 1, - "posicao_fim": 3, - "formato": "num", - "default": 33 - }, - - "02.3T": { - "nome": "controle_lote", - "posicao_inicio": 4, - "posicao_fim": 7, - "formato": "num", - "default": 0 - }, - - "03.3T": { - "nome": "controle_registro", - "posicao_inicio": 8, - "posicao_fim": 8, - "formato": "num", - "default": 3 - }, - - "04.3T": { - "nome": "servico_numero_registro", - "posicao_inicio": 9, - "posicao_fim": 13, - "formato": "num", - "default": 0 - }, - - "05.3T": { - "nome": "servico_segmento", - "posicao_inicio": 14, - "posicao_fim": 14, - "formato": "alfa", - "default": "T" - }, - - "06.3T": { - "nome": "boleto_dda", - "posicao_inicio": 15, - "posicao_fim": 15, - "formato": "alfa", - "default": "" - }, - - "07.3T": { - "nome": "servico_codigo_movimento", - "posicao_inicio": 16, - "posicao_fim": 17, - "formato": "num", - "default": 0 - }, - - "08.3T": { - "nome": "vazio1", - "posicao_inicio": 18, - "posicao_fim": 18, - "formato": "num", - "default": 0 - }, - - "09.3T": { - "nome": "cedente_agencia", - "posicao_inicio": 19, - "posicao_fim": 22, - "formato": "num", - "default": 0 - }, - - "10.3T": { - "nome": "vazio2", - "posicao_inicio": 23, - "posicao_fim": 30, - "formato": "num", - "default": 0 - }, - - "11.3T": { - "nome": "cedente_conta", - "posicao_inicio": 31, - "posicao_fim": 35, - "formato": "num", - "default": 0 - }, - - "12.3T": { - "nome": "vazio3", - "posicao_inicio": 36, - "posicao_fim": 36, - "formato": "alfa", - "default": "" - }, - - "13.3T": { - "nome": "cedente_agencia_conta_dv", - "posicao_inicio": 37, - "posicao_fim": 37, - "formato": "num", - "default": 0 - }, - - "14.3T": { - "nome": "cobranca_carteira", - "posicao_inicio": 38, - "posicao_fim": 40, - "formato": "num", - "default": 0 - }, - - "15.3T": { - "nome": "nosso_numero", - "posicao_inicio": 41, - "posicao_fim": 48, - "formato": "num", - "default": 0 - }, - - "16.3T": { - "nome": "nosso_numero_dv", - "posicao_inicio": 49, - "posicao_fim": 49, - "formato": "num", - "default": 0 - }, - - "17.3T": { - "nome": "vazio4", - "posicao_inicio": 50, - "posicao_fim": 57, - "formato": "alfa", - "default": "" - }, - - "18.3T": { - "nome": "vazio5", - "posicao_inicio": 58, - "posicao_fim": 58, - "formato": "num", - "default": 0 - }, - - "19.3T": { - "nome": "numero_documento", - "posicao_inicio": 59, - "posicao_fim": 68, - "formato": "alfa", - "default": "" - }, - - "20.3T": { - "nome": "vazio6", - "posicao_inicio": 69, - "posicao_fim": 73, - "formato": "alfa", - "default": "" - }, - - "21.3T": { - "nome": "vencimento_titulo", - "posicao_inicio": 74, - "posicao_fim": 81, - "formato": "num", - "default": 0 - }, - - "22.3T": { - "nome": "valor_titulo", - "posicao_inicio": 82, - "posicao_fim": 96, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "23.3T": { - "nome": "vazio7", - "posicao_inicio": 97, - "posicao_fim": 99, - "formato": "num", - "default": 0 - }, - - "24.3T": { - "nome": "agencia_cobradora", - "posicao_inicio": 100, - "posicao_fim": 104, - "formato": "num", - "default": 0 - }, - - "25.3T": { - "nome": "agencia_cobradora_dv", - "posicao_inicio": 105, - "posicao_fim": 105, - "formato": "num", - "default": 0 - }, - - "26.3T": { - "nome": "identificacao_titulo", - "posicao_inicio": 106, - "posicao_fim": 130, - "formato": "alfa", - "default": "" - }, - - "27.3T": { - "nome": "vazio8", - "posicao_inicio": 131, - "posicao_fim": 132, - "formato": "num", - "default": 0 - }, - - "28.3T": { - "nome": "sacado_inscricao_tipo", - "posicao_inicio": 133, - "posicao_fim": 133, - "formato": "num", - "default": 0 - }, - - "29.3T": { - "nome": "sacado_inscricao_numero", - "posicao_inicio": 134, - "posicao_fim": 148, - "formato": "num", - "default": 0 - }, - - "30.3T": { - "nome": "sacado_nome", - "posicao_inicio": 149, - "posicao_fim": 178, - "formato": "alfa", - "default": "" - }, - - "31.3T": { - "nome": "vazio9", - "posicao_inicio": 179, - "posicao_fim": 188, - "formato": "alfa", - "default": "" - }, - - "32.3T": { - "nome": "vazio10", - "posicao_inicio": 189, - "posicao_fim": 198, - "formato": "num", - "default": 0 - }, - - "33.3T": { - "nome": "valor_tarifas", - "posicao_inicio": 199, - "posicao_fim": 213, - "formato": "num", - "decimais": 2, - "default": 0 - }, - - "34.3T": { - "nome": "motivo_ocorrencia", - "posicao_inicio": 214, - "posicao_fim": 221, - "formato": "alfa", - "default": "" - }, - - "35.3T": { - "nome": "codigo_liquidacao", - "posicao_inicio": 222, - "posicao_fim": 223, - "formato": "alfa", - "default": "" - }, - - "36.3T": { - "nome": "vazio11", - "posicao_inicio": 224, - "posicao_fim": 240, - "formato": "alfa", - "default": "" - } - - } -} diff --git a/cnab240/teste.py b/cnab240/teste.py new file mode 100644 index 0000000..a742e8e --- /dev/null +++ b/cnab240/teste.py @@ -0,0 +1,2 @@ +# -*- encoding: utf-8 -*- + From 38b3a08d9d7615f297b11e6c30578c4645719857 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Wed, 25 Jan 2017 17:53:02 -0200 Subject: [PATCH 23/81] criando gera_remessa --- cnab240/gera_remessa.py | 148 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 cnab240/gera_remessa.py diff --git a/cnab240/gera_remessa.py b/cnab240/gera_remessa.py new file mode 100644 index 0000000..2d2a61a --- /dev/null +++ b/cnab240/gera_remessa.py @@ -0,0 +1,148 @@ +# -*- encoding: utf-8 -*- + +import os + +from datetime import datetime + +class GeraCNAB240(): + + def __init__(self, path, agencia, conta): + self.path = path + self.nome_arquivo = '' + self.codigo_banco = 1 + self.lote_servico = 0 + self.tipo_registro = 0 + self.tipo_inscricao = None + self.numero_inscricao = None + self.agencia = agencia + self.agencia_dv = 'X' + self.numero_conta = conta + self.conta_dv = 'X' + self.dv = '' + self.nome_empresa = None + self.nome_banco = 'BANCO DO BRASIL - S.A.' + self.codigo_remessa_retorno = 1 + self.data_geracao = None + self.hora_geracao = None + self.numero_sequencial = 0 + self.layout = 83 + self.densidade = 0 + self.lote = 1 + self.tipo_reg = 1 + self.tipo_operador = 'R' + self.tipo_servico = 1 + self.layout_lote = 40 + self.numero_convenio = None + self.cobranca_cedente = None + self.numero_carteira = None + self.variacao_carteira = None + self.mensagem1 = '' + self.mensagem2 = '' + self.numero_remessa_retorno = None + self.data_gravacao = None + self.data_cretido = 0 + + self.tipo_regP = 3 + self.sequencial_lote = 1 + self.segmentoP = 'P' + self.cod_movimento_remessa = None + self.identificacao_titulo = None + self.codigo_carteira = None + self.forma_cadastro = None + self.tipo_doc = None + self.ident_emissor_boleto = None + self.ident_distribuicao = None + self.numero_doc_cobranca = None + self.data_vencimento = None + self.valor = None + self.agencia_cobranca = 0 + self.agencia_cobranca_dv = '' + self.especie = None + self.aceita = 'N' + self.data_emissao = None + self.codigo_juros_mora = 0 + self.data_juros_mora = 0 + self.valor_juros_mora = 0 + self.cod_desconto1 = 0 + self.data_desconto1 = 0 + self.valor_desconto1 = 0 + self.valor_IOF = 0 + self.valor_abatimento = 0 + self.identificacao_titulo_empresa = None + self.codigo_protesto = 0 + self.dias_protesto = 0 + self.codigo_baixa = None + self.dias_baixa = 0 + self.codigo_moeda = 0 + self.numero_contrato = 0 + + self.tipo_inscricaoQ = None + self.numero_inscricaoQ = None + self.nomeQ = None + self.enderecoQ = None + self.bairroQ = None + self.cepQ = None + self.sufixo_cepQ = None + self.cidadeQ = None + self.ufQ = None + self.tipo_inscricao_sacador = None + self.numero_inscricao_sacador = None + self.nome_sacador = None + self.codigo_compensacao = 0 + + self.cod_desconto2 = 0 + self.data_desconto2 = 0 + self.valor_desconto2 = 0 + self.cod_desconto3 = 0 + self.data_desconto3 = 0 + self.valor_desconto3 = 0 + self.cod_multa = 0 + self.data_multa = 0 + self.valor_multa = 0 + self.info_sacado = '' + self.mensagem3 = '' + self.mensagem4 = '' + self.codigo_ocorrencia_sacado = 0 + self.cod_banco_debito = 0 + self.cod_agencia_debito = 0 + self.cod_agencia_debito_dv = '' + self.cod_conta_debito = 0 + self.cod_conta_debito_dv = '' + self.dv_debito = '' + self.aviso_debito = 0 + + self.tipo_registro_TL = 5 + self.qtd_registro_lote = None + + self.qtd_lote_arquivo = None + self.qtd_registro_arquivo = None + self.qtd_conta = 0 + + def sequencia(self, nome): + seq = 1 + lista = os.listdir(self.path) + for l in lista: + if l.startswith(nome): + seq += 1 + return nome + '_{0}.rem'.format(seq) + + def gera_header_arquivo(self): + self.data_geracao = data_now = datetime.now().strftime('%d%m%y') + self.hora_geracao = hora_now = datetime.now().strftime('%H%M%S') + nome = 'CNAB240_{0}_{1}_{2}'.format(self.agencia, self.numero_conta, data_now) + nome = self.sequencia(nome) + self.nome_arquivo = nome + f = open(os.path.join(self.path, nome), 'w') + string_hearder = '{0:0>3}{1:0>4}{2}{3: >9}{4}{5:0>14}{6: >9}{7: >4}{8: >2}{9: >3}{10: >2}{11:0>5}{12}{13:0>12}{14}{15}{16: <30}{17: <30}{18: >10}{19}{20}{21}{22:0>6}{23:0>3}{24:0>5}{25: >20}{26: >20}' \ + '{27: >29}\n'.format(self.codigo_banco, self.lote_servico, self.tipo_registro, '', self.tipo_inscricao, self.numero_inscricao, '', '', '', '', '', self.agencia, self.agencia_dv, self.numero_conta, + self.conta_dv, self.dv, self.nome_empresa, self.nome_banco, '', self.codigo_remessa_retorno, data_now, hora_now, self.numero_sequencial, self.layout, self.densidade, '', '', '') + f.write(string_hearder) + f.close() + + def gera_header_lote(self): + f = open(os.path.join(self.path, self.nome_arquivo), 'a') + string_hearder = '{0:0>3}{1:0>4}{2}{3: >9}{4}{5:0>14}{6: >9}{7: >4}{8: >2}{9: >3}{10: >2}{11:0>5}{12}{13:0>12}{14}{15}{16: <30}{17: <30}{18: >10}{19}{20}{21}{22:0>6}{23:0>3}{24:0>5}{25: >20}{26: >20}' \ + '{27: >29}\n'.format(self.codigo_banco, self.lote_servico, self.tipo_registro, '', self.tipo_inscricao, self.numero_inscricao, '', '', '', '', '', self.agencia, self.agencia_dv, self.numero_conta, + self.conta_dv, self.dv, self.nome_empresa, self.nome_banco, '', self.codigo_remessa_retorno, data_now, hora_now, self.numero_sequencial, self.layout, self.densidade, '', '', '') + f.write(string_hearder) + f.close() From 83fe8841eefd2ad5d9d5862730aaa9a7fcb05e42 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Thu, 26 Jan 2017 11:48:48 -0200 Subject: [PATCH 24/81] =?UTF-8?q?terminado=20as=20fun=C3=A7=C3=B5es=20de?= =?UTF-8?q?=20gera=C3=A7=C3=A3o=20de=20remessa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/gera_remessa.py | 55 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/cnab240/gera_remessa.py b/cnab240/gera_remessa.py index 2d2a61a..fd3d69b 100644 --- a/cnab240/gera_remessa.py +++ b/cnab240/gera_remessa.py @@ -27,6 +27,7 @@ def __init__(self, path, agencia, conta): self.numero_sequencial = 0 self.layout = 83 self.densidade = 0 + self.lote = 1 self.tipo_reg = 1 self.tipo_operador = 'R' @@ -141,8 +142,54 @@ def gera_header_arquivo(self): def gera_header_lote(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_hearder = '{0:0>3}{1:0>4}{2}{3: >9}{4}{5:0>14}{6: >9}{7: >4}{8: >2}{9: >3}{10: >2}{11:0>5}{12}{13:0>12}{14}{15}{16: <30}{17: <30}{18: >10}{19}{20}{21}{22:0>6}{23:0>3}{24:0>5}{25: >20}{26: >20}' \ - '{27: >29}\n'.format(self.codigo_banco, self.lote_servico, self.tipo_registro, '', self.tipo_inscricao, self.numero_inscricao, '', '', '', '', '', self.agencia, self.agencia_dv, self.numero_conta, - self.conta_dv, self.dv, self.nome_empresa, self.nome_banco, '', self.codigo_remessa_retorno, data_now, hora_now, self.numero_sequencial, self.layout, self.densidade, '', '', '') - f.write(string_hearder) + string_hearder_lote = '{0:0>3}{1:0>4}{2}{3}{4:0>2}{5: >2}{6:0>3}{7}{8}{9:0>15}{10:0>9}{11:0>4}{12:0>2}{13:0>3}{14: >2}{15:0>5}{16}{17:0>12}{18}{19}{20: <30}{21: >40}{22: >40}{23:0>8}{24:0>8}{25:0>8}' \ + '{26: >33}\n'.format(self.codigo_banco, self.lote, self.tipo_reg, '', self.tipo_operador, self.tipo_servico, self.layout_lote, ' ', self.tipo_inscricao, self.numero_inscricao, self.numero_convenio, + self.cobranca_cedente, self.numero_carteira, self.variacao_carteira, '', self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, self.dv, self.nome_empresa, + self.mensagem1, self.mensagem2, self.numero_remessa_retorno, self.data_gravacao, self.data_cretido, '') + f.write(string_hearder_lote) + f.close() + + def gera_segmento_p(self): + f = open(os.path.join(self.path, self.nome_arquivo), 'a') + string_segmento_p = '{0:0>3}{1:0>4}{2}{3:0>5}{4}{5}{6:0>2}{7:0>5}{8}{9:0>12}{10}{11}{12: >20}{13}{14}{15}{16}{17}{18: >15}{19:0>8}{20:0>15}{21:0>5}{22}{23:0>2}{24}{25:0>8}' \ + '{26}{27:0>8}{28:0>15}{29}{30:0>8}{31:0>15}{32:0>15}{33:0>15}{34: >25}{35}{36:0>2}{37}{38: >3}{39:0>2}{40:0>10}' \ + '{41}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote, self.segmentoP, ' ', self.cod_movimento_remessa, self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, + self.dv, self.identificacao_titulo, self.codigo_carteira,self.forma_cadastro, self.tipo_doc, self.ident_emissor_boleto, self.ident_distribuicao, self.numero_doc_cobranca, self.data_vencimento, + '{:.2f}'.format(self.valor).replace('.', ''), self.agencia_cobranca, self.agencia_cobranca_dv, self.especie, self.aceita, self.data_emissao, self.codigo_juros_mora, self.data_juros_mora, + '{:.2f}'.format(self.valor_juros_mora).replace('.', ''), self.cod_desconto1, self.data_desconto1, '{:.2f}'.format(self.valor_desconto1).replace('.', ''), + '{:.2f}'.format(self.valor_IOF).replace('.', ''), '{:.2f}'.format(self.valor_abatimento).replace('.', ''), + self.identificacao_titulo_empresa, self.codigo_protesto, self.dias_protesto, self.codigo_baixa, self.dias_baixa, self.codigo_moeda, self.numero_contrato, ' ') + f.write(string_segmento_p) + f.close() + + def gera_segmento_q(self): + f = open(os.path.join(self.path, self.nome_arquivo), 'a') + string_segmento_q = '{0:0>3}{1:0>4}{2}{3:0>5}{4}{5}{6:0>2}{7}{8:0>15}{9: <40}{10: <40}{11: <15}{12:0>5}{13:0>3}{14: <15}{15: >2}{16}{17:0>15}{18: <40}{19:0>3}{20: >20}' \ + '{21: >8}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote+1, 'Q', ' ', self.cod_movimento_remessa, self.tipo_inscricaoQ, self.numero_inscricaoQ, self.nomeQ, self.enderecoQ, self.bairroQ, + self.cepQ, self.sufixo_cepQ, self.cidadeQ,self.ufQ, self.tipo_inscricao_sacador, self.numero_inscricao_sacador, self.nome_sacador, self.codigo_compensacao, '', '') + f.write(string_segmento_q) f.close() + + def gera_segmento_r(self): + f = open(os.path.join(self.path, self.nome_arquivo), 'a') + string_segmento_q = '{0:0>3}{1:0>4}{2}{3:0>5}{4}{5}{6:0>2}{7}{8:0>8}{9:0>15}{10}{11:0>8}{12:0>15}{13}{14:0>8}{15:0>15}{16: >10}{17: <40}{18: <40}{19: >20}{20:0>8}{21:0>3}{22:0>5}{23}{24:0>12}{25}{26}{27}' \ + '{28: >9}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote+2, 'R', ' ', self.cod_movimento_remessa, self.cod_desconto2, self.data_desconto2, + '{:.2f}'.format(self.valor_desconto2).replace('.', ''), self.cod_desconto3, self.data_desconto3, '{:.2f}'.format(self.valor_desconto3).replace('.', ''), self.cod_multa, self.data_multa, + '{:.2f}'.format(self.valor_multa).replace('.', ''), self.info_sacado, self.mensagem3, self.mensagem4, '', self.codigo_ocorrencia_sacado, self.cod_banco_debito, self.cod_agencia_debito, + self.cod_agencia_debito_dv, self.cod_conta_debito, self.cod_conta_debito_dv, self.dv_debito, self.aviso_debito, '') + f.write(string_segmento_q) + f.close() + + def gera_trailer_lote(self): + f = open(os.path.join(self.path, self.nome_arquivo), 'a') + string_segmento_q = '{0:0>3}{1:0>4}{2}{3: >9}{4:0>6}{5: >217}\n'.format(self.codigo_banco, self.lote, self.tipo_registro_TL, '', self.qtd_registro_lote, '') + f.write(string_segmento_q) + f.close() + + def gera_trailer_arquivo(self): + f = open(os.path.join(self.path, self.nome_arquivo), 'a') + string_segmento_q = '{0:0>3}{1:0>4}{2}{3: >9}{4:0>6}{5:0>6}{6:0>6}{7: >205}\n'.format(self.codigo_banco, 9999, 9, '', self.qtd_lote_arquivo, self.qtd_registro_arquivo, self.qtd_conta, '') + f.write(string_segmento_q) + f.close() + + From 9c5fd33d0599184990dcde35d6c99b66b3f5ce0d Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Thu, 26 Jan 2017 13:22:31 -0200 Subject: [PATCH 25/81] corrigido campos --- cnab240/gera_remessa.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/cnab240/gera_remessa.py b/cnab240/gera_remessa.py index fd3d69b..6fe6be2 100644 --- a/cnab240/gera_remessa.py +++ b/cnab240/gera_remessa.py @@ -34,25 +34,25 @@ def __init__(self, path, agencia, conta): self.tipo_servico = 1 self.layout_lote = 40 self.numero_convenio = None - self.cobranca_cedente = None + self.cobranca_cedente = 14 self.numero_carteira = None self.variacao_carteira = None self.mensagem1 = '' self.mensagem2 = '' self.numero_remessa_retorno = None - self.data_gravacao = None + self.data_gravacao = 0 self.data_cretido = 0 self.tipo_regP = 3 self.sequencial_lote = 1 self.segmentoP = 'P' - self.cod_movimento_remessa = None + self.cod_movimento_remessa = 1 self.identificacao_titulo = None - self.codigo_carteira = None - self.forma_cadastro = None - self.tipo_doc = None - self.ident_emissor_boleto = None - self.ident_distribuicao = None + self.codigo_carteira = 1 + self.forma_cadastro = 1 + self.tipo_doc = '1' + self.ident_emissor_boleto = 1 + self.ident_distribuicao = '1' self.numero_doc_cobranca = None self.data_vencimento = None self.valor = None @@ -72,9 +72,9 @@ def __init__(self, path, agencia, conta): self.identificacao_titulo_empresa = None self.codigo_protesto = 0 self.dias_protesto = 0 - self.codigo_baixa = None + self.codigo_baixa = 0 self.dias_baixa = 0 - self.codigo_moeda = 0 + self.codigo_moeda = 9 self.numero_contrato = 0 self.tipo_inscricaoQ = None @@ -84,11 +84,11 @@ def __init__(self, path, agencia, conta): self.bairroQ = None self.cepQ = None self.sufixo_cepQ = None - self.cidadeQ = None - self.ufQ = None - self.tipo_inscricao_sacador = None - self.numero_inscricao_sacador = None - self.nome_sacador = None + self.cidadeQ = '' + self.ufQ = '' + self.tipo_inscricao_sacador = 0 + self.numero_inscricao_sacador = 0 + self.nome_sacador = '' self.codigo_compensacao = 0 self.cod_desconto2 = 0 @@ -142,7 +142,7 @@ def gera_header_arquivo(self): def gera_header_lote(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_hearder_lote = '{0:0>3}{1:0>4}{2}{3}{4:0>2}{5: >2}{6:0>3}{7}{8}{9:0>15}{10:0>9}{11:0>4}{12:0>2}{13:0>3}{14: >2}{15:0>5}{16}{17:0>12}{18}{19}{20: <30}{21: >40}{22: >40}{23:0>8}{24:0>8}{25:0>8}' \ + string_hearder_lote = '{0:0>3}{1:0>4}{2}{3}{4:0>2}{5: >2}{6:0>3}{7}{8}{9:0>15}{10:0>9}{11:0>4}{12:0>2}{13:0>3}{14: >2}{15:0>5}{16}{17:0>12}{18}{19}{20: <30}{21: <40}{22: <40}{23:0>8}{24:0>8}{25:0>8}' \ '{26: >33}\n'.format(self.codigo_banco, self.lote, self.tipo_reg, '', self.tipo_operador, self.tipo_servico, self.layout_lote, ' ', self.tipo_inscricao, self.numero_inscricao, self.numero_convenio, self.cobranca_cedente, self.numero_carteira, self.variacao_carteira, '', self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, self.dv, self.nome_empresa, self.mensagem1, self.mensagem2, self.numero_remessa_retorno, self.data_gravacao, self.data_cretido, '') @@ -151,8 +151,8 @@ def gera_header_lote(self): def gera_segmento_p(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_p = '{0:0>3}{1:0>4}{2}{3:0>5}{4}{5}{6:0>2}{7:0>5}{8}{9:0>12}{10}{11}{12: >20}{13}{14}{15}{16}{17}{18: >15}{19:0>8}{20:0>15}{21:0>5}{22}{23:0>2}{24}{25:0>8}' \ - '{26}{27:0>8}{28:0>15}{29}{30:0>8}{31:0>15}{32:0>15}{33:0>15}{34: >25}{35}{36:0>2}{37}{38: >3}{39:0>2}{40:0>10}' \ + string_segmento_p = '{0:0>3}{1:0>4}{2}{3:0>5}{4}{5}{6:0>2}{7:0>5}{8}{9:0>12}{10}{11}{12: <20}{13}{14}{15}{16}{17}{18: >15}{19:0>8}{20:0>15}{21:0>5}{22}{23:0>2}{24}{25:0>8}' \ + '{26}{27:0>8}{28:0>15}{29}{30:0>8}{31:0>15}{32:0>15}{33:0>15}{34: <25}{35}{36:0>2}{37}{38: >3}{39:0>2}{40:0>10}' \ '{41}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote, self.segmentoP, ' ', self.cod_movimento_remessa, self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, self.dv, self.identificacao_titulo, self.codigo_carteira,self.forma_cadastro, self.tipo_doc, self.ident_emissor_boleto, self.ident_distribuicao, self.numero_doc_cobranca, self.data_vencimento, '{:.2f}'.format(self.valor).replace('.', ''), self.agencia_cobranca, self.agencia_cobranca_dv, self.especie, self.aceita, self.data_emissao, self.codigo_juros_mora, self.data_juros_mora, From c1cc0094d069c872c00ae00a5585239fd4d591ec Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Thu, 26 Jan 2017 16:21:06 -0200 Subject: [PATCH 26/81] corrigido campos com 1 caracter --- cnab240/gera_remessa.py | 105 ++++++++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 31 deletions(-) diff --git a/cnab240/gera_remessa.py b/cnab240/gera_remessa.py index 6fe6be2..29149a2 100644 --- a/cnab240/gera_remessa.py +++ b/cnab240/gera_remessa.py @@ -2,7 +2,7 @@ import os -from datetime import datetime +from datetime import datetime, timedelta class GeraCNAB240(): @@ -18,7 +18,7 @@ def __init__(self, path, agencia, conta): self.agencia_dv = 'X' self.numero_conta = conta self.conta_dv = 'X' - self.dv = '' + self.dv = ' ' self.nome_empresa = None self.nome_banco = 'BANCO DO BRASIL - S.A.' self.codigo_remessa_retorno = 1 @@ -37,8 +37,8 @@ def __init__(self, path, agencia, conta): self.cobranca_cedente = 14 self.numero_carteira = None self.variacao_carteira = None - self.mensagem1 = '' - self.mensagem2 = '' + self.mensagem1 = ' ' + self.mensagem2 = ' ' self.numero_remessa_retorno = None self.data_gravacao = 0 self.data_cretido = 0 @@ -57,7 +57,7 @@ def __init__(self, path, agencia, conta): self.data_vencimento = None self.valor = None self.agencia_cobranca = 0 - self.agencia_cobranca_dv = '' + self.agencia_cobranca_dv = ' ' self.especie = None self.aceita = 'N' self.data_emissao = None @@ -100,16 +100,16 @@ def __init__(self, path, agencia, conta): self.cod_multa = 0 self.data_multa = 0 self.valor_multa = 0 - self.info_sacado = '' - self.mensagem3 = '' - self.mensagem4 = '' + self.info_sacado = ' ' + self.mensagem3 = ' ' + self.mensagem4 = ' ' self.codigo_ocorrencia_sacado = 0 self.cod_banco_debito = 0 self.cod_agencia_debito = 0 - self.cod_agencia_debito_dv = '' + self.cod_agencia_debito_dv = ' ' self.cod_conta_debito = 0 - self.cod_conta_debito_dv = '' - self.dv_debito = '' + self.cod_conta_debito_dv = ' ' + self.dv_debito = ' ' self.aviso_debito = 0 self.tipo_registro_TL = 5 @@ -128,32 +128,32 @@ def sequencia(self, nome): return nome + '_{0}.rem'.format(seq) def gera_header_arquivo(self): - self.data_geracao = data_now = datetime.now().strftime('%d%m%y') + self.data_geracao = data_now = datetime.now().strftime('%d%m%Y') self.hora_geracao = hora_now = datetime.now().strftime('%H%M%S') nome = 'CNAB240_{0}_{1}_{2}'.format(self.agencia, self.numero_conta, data_now) nome = self.sequencia(nome) self.nome_arquivo = nome f = open(os.path.join(self.path, nome), 'w') - string_hearder = '{0:0>3}{1:0>4}{2}{3: >9}{4}{5:0>14}{6: >9}{7: >4}{8: >2}{9: >3}{10: >2}{11:0>5}{12}{13:0>12}{14}{15}{16: <30}{17: <30}{18: >10}{19}{20}{21}{22:0>6}{23:0>3}{24:0>5}{25: >20}{26: >20}' \ - '{27: >29}\n'.format(self.codigo_banco, self.lote_servico, self.tipo_registro, '', self.tipo_inscricao, self.numero_inscricao, '', '', '', '', '', self.agencia, self.agencia_dv, self.numero_conta, - self.conta_dv, self.dv, self.nome_empresa, self.nome_banco, '', self.codigo_remessa_retorno, data_now, hora_now, self.numero_sequencial, self.layout, self.densidade, '', '', '') + string_hearder = '{0:0>3}{1:0>4}{2:0>1}{3: >9}{4:0>1}{5:0>14}{6: >9}{7: >4}{8: >2}{9: >3}{10: >2}{11:0>5}{12: >1}{13:0>12}{14: >1}{15: >1}{16: <30}{17: <30}{18: >10}{19:0>1}{20:0>8}{21:0>6}{22:0>6}{23:0>3}{24:0>5}{25: >20}{26: >20}' \ + '{27: >29}\n'.format(self.codigo_banco, self.lote_servico, self.tipo_registro, ' ', self.tipo_inscricao, self.numero_inscricao, ' ', ' ', ' ', ' ', ' ', self.agencia, self.agencia_dv, self.numero_conta, + self.conta_dv, self.dv, self.nome_empresa, self.nome_banco, ' ', self.codigo_remessa_retorno, data_now, hora_now, self.numero_sequencial, self.layout, self.densidade, ' ', ' ', ' ') f.write(string_hearder) f.close() def gera_header_lote(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_hearder_lote = '{0:0>3}{1:0>4}{2}{3}{4:0>2}{5: >2}{6:0>3}{7}{8}{9:0>15}{10:0>9}{11:0>4}{12:0>2}{13:0>3}{14: >2}{15:0>5}{16}{17:0>12}{18}{19}{20: <30}{21: <40}{22: <40}{23:0>8}{24:0>8}{25:0>8}' \ - '{26: >33}\n'.format(self.codigo_banco, self.lote, self.tipo_reg, '', self.tipo_operador, self.tipo_servico, self.layout_lote, ' ', self.tipo_inscricao, self.numero_inscricao, self.numero_convenio, - self.cobranca_cedente, self.numero_carteira, self.variacao_carteira, '', self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, self.dv, self.nome_empresa, - self.mensagem1, self.mensagem2, self.numero_remessa_retorno, self.data_gravacao, self.data_cretido, '') + string_hearder_lote = '{0:0>3}{1:0>4}{2:0>1}{3: >1}{4:0>2}{5: >2}{6:0>3}{7: >1}{8:0>1}{9:0>15}{10:0>9}{11:0>4}{12:0>2}{13:0>3}{14: >2}{15:0>5}{16: >1}{17:0>12}{18: >1}{19: >1}{20: <30}{21: <40}{22: <40}{23:0>8}{24:0>8}{25:0>8}' \ + '{26: >33}\n'.format(self.codigo_banco, self.lote, self.tipo_reg, self.tipo_operador, self.tipo_servico, '', self.layout_lote, ' ', self.tipo_inscricao, self.numero_inscricao, self.numero_convenio, + self.cobranca_cedente, self.numero_carteira, self.variacao_carteira, ' ', self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, self.dv, self.nome_empresa, + self.mensagem1, self.mensagem2, self.numero_remessa_retorno, self.data_gravacao, self.data_cretido, ' ') f.write(string_hearder_lote) f.close() def gera_segmento_p(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_p = '{0:0>3}{1:0>4}{2}{3:0>5}{4}{5}{6:0>2}{7:0>5}{8}{9:0>12}{10}{11}{12: <20}{13}{14}{15}{16}{17}{18: >15}{19:0>8}{20:0>15}{21:0>5}{22}{23:0>2}{24}{25:0>8}' \ - '{26}{27:0>8}{28:0>15}{29}{30:0>8}{31:0>15}{32:0>15}{33:0>15}{34: <25}{35}{36:0>2}{37}{38: >3}{39:0>2}{40:0>10}' \ - '{41}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote, self.segmentoP, ' ', self.cod_movimento_remessa, self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, + string_segmento_p = '{0:0>3}{1:0>4}{2:0>1}{3:0>5}{4: >1}{5: >1}{6:0>2}{7:0>5}{8: >1}{9:0>12}{10: >1}{11: >1}{12: <20}{13:0>1}{14:0>1}{15: >1}{16:0>1}{17: >1}{18: <15}{19:0>8}{20:0>15}{21:0>5}{22: >1}{23:0>2}{24: >1}{25:0>8}' \ + '{26:0>1}{27:0>8}{28:0>15}{29:0>1}{30:0>8}{31:0>15}{32:0>15}{33:0>15}{34: <25}{35:0>1}{36:0>2}{37:0>1}{38: >3}{39:0>2}{40:0>10}' \ + '{41: >1}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote, self.segmentoP, ' ', self.cod_movimento_remessa, self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, self.dv, self.identificacao_titulo, self.codigo_carteira,self.forma_cadastro, self.tipo_doc, self.ident_emissor_boleto, self.ident_distribuicao, self.numero_doc_cobranca, self.data_vencimento, '{:.2f}'.format(self.valor).replace('.', ''), self.agencia_cobranca, self.agencia_cobranca_dv, self.especie, self.aceita, self.data_emissao, self.codigo_juros_mora, self.data_juros_mora, '{:.2f}'.format(self.valor_juros_mora).replace('.', ''), self.cod_desconto1, self.data_desconto1, '{:.2f}'.format(self.valor_desconto1).replace('.', ''), @@ -164,32 +164,75 @@ def gera_segmento_p(self): def gera_segmento_q(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_q = '{0:0>3}{1:0>4}{2}{3:0>5}{4}{5}{6:0>2}{7}{8:0>15}{9: <40}{10: <40}{11: <15}{12:0>5}{13:0>3}{14: <15}{15: >2}{16}{17:0>15}{18: <40}{19:0>3}{20: >20}' \ + string_segmento_q = '{0:0>3}{1:0>4}{2:0>1}{3:0>5}{4: >1}{5: >1}{6:0>2}{7:0>1}{8:0>15}{9: <40}{10: <40}{11: <15}{12:0>5}{13:0>3}{14: <15}{15: >2}{16:0>1}{17:0>15}{18: <40}{19:0>3}{20: >20}' \ '{21: >8}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote+1, 'Q', ' ', self.cod_movimento_remessa, self.tipo_inscricaoQ, self.numero_inscricaoQ, self.nomeQ, self.enderecoQ, self.bairroQ, - self.cepQ, self.sufixo_cepQ, self.cidadeQ,self.ufQ, self.tipo_inscricao_sacador, self.numero_inscricao_sacador, self.nome_sacador, self.codigo_compensacao, '', '') + self.cepQ, self.sufixo_cepQ, self.cidadeQ,self.ufQ, self.tipo_inscricao_sacador, self.numero_inscricao_sacador, self.nome_sacador, self.codigo_compensacao, ' ', ' ') f.write(string_segmento_q) f.close() def gera_segmento_r(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_q = '{0:0>3}{1:0>4}{2}{3:0>5}{4}{5}{6:0>2}{7}{8:0>8}{9:0>15}{10}{11:0>8}{12:0>15}{13}{14:0>8}{15:0>15}{16: >10}{17: <40}{18: <40}{19: >20}{20:0>8}{21:0>3}{22:0>5}{23}{24:0>12}{25}{26}{27}' \ + string_segmento_r = '{0:0>3}{1:0>4}{2:0>1}{3:0>5}{4: >1}{5: >1}{6:0>2}{7:0>1}{8:0>8}{9:0>15}{10:0>1}{11:0>8}{12:0>15}{13: >1}{14:0>8}{15:0>15}{16: >10}{17: <40}{18: <40}{19: >20}{20:0>8}{21:0>3}{22:0>5}{23: >1}{24:0>12}{25: >1}{26: >1}{27:0>1}' \ '{28: >9}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote+2, 'R', ' ', self.cod_movimento_remessa, self.cod_desconto2, self.data_desconto2, '{:.2f}'.format(self.valor_desconto2).replace('.', ''), self.cod_desconto3, self.data_desconto3, '{:.2f}'.format(self.valor_desconto3).replace('.', ''), self.cod_multa, self.data_multa, - '{:.2f}'.format(self.valor_multa).replace('.', ''), self.info_sacado, self.mensagem3, self.mensagem4, '', self.codigo_ocorrencia_sacado, self.cod_banco_debito, self.cod_agencia_debito, - self.cod_agencia_debito_dv, self.cod_conta_debito, self.cod_conta_debito_dv, self.dv_debito, self.aviso_debito, '') - f.write(string_segmento_q) + '{:.2f}'.format(self.valor_multa).replace('.', ''), self.info_sacado, self.mensagem3, self.mensagem4, ' ', self.codigo_ocorrencia_sacado, self.cod_banco_debito, self.cod_agencia_debito, + self.cod_agencia_debito_dv, self.cod_conta_debito, self.cod_conta_debito_dv, self.dv_debito, self.aviso_debito, ' ') + f.write(string_segmento_r) f.close() def gera_trailer_lote(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_q = '{0:0>3}{1:0>4}{2}{3: >9}{4:0>6}{5: >217}\n'.format(self.codigo_banco, self.lote, self.tipo_registro_TL, '', self.qtd_registro_lote, '') + string_segmento_q = '{0:0>3}{1:0>4}{2:0>1}{3: >9}{4:0>6}{5: >217}\n'.format(self.codigo_banco, self.lote, self.tipo_registro_TL, ' ', self.qtd_registro_lote, ' ') f.write(string_segmento_q) f.close() def gera_trailer_arquivo(self): f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_q = '{0:0>3}{1:0>4}{2}{3: >9}{4:0>6}{5:0>6}{6:0>6}{7: >205}\n'.format(self.codigo_banco, 9999, 9, '', self.qtd_lote_arquivo, self.qtd_registro_arquivo, self.qtd_conta, '') + string_segmento_q = '{0:0>3}{1:0>4}{2:0>1}{3: >9}{4:0>6}{5:0>6}{6:0>6}{7: >205}\n'.format(self.codigo_banco, 9999, 9, ' ', self.qtd_lote_arquivo, self.qtd_registro_arquivo, self.qtd_conta, ' ') f.write(string_segmento_q) f.close() - +teste_remessa = GeraCNAB240(os.getcwd(), 6958, 9904) + +teste_remessa.tipo_inscricao = 2 +teste_remessa.numero_inscricao = 19686471000123 +teste_remessa.agencia_dv = '2' +teste_remessa.nome_empresa = 'U.M. TECNOLOGIA LTDA EPP' +teste_remessa.layout = 80 + +teste_remessa.numero_convenio = 2751668 +teste_remessa.numero_carteira = 17 +teste_remessa.variacao_carteira = 19 +teste_remessa.numero_remessa_retorno = 1 +teste_remessa.data_gravacao = datetime.now().strftime('%d%m%Y') + +teste_remessa.identificacao_titulo = '{0}{1:0>10}'.format(teste_remessa.numero_convenio, 1) +teste_remessa.numero_doc_cobranca = '2' +teste_remessa.data_vencimento = (datetime.now() + timedelta(5)).strftime('%d%m%Y') +teste_remessa.valor = 1.0 +teste_remessa.especie = 18 +teste_remessa.data_emissao = datetime.now().strftime('%d%m%Y') +teste_remessa.identificacao_titulo_empresa = 10 + +teste_remessa.tipo_inscricaoQ = 1 +teste_remessa.numero_inscricaoQ = 36517608800 +teste_remessa.nomeQ = 'THIAGO GOMES FREITAS' +teste_remessa.enderecoQ = 'RUA TOTTONI, 212' +teste_remessa.bairroQ = 'JD ORIENTE' +teste_remessa.cepQ = 12236 +teste_remessa.sufixo_cepQ = 020 +teste_remessa.cidadeQ = 'SJC' +teste_remessa.ufQ = 'SP' + +teste_remessa.qtd_registro_lote = 5 + +teste_remessa.qtd_lote_arquivo = 1 +teste_remessa.qtd_registro_arquivo = 7 + +teste_remessa.gera_header_arquivo() +teste_remessa.gera_header_lote() +teste_remessa.gera_segmento_p() +teste_remessa.gera_segmento_q() +teste_remessa.gera_segmento_r() +teste_remessa.gera_trailer_lote() +teste_remessa.gera_trailer_arquivo() From 5e3d6d158bf1399d0b4e652a080635d77e9d6a61 Mon Sep 17 00:00:00 2001 From: Thiago Gomes Date: Thu, 26 Jan 2017 18:09:13 -0200 Subject: [PATCH 27/81] colocando comentario --- cnab240/gera_remessa.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cnab240/gera_remessa.py b/cnab240/gera_remessa.py index 29149a2..1cd6249 100644 --- a/cnab240/gera_remessa.py +++ b/cnab240/gera_remessa.py @@ -193,19 +193,19 @@ def gera_trailer_arquivo(self): f.close() teste_remessa = GeraCNAB240(os.getcwd(), 6958, 9904) - +# header_arquivo teste_remessa.tipo_inscricao = 2 teste_remessa.numero_inscricao = 19686471000123 teste_remessa.agencia_dv = '2' teste_remessa.nome_empresa = 'U.M. TECNOLOGIA LTDA EPP' teste_remessa.layout = 80 - +# header_lote teste_remessa.numero_convenio = 2751668 teste_remessa.numero_carteira = 17 teste_remessa.variacao_carteira = 19 teste_remessa.numero_remessa_retorno = 1 teste_remessa.data_gravacao = datetime.now().strftime('%d%m%Y') - +# segmento_p teste_remessa.identificacao_titulo = '{0}{1:0>10}'.format(teste_remessa.numero_convenio, 1) teste_remessa.numero_doc_cobranca = '2' teste_remessa.data_vencimento = (datetime.now() + timedelta(5)).strftime('%d%m%Y') @@ -213,7 +213,7 @@ def gera_trailer_arquivo(self): teste_remessa.especie = 18 teste_remessa.data_emissao = datetime.now().strftime('%d%m%Y') teste_remessa.identificacao_titulo_empresa = 10 - +# segmento_q teste_remessa.tipo_inscricaoQ = 1 teste_remessa.numero_inscricaoQ = 36517608800 teste_remessa.nomeQ = 'THIAGO GOMES FREITAS' @@ -223,9 +223,11 @@ def gera_trailer_arquivo(self): teste_remessa.sufixo_cepQ = 020 teste_remessa.cidadeQ = 'SJC' teste_remessa.ufQ = 'SP' +# segmento_r +# trailer_lote teste_remessa.qtd_registro_lote = 5 - +# trailer_arquivo teste_remessa.qtd_lote_arquivo = 1 teste_remessa.qtd_registro_arquivo = 7 From b74929c58d9a5c6879986dd2465ad1d023346d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Felipe=20Mil=C3=A9o?= Date: Thu, 22 Jun 2017 15:04:12 -0300 Subject: [PATCH 28/81] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b954d3c..1fd396a 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name='cnab240', - version='0.01', + version='0.02.1', author='Tracy Web Technologies', author_email='contato@tracy.com.br', url='https://github.com/TracyWebTech/cnab240', From df0568ca10bb0ca1434b57d65661fff85062cdb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Felipe=20Mil=C3=A9o?= Date: Thu, 22 Jun 2017 15:25:09 -0300 Subject: [PATCH 29/81] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1fd396a..e937b3d 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ package_data={ 'cnab240': ['bancos/*/*/*.json'] }, - zip_safe=False, + zip_safe=True, install_requires=[], provides=[ 'cnab240' From dff4a06d8ca1da3bccd9f6dc80f3c893a7a3989a Mon Sep 17 00:00:00 2001 From: Wagner Pereira Date: Tue, 4 Jul 2017 19:45:54 -0300 Subject: [PATCH 30/81] [ADD] Segmentos A, B e C para permitir Ordem de Pagamento --- .../specs/header_lote_pagamento.json | 206 ++++++++++++++++ .../bancodobrasil/specs/segmento_a.json | 221 ++++++++++++++++++ .../bancodobrasil/specs/segmento_b.json | 195 ++++++++++++++++ .../bancodobrasil/specs/segmento_c.json | 147 ++++++++++++ 4 files changed, 769 insertions(+) create mode 100644 cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json create mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_a.json create mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_b.json create mode 100644 cnab240/bancos/bancodobrasil/specs/segmento_c.json diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json b/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json new file mode 100644 index 0000000..a75da76 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json @@ -0,0 +1,206 @@ +{ + "nome": "HeaderLotePagamento", + "campos": { + "01.1": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.1": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.1": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 1 + }, + + "04.1": { + "nome": "servico_operacao", + "posicao_inicio": 9, + "posicao_fim": 9, + "formato": "alfa", + "default": "C" + }, + + "05.1": { + "nome": "servico_servico", + "posicao_inicio": 10, + "posicao_fim": 11, + "formato": "num" + }, + + "06.1": { + "nome": "servico_forma_lancamento", + "posicao_inicio": 12, + "posicao_fim": 13, + "formato": "num" + }, + + "07.1": { + "nome": "servico_layout", + "posicao_inicio": 14, + "posicao_fim": 16, + "formato": "num", + "default": 46 + }, + + "08.1": { + "nome": "vazio1", + "posicao_inicio": 17, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "09.1": { + "nome": "empresa_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "10.1": { + "nome": "empresa_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "num" + }, + + "11.1": { + "nome": "cedente_convenio", + "posicao_inicio": 33, + "posicao_fim": 52, + "formato": "alfa" + }, + + "12.1": { + "nome": "cedente_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num" + }, + + "13.1": { + "nome": "cedente_agencia_DV", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "alfa" + }, + + "14.1": { + "nome": "cedente_conta", + "posicao_inicio": 59, + "posicao_fim": 70, + "formato": "num" + }, + + "15.1": { + "nome": "cedente_conta_DV", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa" + }, + + "16.1": { + "nome": "cedente_DV", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "17.1": { + "nome": "cedente_nome", + "posicao_inicio": 73, + "posicao_fim": 102, + "formato": "alfa" + }, + + "18.1": { + "nome": "mensagem1", + "posicao_inicio": 103, + "posicao_fim": 142, + "formato": "alfa" + }, + + "19.1": { + "nome": "empresa_logradouro", + "posicao_inicio": 143, + "posicao_fim": 172, + "formato": "alfa" + }, + + "20.1": { + "nome": "empresa_endereco_numero", + "posicao_inicio": 173, + "posicao_fim": 177, + "formato": "num" + }, + + "21.1": { + "nome": "empresa_endereco_complemento", + "posicao_inicio": 178, + "posicao_fim": 192, + "formato": "alfa" + }, + + "22.1": { + "nome": "empresa_endereco_cidade", + "posicao_inicio": 193, + "posicao_fim": 212, + "formato": "alfa" + }, + + "23.1": { + "nome": "empresa_endereco_cep", + "posicao_inicio": 213, + "posicao_fim": 217, + "formato": "num" + }, + + "24.1": { + "nome": "empresa_endereco_cep_complemento", + "posicao_inicio": 218, + "posicao_fim": 220, + "formato": "alfa" + }, + + "25.1": { + "nome": "empresa_endereco_estado", + "posicao_inicio": 221, + "posicao_fim": 222, + "formato": "alfa" + }, + + "26.1": { + "nome": "indicativo_forma_pagamento", + "posicao_inicio": 223, + "posicao_fim": 224, + "formato": "num" + }, + + "27.1": { + "nome": "vazio1", + "posicao_inicio": 225, + "posicao_fim": 230, + "formato": "alfa", + "default": "" + }, + + "28.1": { + "nome": "ocorrencias", + "posicao_inicio": 231, + "posicao_fim": 240, + "formato": "alfa" + } + + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_a.json b/cnab240/bancos/bancodobrasil/specs/segmento_a.json new file mode 100644 index 0000000..3ecc771 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_a.json @@ -0,0 +1,221 @@ +{ + "nome": "SegmentoA", + "campos": { + "01.3A": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3A": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3A": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3A": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3A": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "A" + }, + + "06.3A": { + "nome": "servico_tipo_movimento", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "num" + }, + + "07.3A": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3A": { + "nome": "favorecido_camara", + "posicao_inicio": 18, + "posicao_fim": 20, + "formato": "num" + }, + + "09.3A": { + "nome": "favorecido_banco", + "posicao_inicio": 21, + "posicao_fim": 23, + "formato": "num" + }, + + "10.3A": { + "nome": "favorecido_agencia", + "posicao_inicio": 24, + "posicao_fim": 28, + "formato": "num" + }, + + "11.3A": { + "nome": "favorecido_agencia_dv", + "posicao_inicio": 29, + "posicao_fim": 29, + "formato": "alfa" + }, + + "12.3A": { + "nome": "favorecido_conta", + "posicao_inicio": 30, + "posicao_fim": 41, + "formato": "num" + }, + + "13.3A": { + "nome": "favorecido_conta_dv", + "posicao_inicio": 42, + "posicao_fim": 42, + "formato": "alfa" + }, + + "14.3A": { + "nome": "favorecido_dv", + "posicao_inicio": 43, + "posicao_fim": 43, + "formato": "alfa" + }, + + "15.3A": { + "nome": "favorecido_nome", + "posicao_inicio": 44, + "posicao_fim": 73, + "formato": "alfa" + }, + + "16.3A": { + "nome": "credito_seu_numero", + "posicao_inicio": 74, + "posicao_fim": 93, + "formato": "alfa" + }, + + "17.3A": { + "nome": "credito_data_pagamento", + "posicao_inicio": 94, + "posicao_fim": 101, + "formato": "num" + }, + + "18.3A": { + "nome": "credito_moeda_tipo", + "posicao_inicio": 102, + "posicao_fim": 104, + "formato": "alfa" + }, + + "19.3A": { + "nome": "credito_moeda_quantidade", + "posicao_inicio": 105, + "posicao_fim": 119, + "formato": "num", + "decimais": 5 + }, + + "20.3A": { + "nome": "credito_valor_pagamento", + "posicao_inicio": 120, + "posicao_fim": 134, + "formato": "num", + "decimais": 2 + }, + + "21.3A": { + "nome": "credito_nosso_numero", + "posicao_inicio": 135, + "posicao_fim": 154, + "formato": "alfa" + }, + + "22.3A": { + "nome": "credito_data_real", + "posicao_inicio": 155, + "posicao_fim": 162, + "formato": "num" + }, + + "23.3A": { + "nome": "credito_valor_real", + "posicao_inicio": 163, + "posicao_fim": 177, + "formato": "num", + "decimais": 2 + }, + + "24.3A": { + "nome": "outras_informacoes", + "posicao_inicio": 178, + "posicao_fim": 217, + "formato": "alfa" + }, + + "25.3A": { + "nome": "codigo_finalidade_doc", + "posicao_inicio": 218, + "posicao_fim": 219, + "formato": "alfa" + }, + + "26.3A": { + "nome": "codigo_finalidade_ted", + "posicao_inicio": 220, + "posicao_fim": 224, + "formato": "alfa" + }, + + "27.3A": { + "nome": "codigo_finalidade_complementar", + "posicao_inicio": 225, + "posicao_fim": 226, + "formato": "alfa" + }, + + "28.3A": { + "nome": "vazio1", + "posicao_inicio": 227, + "posicao_fim": 229, + "formato": "alfa", + "default": "" + }, + + "29.3A": { + "nome": "aviso_ao_favorecido", + "posicao_inicio": 230, + "posicao_fim": 230, + "formato": "num" + }, + + "30.3A": { + "nome": "ocorrencias", + "posicao_inicio": 231, + "posicao_fim": 240, + "formato": "alfa" + } + + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_b.json b/cnab240/bancos/bancodobrasil/specs/segmento_b.json new file mode 100644 index 0000000..3177c18 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_b.json @@ -0,0 +1,195 @@ +{ + "nome": "SegmentoB", + "campos": { + "01.3B": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3B": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3B": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3B": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3B": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "B" + }, + + "06.3B": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "07.3B": { + "nome": "favorecido_tipo_inscricao", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "08.3B": { + "nome": "favorecido_num_inscricao", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "num" + }, + + "09.3B": { + "nome": "favorecido_endereco_rua", + "posicao_inicio": 33, + "posicao_fim": 62, + "formato": "alfa" + }, + + "10.3B": { + "nome": "favorecido_endereco_num", + "posicao_inicio": 63, + "posicao_fim": 67, + "formato": "num" + }, + + "11.3B": { + "nome": "favorecido_endereco_complemento", + "posicao_inicio": 68, + "posicao_fim": 82, + "formato": "alfa" + }, + + "12.3B": { + "nome": "favorecido_endereco_bairro", + "posicao_inicio": 83, + "posicao_fim": 97, + "formato": "alfa" + }, + + "13.3B": { + "nome": "favorecido_endereco_cidade", + "posicao_inicio": 98, + "posicao_fim": 117, + "formato": "alfa" + }, + + "14.3B": { + "nome": "favorecido_cep", + "posicao_inicio": 118, + "posicao_fim": 122, + "formato": "num" + }, + + "15.3B": { + "nome": "favorecido_cep_complemento", + "posicao_inicio": 123, + "posicao_fim": 125, + "formato": "alfa" + }, + + "16.3B": { + "nome": "favorecido_estado", + "posicao_inicio": 126, + "posicao_fim": 127, + "formato": "alfa" + }, + + "17.3B": { + "nome": "pagamento_vencimento", + "posicao_inicio": 128, + "posicao_fim": 135, + "formato": "num" + }, + + "18.3B": { + "nome": "pagamento_valor_documento", + "posicao_inicio": 136, + "posicao_fim": 150, + "formato": "num", + "decimais": 2 + }, + + "19.3B": { + "nome": "pagamento_abatimento", + "posicao_inicio": 151, + "posicao_fim": 165, + "formato": "num", + "decimais": 2 + }, + + "20.3B": { + "nome": "pagamento_desconto", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2 + }, + + "21.3B": { + "nome": "pagamento_mora", + "posicao_inicio": 181, + "posicao_fim": 195, + "formato": "num", + "decimais": 2 + }, + + "22.3B": { + "nome": "pagamento_multa", + "posicao_inicio": 196, + "posicao_fim": 210, + "formato": "num", + "decimais": 2 + }, + + "23.3B": { + "nome": "cod_documento_favorecido", + "posicao_inicio": 211, + "posicao_fim": 225, + "formato": "alfa" + }, + + "24.3B": { + "nome": "aviso", + "posicao_inicio": 226, + "posicao_fim": 226, + "formato": "num" + }, + + "25.3B": { + "nome": "codigo_ug_centralizadora", + "posicao_inicio": 227, + "posicao_fim": 232, + "formato": "num" + }, + + "26.3": { + "nome": "codigo_ispb", + "posicao_inicio": 233, + "posicao_fim": 240, + "formato": "num" + } + + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_c.json b/cnab240/bancos/bancodobrasil/specs/segmento_c.json new file mode 100644 index 0000000..27550a7 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_c.json @@ -0,0 +1,147 @@ +{ + "nome": "SegmentoC", + "campos": { + "01.3C": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3C": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3C": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3C": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3C": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "C" + }, + + "06.3C": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "07.3C": { + "nome": "pagamento_valor_ir", + "posicao_inicio": 18, + "posicao_fim": 32, + "formato": "num", + "decimais": 2 + }, + + "08.3C": { + "nome": "pagamento_valor_iss", + "posicao_inicio": 33, + "posicao_fim": 47, + "formato": "num", + "decimais": 2 + }, + + "09.3C": { + "nome": "pagamento_valor_iof", + "posicao_inicio": 48, + "posicao_fim": 62, + "formato": "num", + "decimais": 2 + }, + + "10.3C": { + "nome": "pagamento_outras_deducoes", + "posicao_inicio": 63, + "posicao_fim": 77, + "formato": "num", + "decimais": 2 + }, + + "11.3C": { + "nome": "pagamento_outros_acrescimos", + "posicao_inicio": 78, + "posicao_fim": 92, + "formato": "num", + "decimais": 2 + }, + + "12.3C": { + "nome": "substituta_agencia", + "posicao_inicio": 93, + "posicao_fim": 97, + "formato": "num" + }, + + "13.3C": { + "nome": "substituta_agencia_dv", + "posicao_inicio": 98, + "posicao_fim": 98, + "formato": "alfa" + }, + + "14.3C": { + "nome": "substituta_conta", + "posicao_inicio": 99, + "posicao_fim": 110, + "formato": "num" + }, + + "15.3C": { + "nome": "substituta_conta_dv", + "posicao_inicio": 111, + "posicao_fim": 111, + "formato": "alfa" + }, + + "16.3C": { + "nome": "substituta_agencia_conta_dv", + "posicao_inicio": 112, + "posicao_fim": 112, + "formato": "alfa" + }, + + "17.3C": { + "nome": "valor_inss", + "posicao_inicio": 113, + "posicao_fim": 127, + "formato": "num", + "decimais": 2 + }, + + "18.3C": { + "nome": "numero_conta_pagamento_creditada", + "posicao_inicio": 128, + "posicao_fim": 147, + "formato": "num" + }, + + "19.3C": { + "nome": "vazio2", + "posicao_inicio": 148, + "posicao_fim": 240, + "formato": "alfa" + } + + } +} From f4fac83162179f9e22181f21efdd44f8b30ea329 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 7 Jul 2017 18:49:43 -0300 Subject: [PATCH 31/81] [REM] Removendo arquivo incorreto --- cnab240/gera_remessa.py | 240 ---------------------------------------- 1 file changed, 240 deletions(-) delete mode 100644 cnab240/gera_remessa.py diff --git a/cnab240/gera_remessa.py b/cnab240/gera_remessa.py deleted file mode 100644 index 1cd6249..0000000 --- a/cnab240/gera_remessa.py +++ /dev/null @@ -1,240 +0,0 @@ -# -*- encoding: utf-8 -*- - -import os - -from datetime import datetime, timedelta - -class GeraCNAB240(): - - def __init__(self, path, agencia, conta): - self.path = path - self.nome_arquivo = '' - self.codigo_banco = 1 - self.lote_servico = 0 - self.tipo_registro = 0 - self.tipo_inscricao = None - self.numero_inscricao = None - self.agencia = agencia - self.agencia_dv = 'X' - self.numero_conta = conta - self.conta_dv = 'X' - self.dv = ' ' - self.nome_empresa = None - self.nome_banco = 'BANCO DO BRASIL - S.A.' - self.codigo_remessa_retorno = 1 - self.data_geracao = None - self.hora_geracao = None - self.numero_sequencial = 0 - self.layout = 83 - self.densidade = 0 - - self.lote = 1 - self.tipo_reg = 1 - self.tipo_operador = 'R' - self.tipo_servico = 1 - self.layout_lote = 40 - self.numero_convenio = None - self.cobranca_cedente = 14 - self.numero_carteira = None - self.variacao_carteira = None - self.mensagem1 = ' ' - self.mensagem2 = ' ' - self.numero_remessa_retorno = None - self.data_gravacao = 0 - self.data_cretido = 0 - - self.tipo_regP = 3 - self.sequencial_lote = 1 - self.segmentoP = 'P' - self.cod_movimento_remessa = 1 - self.identificacao_titulo = None - self.codigo_carteira = 1 - self.forma_cadastro = 1 - self.tipo_doc = '1' - self.ident_emissor_boleto = 1 - self.ident_distribuicao = '1' - self.numero_doc_cobranca = None - self.data_vencimento = None - self.valor = None - self.agencia_cobranca = 0 - self.agencia_cobranca_dv = ' ' - self.especie = None - self.aceita = 'N' - self.data_emissao = None - self.codigo_juros_mora = 0 - self.data_juros_mora = 0 - self.valor_juros_mora = 0 - self.cod_desconto1 = 0 - self.data_desconto1 = 0 - self.valor_desconto1 = 0 - self.valor_IOF = 0 - self.valor_abatimento = 0 - self.identificacao_titulo_empresa = None - self.codigo_protesto = 0 - self.dias_protesto = 0 - self.codigo_baixa = 0 - self.dias_baixa = 0 - self.codigo_moeda = 9 - self.numero_contrato = 0 - - self.tipo_inscricaoQ = None - self.numero_inscricaoQ = None - self.nomeQ = None - self.enderecoQ = None - self.bairroQ = None - self.cepQ = None - self.sufixo_cepQ = None - self.cidadeQ = '' - self.ufQ = '' - self.tipo_inscricao_sacador = 0 - self.numero_inscricao_sacador = 0 - self.nome_sacador = '' - self.codigo_compensacao = 0 - - self.cod_desconto2 = 0 - self.data_desconto2 = 0 - self.valor_desconto2 = 0 - self.cod_desconto3 = 0 - self.data_desconto3 = 0 - self.valor_desconto3 = 0 - self.cod_multa = 0 - self.data_multa = 0 - self.valor_multa = 0 - self.info_sacado = ' ' - self.mensagem3 = ' ' - self.mensagem4 = ' ' - self.codigo_ocorrencia_sacado = 0 - self.cod_banco_debito = 0 - self.cod_agencia_debito = 0 - self.cod_agencia_debito_dv = ' ' - self.cod_conta_debito = 0 - self.cod_conta_debito_dv = ' ' - self.dv_debito = ' ' - self.aviso_debito = 0 - - self.tipo_registro_TL = 5 - self.qtd_registro_lote = None - - self.qtd_lote_arquivo = None - self.qtd_registro_arquivo = None - self.qtd_conta = 0 - - def sequencia(self, nome): - seq = 1 - lista = os.listdir(self.path) - for l in lista: - if l.startswith(nome): - seq += 1 - return nome + '_{0}.rem'.format(seq) - - def gera_header_arquivo(self): - self.data_geracao = data_now = datetime.now().strftime('%d%m%Y') - self.hora_geracao = hora_now = datetime.now().strftime('%H%M%S') - nome = 'CNAB240_{0}_{1}_{2}'.format(self.agencia, self.numero_conta, data_now) - nome = self.sequencia(nome) - self.nome_arquivo = nome - f = open(os.path.join(self.path, nome), 'w') - string_hearder = '{0:0>3}{1:0>4}{2:0>1}{3: >9}{4:0>1}{5:0>14}{6: >9}{7: >4}{8: >2}{9: >3}{10: >2}{11:0>5}{12: >1}{13:0>12}{14: >1}{15: >1}{16: <30}{17: <30}{18: >10}{19:0>1}{20:0>8}{21:0>6}{22:0>6}{23:0>3}{24:0>5}{25: >20}{26: >20}' \ - '{27: >29}\n'.format(self.codigo_banco, self.lote_servico, self.tipo_registro, ' ', self.tipo_inscricao, self.numero_inscricao, ' ', ' ', ' ', ' ', ' ', self.agencia, self.agencia_dv, self.numero_conta, - self.conta_dv, self.dv, self.nome_empresa, self.nome_banco, ' ', self.codigo_remessa_retorno, data_now, hora_now, self.numero_sequencial, self.layout, self.densidade, ' ', ' ', ' ') - f.write(string_hearder) - f.close() - - def gera_header_lote(self): - f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_hearder_lote = '{0:0>3}{1:0>4}{2:0>1}{3: >1}{4:0>2}{5: >2}{6:0>3}{7: >1}{8:0>1}{9:0>15}{10:0>9}{11:0>4}{12:0>2}{13:0>3}{14: >2}{15:0>5}{16: >1}{17:0>12}{18: >1}{19: >1}{20: <30}{21: <40}{22: <40}{23:0>8}{24:0>8}{25:0>8}' \ - '{26: >33}\n'.format(self.codigo_banco, self.lote, self.tipo_reg, self.tipo_operador, self.tipo_servico, '', self.layout_lote, ' ', self.tipo_inscricao, self.numero_inscricao, self.numero_convenio, - self.cobranca_cedente, self.numero_carteira, self.variacao_carteira, ' ', self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, self.dv, self.nome_empresa, - self.mensagem1, self.mensagem2, self.numero_remessa_retorno, self.data_gravacao, self.data_cretido, ' ') - f.write(string_hearder_lote) - f.close() - - def gera_segmento_p(self): - f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_p = '{0:0>3}{1:0>4}{2:0>1}{3:0>5}{4: >1}{5: >1}{6:0>2}{7:0>5}{8: >1}{9:0>12}{10: >1}{11: >1}{12: <20}{13:0>1}{14:0>1}{15: >1}{16:0>1}{17: >1}{18: <15}{19:0>8}{20:0>15}{21:0>5}{22: >1}{23:0>2}{24: >1}{25:0>8}' \ - '{26:0>1}{27:0>8}{28:0>15}{29:0>1}{30:0>8}{31:0>15}{32:0>15}{33:0>15}{34: <25}{35:0>1}{36:0>2}{37:0>1}{38: >3}{39:0>2}{40:0>10}' \ - '{41: >1}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote, self.segmentoP, ' ', self.cod_movimento_remessa, self.agencia, self.agencia_dv, self.numero_conta, self.conta_dv, - self.dv, self.identificacao_titulo, self.codigo_carteira,self.forma_cadastro, self.tipo_doc, self.ident_emissor_boleto, self.ident_distribuicao, self.numero_doc_cobranca, self.data_vencimento, - '{:.2f}'.format(self.valor).replace('.', ''), self.agencia_cobranca, self.agencia_cobranca_dv, self.especie, self.aceita, self.data_emissao, self.codigo_juros_mora, self.data_juros_mora, - '{:.2f}'.format(self.valor_juros_mora).replace('.', ''), self.cod_desconto1, self.data_desconto1, '{:.2f}'.format(self.valor_desconto1).replace('.', ''), - '{:.2f}'.format(self.valor_IOF).replace('.', ''), '{:.2f}'.format(self.valor_abatimento).replace('.', ''), - self.identificacao_titulo_empresa, self.codigo_protesto, self.dias_protesto, self.codigo_baixa, self.dias_baixa, self.codigo_moeda, self.numero_contrato, ' ') - f.write(string_segmento_p) - f.close() - - def gera_segmento_q(self): - f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_q = '{0:0>3}{1:0>4}{2:0>1}{3:0>5}{4: >1}{5: >1}{6:0>2}{7:0>1}{8:0>15}{9: <40}{10: <40}{11: <15}{12:0>5}{13:0>3}{14: <15}{15: >2}{16:0>1}{17:0>15}{18: <40}{19:0>3}{20: >20}' \ - '{21: >8}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote+1, 'Q', ' ', self.cod_movimento_remessa, self.tipo_inscricaoQ, self.numero_inscricaoQ, self.nomeQ, self.enderecoQ, self.bairroQ, - self.cepQ, self.sufixo_cepQ, self.cidadeQ,self.ufQ, self.tipo_inscricao_sacador, self.numero_inscricao_sacador, self.nome_sacador, self.codigo_compensacao, ' ', ' ') - f.write(string_segmento_q) - f.close() - - def gera_segmento_r(self): - f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_r = '{0:0>3}{1:0>4}{2:0>1}{3:0>5}{4: >1}{5: >1}{6:0>2}{7:0>1}{8:0>8}{9:0>15}{10:0>1}{11:0>8}{12:0>15}{13: >1}{14:0>8}{15:0>15}{16: >10}{17: <40}{18: <40}{19: >20}{20:0>8}{21:0>3}{22:0>5}{23: >1}{24:0>12}{25: >1}{26: >1}{27:0>1}' \ - '{28: >9}\n'.format(self.codigo_banco, self.lote, self.tipo_regP, self.sequencial_lote+2, 'R', ' ', self.cod_movimento_remessa, self.cod_desconto2, self.data_desconto2, - '{:.2f}'.format(self.valor_desconto2).replace('.', ''), self.cod_desconto3, self.data_desconto3, '{:.2f}'.format(self.valor_desconto3).replace('.', ''), self.cod_multa, self.data_multa, - '{:.2f}'.format(self.valor_multa).replace('.', ''), self.info_sacado, self.mensagem3, self.mensagem4, ' ', self.codigo_ocorrencia_sacado, self.cod_banco_debito, self.cod_agencia_debito, - self.cod_agencia_debito_dv, self.cod_conta_debito, self.cod_conta_debito_dv, self.dv_debito, self.aviso_debito, ' ') - f.write(string_segmento_r) - f.close() - - def gera_trailer_lote(self): - f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_q = '{0:0>3}{1:0>4}{2:0>1}{3: >9}{4:0>6}{5: >217}\n'.format(self.codigo_banco, self.lote, self.tipo_registro_TL, ' ', self.qtd_registro_lote, ' ') - f.write(string_segmento_q) - f.close() - - def gera_trailer_arquivo(self): - f = open(os.path.join(self.path, self.nome_arquivo), 'a') - string_segmento_q = '{0:0>3}{1:0>4}{2:0>1}{3: >9}{4:0>6}{5:0>6}{6:0>6}{7: >205}\n'.format(self.codigo_banco, 9999, 9, ' ', self.qtd_lote_arquivo, self.qtd_registro_arquivo, self.qtd_conta, ' ') - f.write(string_segmento_q) - f.close() - -teste_remessa = GeraCNAB240(os.getcwd(), 6958, 9904) -# header_arquivo -teste_remessa.tipo_inscricao = 2 -teste_remessa.numero_inscricao = 19686471000123 -teste_remessa.agencia_dv = '2' -teste_remessa.nome_empresa = 'U.M. TECNOLOGIA LTDA EPP' -teste_remessa.layout = 80 -# header_lote -teste_remessa.numero_convenio = 2751668 -teste_remessa.numero_carteira = 17 -teste_remessa.variacao_carteira = 19 -teste_remessa.numero_remessa_retorno = 1 -teste_remessa.data_gravacao = datetime.now().strftime('%d%m%Y') -# segmento_p -teste_remessa.identificacao_titulo = '{0}{1:0>10}'.format(teste_remessa.numero_convenio, 1) -teste_remessa.numero_doc_cobranca = '2' -teste_remessa.data_vencimento = (datetime.now() + timedelta(5)).strftime('%d%m%Y') -teste_remessa.valor = 1.0 -teste_remessa.especie = 18 -teste_remessa.data_emissao = datetime.now().strftime('%d%m%Y') -teste_remessa.identificacao_titulo_empresa = 10 -# segmento_q -teste_remessa.tipo_inscricaoQ = 1 -teste_remessa.numero_inscricaoQ = 36517608800 -teste_remessa.nomeQ = 'THIAGO GOMES FREITAS' -teste_remessa.enderecoQ = 'RUA TOTTONI, 212' -teste_remessa.bairroQ = 'JD ORIENTE' -teste_remessa.cepQ = 12236 -teste_remessa.sufixo_cepQ = 020 -teste_remessa.cidadeQ = 'SJC' -teste_remessa.ufQ = 'SP' -# segmento_r - -# trailer_lote -teste_remessa.qtd_registro_lote = 5 -# trailer_arquivo -teste_remessa.qtd_lote_arquivo = 1 -teste_remessa.qtd_registro_arquivo = 7 - -teste_remessa.gera_header_arquivo() -teste_remessa.gera_header_lote() -teste_remessa.gera_segmento_p() -teste_remessa.gera_segmento_q() -teste_remessa.gera_segmento_r() -teste_remessa.gera_trailer_lote() -teste_remessa.gera_trailer_arquivo() From 8f665e94173823e9b43ffa4a0cddee79714df95b Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 7 Jul 2017 19:28:04 -0300 Subject: [PATCH 32/81] [IMP] Lote de pagamento --- .../bancodobrasil/specs/header_arquivo.json | 17 ++-- .../specs/header_lote_cobranca.json | 4 +- .../specs/header_lote_pagamento.json | 8 +- .../bancodobrasil/specs/segmento_a.json | 5 +- .../bancodobrasil/specs/segmento_b.json | 6 +- .../bancodobrasil/specs/segmento_p.json | 2 +- .../specs/trailer_lote_pagamento.json | 81 +++++++++++++++++++ 7 files changed, 101 insertions(+), 22 deletions(-) create mode 100644 cnab240/bancos/bancodobrasil/specs/trailer_lote_pagamento.json diff --git a/cnab240/bancos/bancodobrasil/specs/header_arquivo.json b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json index 4945346..57e353a 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_arquivo.json +++ b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json @@ -56,46 +56,46 @@ }, "08.0": { - "nome": "cedente_conta_agencia_codigo", + "nome": "cedente_agencia", "posicao_inicio": 53, "posicao_fim": 57, "formato": "num" }, "09.0": { - "nome": "cedente_conta_agencia_DV", + "nome": "cedente_agencia_dv", "posicao_inicio": 58, "posicao_fim": 58, "formato": "alfa" }, "10.0": { - "nome": "cedente_conta_conta_numero", + "nome": "cedente_conta", "posicao_inicio": 59, "posicao_fim": 70, "formato": "num" }, "11.0": { - "nome": "cedente_conta_conta_DV", + "nome": "cedente_conta_dv", "posicao_inicio": 71, "posicao_fim": 71, "formato": "alfa" }, "12.0": { - "nome": "cedente_conta_DV", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 72, "posicao_fim": 72, "formato": "alfa" }, "13.0": { - "nome": "cedente_nome_da_empresa", + "nome": "cedente_nome", "posicao_inicio": 73, "posicao_fim": 102, "formato": "alfa", - "default": "BANCO SANTANDER" + "default": "" }, "14.0": { @@ -118,8 +118,7 @@ "nome": "arquivo_codigo", "posicao_inicio": 143, "posicao_fim": 143, - "formato": "num", - "default": 1 + "formato": "alfa" }, "17.0": { diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json index 2f35442..8de8077 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json @@ -135,14 +135,14 @@ }, "15.1": { - "nome": "cedente_conta_DV", + "nome": "cedente_conta_dv", "posicao_inicio": 72, "posicao_fim": 72, "formato": "alfa" }, "16.1": { - "nome": "cedente_DV", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 73, "posicao_fim": 73, "formato": "alfa" diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json b/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json index a75da76..1d2b075 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json @@ -90,7 +90,7 @@ }, "13.1": { - "nome": "cedente_agencia_DV", + "nome": "cedente_agencia_dv", "posicao_inicio": 58, "posicao_fim": 58, "formato": "alfa" @@ -104,14 +104,14 @@ }, "15.1": { - "nome": "cedente_conta_DV", + "nome": "cedente_conta_dv", "posicao_inicio": 71, "posicao_fim": 71, "formato": "alfa" }, "16.1": { - "nome": "cedente_DV", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 72, "posicao_fim": 72, "formato": "alfa" @@ -184,7 +184,7 @@ "nome": "indicativo_forma_pagamento", "posicao_inicio": 223, "posicao_fim": 224, - "formato": "num" + "formato": "alfa" }, "27.1": { diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_a.json b/cnab240/bancos/bancodobrasil/specs/segmento_a.json index 3ecc771..7b16e43 100644 --- a/cnab240/bancos/bancodobrasil/specs/segmento_a.json +++ b/cnab240/bancos/bancodobrasil/specs/segmento_a.json @@ -156,15 +156,14 @@ "nome": "credito_data_real", "posicao_inicio": 155, "posicao_fim": 162, - "formato": "num" + "formato": "alfa" }, "23.3A": { "nome": "credito_valor_real", "posicao_inicio": 163, "posicao_fim": 177, - "formato": "num", - "decimais": 2 + "formato": "alfa" }, "24.3A": { diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_b.json b/cnab240/bancos/bancodobrasil/specs/segmento_b.json index 3177c18..db90de7 100644 --- a/cnab240/bancos/bancodobrasil/specs/segmento_b.json +++ b/cnab240/bancos/bancodobrasil/specs/segmento_b.json @@ -174,21 +174,21 @@ "nome": "aviso", "posicao_inicio": 226, "posicao_fim": 226, - "formato": "num" + "formato": "alfa" }, "25.3B": { "nome": "codigo_ug_centralizadora", "posicao_inicio": 227, "posicao_fim": 232, - "formato": "num" + "formato": "alfa" }, "26.3": { "nome": "codigo_ispb", "posicao_inicio": 233, "posicao_fim": 240, - "formato": "num" + "formato": "alfa" } } diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_p.json b/cnab240/bancos/bancodobrasil/specs/segmento_p.json index d163856..d74fa37 100644 --- a/cnab240/bancos/bancodobrasil/specs/segmento_p.json +++ b/cnab240/bancos/bancodobrasil/specs/segmento_p.json @@ -83,7 +83,7 @@ }, "12.3P": { - "nome": "cedente_dv", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 37, "posicao_fim": 37, "formato": "alfa", diff --git a/cnab240/bancos/bancodobrasil/specs/trailer_lote_pagamento.json b/cnab240/bancos/bancodobrasil/specs/trailer_lote_pagamento.json new file mode 100644 index 0000000..b52b329 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/trailer_lote_pagamento.json @@ -0,0 +1,81 @@ +{ + "nome": "TrailerLotePagamento", + "campos": { + "01.5": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 1 + }, + + "02.5": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.5": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 5 + }, + + "04.5": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.5": { + "nome": "quantidade_registros", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num", + "default": 0 + }, + + "06.5": { + "nome": "somatoria_valores", + "posicao_inicio": 24, + "posicao_fim": 41, + "formato": "num", + "decimais": 2 + }, + + "07.5": { + "nome": "somatoria_quantidade_moedas", + "posicao_inicio": 42, + "posicao_fim": 59, + "formato": "num", + "decimais": 5 + }, + + "08.5": { + "nome": "numero_aviso_debito", + "posicao_inicio": 60, + "posicao_fim": 65, + "formato": "alfa" + }, + + "09.5": { + "nome": "vazio2", + "posicao_inicio": 66, + "posicao_fim": 230, + "formato": "alfa" + }, + + "10.5": { + "nome": "codigo_ocorrencias", + "posicao_inicio": 231, + "posicao_fim": 240, + "formato": "alfa" + } + } +} From 06fb61826cf3330cb4fad54fc41f642fd8bf866c Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 7 Jul 2017 19:29:44 -0300 Subject: [PATCH 33/81] [REM] Removendo arquivo em branco --- cnab240/teste.py | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 cnab240/teste.py diff --git a/cnab240/teste.py b/cnab240/teste.py deleted file mode 100644 index a742e8e..0000000 --- a/cnab240/teste.py +++ /dev/null @@ -1,2 +0,0 @@ -# -*- encoding: utf-8 -*- - From 4d04eba75d866e75503c840dae39ab8ee73c4f26 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 7 Jul 2017 19:30:57 -0300 Subject: [PATCH 34/81] [REF] PEP8 --- cnab240/bancos/__init__.py | 2 +- cnab240/bancos/bancodobrasil/specs/spec_to_doc.py | 13 ++++++------- cnab240/bancos/cef/specs/spec_to_doc.py | 13 ++++++------- cnab240/bancos/itau/specs/spec_to_doc.py | 13 ++++++------- cnab240/bancos/santander/specs/spec_to_doc.py | 13 ++++++------- cnab240/errors.py | 1 + cnab240/eventos/cobranca.py | 8 ++++---- cnab240/lotes/cobranca.py | 2 +- cnab240/registro.py | 10 ++++++---- cnab240/tipos.py | 13 +++++++------ 10 files changed, 44 insertions(+), 44 deletions(-) diff --git a/cnab240/bancos/__init__.py b/cnab240/bancos/__init__.py index c9ded5a..7806449 100644 --- a/cnab240/bancos/__init__.py +++ b/cnab240/bancos/__init__.py @@ -6,7 +6,7 @@ cwd = os.path.abspath(os.path.dirname(__file__)) nome_bancos = (fname for fname in os.listdir(cwd) - if os.path.isdir(os.path.join(cwd, fname))) + if os.path.isdir(os.path.join(cwd, fname))) for nome_banco in nome_bancos: banco_module = importlib.import_module('.'.join((__package__, nome_banco))) diff --git a/cnab240/bancos/bancodobrasil/specs/spec_to_doc.py b/cnab240/bancos/bancodobrasil/specs/spec_to_doc.py index 74519b6..6c4becc 100644 --- a/cnab240/bancos/bancodobrasil/specs/spec_to_doc.py +++ b/cnab240/bancos/bancodobrasil/specs/spec_to_doc.py @@ -14,15 +14,14 @@ campo_nome = campo.get('nome') campo_formato = campo.get('formato') campo_decimais = campo.get('decimais') - + if campo_decimais: tipo = 'Decimal ({0} digitos)'.format(campo_decimais) - elif campo_formato == 'alfa': + elif campo_formato == 'alfa': tipo = 'str' else: tipo = 'int' - - print (' '* 8) + ':param {0}:'.format(campo_nome) - print (' '* 8) + ':type {0}: {1}'.format(campo_nome, tipo) - print - + + print (' ' * 8) + ':param {0}:'.format(campo_nome) + print (' ' * 8) + ':type {0}: {1}'.format(campo_nome, tipo) + print diff --git a/cnab240/bancos/cef/specs/spec_to_doc.py b/cnab240/bancos/cef/specs/spec_to_doc.py index 74519b6..6c4becc 100644 --- a/cnab240/bancos/cef/specs/spec_to_doc.py +++ b/cnab240/bancos/cef/specs/spec_to_doc.py @@ -14,15 +14,14 @@ campo_nome = campo.get('nome') campo_formato = campo.get('formato') campo_decimais = campo.get('decimais') - + if campo_decimais: tipo = 'Decimal ({0} digitos)'.format(campo_decimais) - elif campo_formato == 'alfa': + elif campo_formato == 'alfa': tipo = 'str' else: tipo = 'int' - - print (' '* 8) + ':param {0}:'.format(campo_nome) - print (' '* 8) + ':type {0}: {1}'.format(campo_nome, tipo) - print - + + print (' ' * 8) + ':param {0}:'.format(campo_nome) + print (' ' * 8) + ':type {0}: {1}'.format(campo_nome, tipo) + print diff --git a/cnab240/bancos/itau/specs/spec_to_doc.py b/cnab240/bancos/itau/specs/spec_to_doc.py index 74519b6..6c4becc 100644 --- a/cnab240/bancos/itau/specs/spec_to_doc.py +++ b/cnab240/bancos/itau/specs/spec_to_doc.py @@ -14,15 +14,14 @@ campo_nome = campo.get('nome') campo_formato = campo.get('formato') campo_decimais = campo.get('decimais') - + if campo_decimais: tipo = 'Decimal ({0} digitos)'.format(campo_decimais) - elif campo_formato == 'alfa': + elif campo_formato == 'alfa': tipo = 'str' else: tipo = 'int' - - print (' '* 8) + ':param {0}:'.format(campo_nome) - print (' '* 8) + ':type {0}: {1}'.format(campo_nome, tipo) - print - + + print (' ' * 8) + ':param {0}:'.format(campo_nome) + print (' ' * 8) + ':type {0}: {1}'.format(campo_nome, tipo) + print diff --git a/cnab240/bancos/santander/specs/spec_to_doc.py b/cnab240/bancos/santander/specs/spec_to_doc.py index 74519b6..6c4becc 100644 --- a/cnab240/bancos/santander/specs/spec_to_doc.py +++ b/cnab240/bancos/santander/specs/spec_to_doc.py @@ -14,15 +14,14 @@ campo_nome = campo.get('nome') campo_formato = campo.get('formato') campo_decimais = campo.get('decimais') - + if campo_decimais: tipo = 'Decimal ({0} digitos)'.format(campo_decimais) - elif campo_formato == 'alfa': + elif campo_formato == 'alfa': tipo = 'str' else: tipo = 'int' - - print (' '* 8) + ':param {0}:'.format(campo_nome) - print (' '* 8) + ':type {0}: {1}'.format(campo_nome, tipo) - print - + + print (' ' * 8) + ':param {0}:'.format(campo_nome) + print (' ' * 8) + ':type {0}: {1}'.format(campo_nome, tipo) + print diff --git a/cnab240/errors.py b/cnab240/errors.py index 329b585..ea414ce 100644 --- a/cnab240/errors.py +++ b/cnab240/errors.py @@ -34,6 +34,7 @@ def __str__(self): repr(self.valor), ) + class NumDigitosExcedidoError(AtribuicaoCampoError): """Tentativa de atribuicao de valor mais longo que o campo suportaia""" diff --git a/cnab240/eventos/cobranca.py b/cnab240/eventos/cobranca.py index b988482..0832b68 100644 --- a/cnab240/eventos/cobranca.py +++ b/cnab240/eventos/cobranca.py @@ -3,17 +3,17 @@ class EventoInclusao(EventoBase): + def __init__(self, banco, **kwargs): super(EventoInclusao, self).__init__(banco, 1) args = self.clean_kwargs(kwargs) - + seg_p = self.banco.registros.SegmentoP(**args) self.adicionar_segmento(seg_p) - + seg_q = self.banco.registros.SegmentoQ(**args) self.adicionar_segmento(seg_q) seg_r = self.banco.registros.SegmentoR(**args) - if seg_r.necessario(): + if seg_r.necessario(): self.adicionar_segmento(seg_r) - diff --git a/cnab240/lotes/cobranca.py b/cnab240/lotes/cobranca.py index 5cabc8d..b826392 100644 --- a/cnab240/lotes/cobranca.py +++ b/cnab240/lotes/cobranca.py @@ -1,7 +1,7 @@ from cnab240.tipos import LoteBase + class LoteCobranca(LoteBase): HeaderCls = LoteCobranca.banco.registros.HeaderLoteCobranca TrailerCls = LoteCobranca.banco.registros.TrailerLoteCobranca - diff --git a/cnab240/registro.py b/cnab240/registro.py index 408fc30..89d0825 100644 --- a/cnab240/registro.py +++ b/cnab240/registro.py @@ -14,6 +14,7 @@ class CampoBase(object): + def __init__(self): self._valor = None @@ -24,7 +25,7 @@ def valor(self): @valor.setter def valor(self, valor): if self.formato == 'alfa': - #if not isinstance(valor, unicode): + # if not isinstance(valor, unicode): if not isinstance(valor, basestring): print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) @@ -35,7 +36,6 @@ def valor(self, valor): cortar = len(valor) - self.digitos valor = valor[:-(cortar)] - elif self.decimais: if not isinstance(valor, Decimal): print "{0} - {1}".format(self.nome, self.valor) @@ -81,7 +81,7 @@ def __unicode__(self): if self.formato == 'alfa' or self.decimais: if self.decimais: - # if self.formato == 'num': + # if self.formato == 'num': valor = unicode(self.valor).replace('.', '') chars_faltantes = self.digitos - len(valor) return (u'0' * chars_faltantes) + valor @@ -139,7 +139,8 @@ def __init__(self, **kwargs): def necessario(self): for campo in self._campos.values(): - eh_controle = campo.nome.startswith('controle_') or campo.nome.startswith('servico_') + eh_controle = campo.nome.startswith( + 'controle_') or campo.nome.startswith('servico_') if not eh_controle and campo.valor != None: return True @@ -187,6 +188,7 @@ def __unicode__(self): class Registros(object): + def __init__(self, specs_dirpath): # TODO: Validar spec: nome (deve ser unico para cada registro), # posicao_inicio, posicao_fim, formato (alpha), decimais (0), diff --git a/cnab240/tipos.py b/cnab240/tipos.py index 58b82dc..ee8416a 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos.py @@ -147,7 +147,8 @@ def __init__(self, banco, **kwargs): if self.header.arquivo_hora_de_geracao is None: if now is None: now = datetime.now() - self.header.arquivo_hora_de_geracao = int(now.strftime("%H%M%S")) + self.header.arquivo_hora_de_geracao = int( + now.strftime("%H%M%S")) except AttributeError: pass @@ -205,7 +206,7 @@ def carregar_retorno(self, arquivo): def lotes(self): return self._lotes - #def incluir_cobranca(self, **kwargs): + # def incluir_cobranca(self, **kwargs): def incluir_cobranca(self, header, **kwargs): # 1 eh o codigo de cobranca #import pudb;pu.db @@ -231,22 +232,22 @@ def incluir_cobranca(self, header, **kwargs): trailer = self.banco.registros.TrailerLoteCobranca() lote_cobranca = Lote(self.banco, header, trailer) - #Para conseguir inserir todos os eventos de cobrança em um unico lote precisa informar o código do serviço + # Para conseguir inserir todos os eventos de cobrança em um unico + # lote precisa informar o código do serviço lote_cobranca.header.servico_servico = codigo_evento self.adicionar_lote(lote_cobranca) - #if header.controlecob_numero is None: + # if header.controlecob_numero is None: if "controlecob_numero" not in dir(header) or header.controlecob_numero is None: header.controlecob_numero = int('{0}{1:02}'.format( self.header.arquivo_sequencia, lote_cobranca.codigo)) - #if header.controlecob_data_gravacao is None: + # if header.controlecob_data_gravacao is None: if "controlecob_data_gravacao" not in dir(header) or header.controlecob_data_gravacao is None: header.controlecob_data_gravacao = self.header.arquivo_data_de_geracao - lote_cobranca.adicionar_evento(evento) # Incrementar numero de registros no trailer do arquivo self.trailer.totais_quantidade_registros += len(evento) From 97eac6196c0deadb6d410b20de6a73e4ff96661f Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Fri, 7 Jul 2017 21:01:43 -0300 Subject: [PATCH 35/81] [REF] Padronizando campo conforme dados de outros bancos --- .../bancos/bancodobrasil/specs/header_arquivo.json | 2 +- .../bancodobrasil/specs/header_lote_cobranca.json | 2 +- .../bancodobrasil/specs/header_lote_pagamento.json | 2 +- cnab240/bancos/bancodobrasil/specs/segmento_p.json | 2 +- cnab240/bancos/itau/specs/segmento_p.json | 2 +- cnab240/bancos/itau/specs/spec_to_doc.py | 13 +++++++------ 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/cnab240/bancos/bancodobrasil/specs/header_arquivo.json b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json index 57e353a..6287f4f 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_arquivo.json +++ b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json @@ -84,7 +84,7 @@ }, "12.0": { - "nome": "cedente_dv_ag_cc", + "nome": "cedente_agencia_conta_dv", "posicao_inicio": 72, "posicao_fim": 72, "formato": "alfa" diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json index 8de8077..55246a0 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json @@ -142,7 +142,7 @@ }, "16.1": { - "nome": "cedente_dv_ag_cc", + "nome": "cedente_agencia_conta_dv", "posicao_inicio": 73, "posicao_fim": 73, "formato": "alfa" diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json b/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json index 1d2b075..c182de1 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_pagamento.json @@ -111,7 +111,7 @@ }, "16.1": { - "nome": "cedente_dv_ag_cc", + "nome": "cedente_agencia_conta_dv", "posicao_inicio": 72, "posicao_fim": 72, "formato": "alfa" diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_p.json b/cnab240/bancos/bancodobrasil/specs/segmento_p.json index d74fa37..fcdc20e 100644 --- a/cnab240/bancos/bancodobrasil/specs/segmento_p.json +++ b/cnab240/bancos/bancodobrasil/specs/segmento_p.json @@ -83,7 +83,7 @@ }, "12.3P": { - "nome": "cedente_dv_ag_cc", + "nome": "cedente_agencia_conta_dv", "posicao_inicio": 37, "posicao_fim": 37, "formato": "alfa", diff --git a/cnab240/bancos/itau/specs/segmento_p.json b/cnab240/bancos/itau/specs/segmento_p.json index 512829e..6cc0106 100644 --- a/cnab240/bancos/itau/specs/segmento_p.json +++ b/cnab240/bancos/itau/specs/segmento_p.json @@ -101,7 +101,7 @@ }, "14.3P": { - "nome": "cedente_dv_ag_cc", + "nome": "cedente_agencia_conta_dv", "posicao_inicio": 37, "posicao_fim": 37, "formato": "num" diff --git a/cnab240/bancos/itau/specs/spec_to_doc.py b/cnab240/bancos/itau/specs/spec_to_doc.py index 6c4becc..74519b6 100644 --- a/cnab240/bancos/itau/specs/spec_to_doc.py +++ b/cnab240/bancos/itau/specs/spec_to_doc.py @@ -14,14 +14,15 @@ campo_nome = campo.get('nome') campo_formato = campo.get('formato') campo_decimais = campo.get('decimais') - + if campo_decimais: tipo = 'Decimal ({0} digitos)'.format(campo_decimais) - elif campo_formato == 'alfa': + elif campo_formato == 'alfa': tipo = 'str' else: tipo = 'int' - - print (' ' * 8) + ':param {0}:'.format(campo_nome) - print (' ' * 8) + ':type {0}: {1}'.format(campo_nome, tipo) - print + + print (' '* 8) + ':param {0}:'.format(campo_nome) + print (' '* 8) + ':type {0}: {1}'.format(campo_nome, tipo) + print + From 3568a7ebce535a2f87f8e56ab233461898bbfc5e Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:48:09 -0300 Subject: [PATCH 36/81] =?UTF-8?q?[FIX]=20Corre=C3=A7=C3=B5es=20arquivo=20j?= =?UTF-8?q?son=20BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/bancos/bancodobrasil/specs/header_arquivo.json | 3 ++- cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cnab240/bancos/bancodobrasil/specs/header_arquivo.json b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json index 6287f4f..a3ca864 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_arquivo.json +++ b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json @@ -118,7 +118,8 @@ "nome": "arquivo_codigo", "posicao_inicio": 143, "posicao_fim": 143, - "formato": "alfa" + "formato": "alfa", + "default": "" }, "17.0": { diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json index 55246a0..62c97c0 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json @@ -5,8 +5,7 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num", - "default": 1 + "formato": "num" }, "02.1": { From d7b94469d0cfa40084ed6be083a35582a660a50b Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:48:41 -0300 Subject: [PATCH 37/81] [IMP] Specs to doc ITAU --- cnab240/bancos/itau/specs/spec_to_doc.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/cnab240/bancos/itau/specs/spec_to_doc.py b/cnab240/bancos/itau/specs/spec_to_doc.py index 74519b6..6c4becc 100644 --- a/cnab240/bancos/itau/specs/spec_to_doc.py +++ b/cnab240/bancos/itau/specs/spec_to_doc.py @@ -14,15 +14,14 @@ campo_nome = campo.get('nome') campo_formato = campo.get('formato') campo_decimais = campo.get('decimais') - + if campo_decimais: tipo = 'Decimal ({0} digitos)'.format(campo_decimais) - elif campo_formato == 'alfa': + elif campo_formato == 'alfa': tipo = 'str' else: tipo = 'int' - - print (' '* 8) + ':param {0}:'.format(campo_nome) - print (' '* 8) + ':type {0}: {1}'.format(campo_nome, tipo) - print - + + print (' ' * 8) + ':param {0}:'.format(campo_nome) + print (' ' * 8) + ':type {0}: {1}'.format(campo_nome, tipo) + print From 53bd8515aa580480bf053b100baf63e1f741829c Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:49:12 -0300 Subject: [PATCH 38/81] [REF] Clean code --- cnab240/errors.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/cnab240/errors.py b/cnab240/errors.py index ea414ce..c03cc02 100644 --- a/cnab240/errors.py +++ b/cnab240/errors.py @@ -11,7 +11,6 @@ class AtribuicaoCampoError(Cnab240Error): def __init__(self, campo, valor): self.campo = campo self.valor = valor - #super(AtribuicaoCampoError, self).__init__(self) super(AtribuicaoCampoError, self).__init__() def __unicode__(self): @@ -52,7 +51,6 @@ class FaltandoArgsError(Cnab240Error): def __init__(self, args_faltantes): self.args_faltantes = args_faltantes - #super(FaltandoArgsError, self).__init__(self) super(FaltandoArgsError, self).__init__() def __unicode__(self): From 673a6e0dc809a402990d165f54c9fdfd3555619f Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:53:19 -0300 Subject: [PATCH 39/81] [REF] Flake 8 tests --- tests/data.py | 24 ++++++----- tests/test_arquivo.py | 10 ++--- tests/test_evento.py | 13 +++--- tests/test_lote.py | 29 +++++++------- tests/test_registro.py | 91 +++++++++++++++++++++--------------------- 5 files changed, 85 insertions(+), 82 deletions(-) diff --git a/tests/data.py b/tests/data.py index 68aa632..bcb9195 100644 --- a/tests/data.py +++ b/tests/data.py @@ -8,10 +8,11 @@ TESTS_DIRPATH = os.path.abspath(os.path.dirname(__file__)) ARQS_DIRPATH = os.path.join(TESTS_DIRPATH, 'arquivos') + def get_itau_data_from_file(): itau_data = dict() - arquivo_remessa = codecs.open(os.path.join(ARQS_DIRPATH, - 'cobranca.itau.rem'), encoding='ascii') + arquivo_remessa = codecs.open(os.path.join(ARQS_DIRPATH, + 'cobranca.itau.rem'), encoding='ascii') itau_data['remessa'] = arquivo_remessa.read() arquivo_remessa.seek(0) @@ -49,7 +50,7 @@ def get_itau_data_from_file(): itau_data['trailer_arquivo'].carregar(itau_data['trailer_arquivo_str']) itau_data['lote_cob'] = Lote(itau, itau_data['header_lote'], - itau_data['trailer_lote']) + itau_data['trailer_lote']) itau_data['evento_cob1'] = Evento(itau, 1) itau_data['evento_cob1'].adicionar_segmento(itau_data['seg_p1']) itau_data['evento_cob1'].adicionar_segmento(itau_data['seg_q1']) @@ -57,10 +58,11 @@ def get_itau_data_from_file(): itau_data['evento_cob2'] = Evento(itau, 1) itau_data['evento_cob2'].adicionar_segmento(itau_data['seg_p2']) itau_data['evento_cob2'].adicionar_segmento(itau_data['seg_q2']) - - arquivo_remessa.close() + + arquivo_remessa.close() return itau_data + def get_itau_data_from_dict(): itau_data = dict() dict_arquivo = { @@ -108,12 +110,14 @@ def get_itau_data_from_dict(): itau_data['arquivo'] = dict_arquivo itau_data['cobranca'] = dict_cobranca - + return itau_data - + + def get_itau_file_remessa(): - arquivo_remessa = codecs.open(os.path.join(ARQS_DIRPATH, - 'cobranca_dict.itau.rem'), encoding='ascii') + arquivo_remessa = codecs.open( + os.path.join(ARQS_DIRPATH, + 'cobranca_dict.itau.rem'), encoding='ascii') arquivo_data = arquivo_remessa.read() arquivo_remessa.close() - return arquivo_data \ No newline at end of file + return arquivo_data diff --git a/tests/test_arquivo.py b/tests/test_arquivo.py index 285323c..b6eef3f 100644 --- a/tests/test_arquivo.py +++ b/tests/test_arquivo.py @@ -1,7 +1,7 @@ -try: +try: import unittest2 as unittest -except ImportError: +except ImportError: import unittest import os @@ -11,14 +11,14 @@ from cnab240.bancos import itau from cnab240.tipos import Arquivo from tests.data import get_itau_data_from_dict, get_itau_file_remessa, \ - ARQS_DIRPATH + ARQS_DIRPATH class TestCnab240(unittest.TestCase): - + def __init__(self, *args, **kwargs): super(TestCnab240, self).__init__(*args, **kwargs) - self.maxDiff = None + self.maxDiff = None def setUp(self): self.itau_data = get_itau_data_from_dict() diff --git a/tests/test_evento.py b/tests/test_evento.py index e6dacc7..526e05e 100644 --- a/tests/test_evento.py +++ b/tests/test_evento.py @@ -8,10 +8,12 @@ from cnab240.tipos import Evento from tests.data import get_itau_data_from_file + class TestEvento(unittest.TestCase): + def setUp(self): self.evento = Evento(itau, 1) - + def test_getattributes(self): self.assertEquals(self.evento._segmentos, []) @@ -23,10 +25,9 @@ def test_getattributes(self): self.assertNotEqual(self.evento.test_attr, 'Goodbye World') self.assertEqual(self.evento.test_attr, 'Hello World') - def test_unicode(self): + def test_unicode(self): self.assertEquals(unicode(self.evento), u'') self.evento._segmentos.append('test_1') - self.assertEquals(unicode(self.evento), u'test_1') - self.evento._segmentos.append('test_2') - self.assertEquals(unicode(self.evento), u'test_1\r\ntest_2') - + self.assertEquals(unicode(self.evento), u'test_1') + self.evento._segmentos.append('test_2') + self.assertEquals(unicode(self.evento), u'test_1\r\ntest_2') diff --git a/tests/test_lote.py b/tests/test_lote.py index 6381e5d..76cf60c 100644 --- a/tests/test_lote.py +++ b/tests/test_lote.py @@ -1,7 +1,7 @@ -try: +try: import unittest2 as unittest -except ImportError: +except ImportError: import unittest import os @@ -10,46 +10,46 @@ from cnab240 import errors from cnab240.bancos import itau from cnab240.tipos import Lote -from tests.data import get_itau_data_from_file +from tests.data import get_itau_data_from_file class TestLote(unittest.TestCase): def __init__(self, *args, **kwargs): super(TestLote, self).__init__(*args, **kwargs) - self.maxDiff = None + self.maxDiff = None def setUp(self): itau_data = get_itau_data_from_file() - self.lote = itau_data['lote_cob'] + self.lote = itau_data['lote_cob'] self.evento_1 = itau_data['evento_cob1'] self.evento_2 = itau_data['evento_cob2'] self.remessa = itau_data['remessa'] - + def test_init(self): - self.assertEqual(self.lote.eventos, []) - self.assertEqual(self.lote.trailer.quantidade_registros, 2) - + self.assertEqual(self.lote.eventos, []) + self.assertEqual(self.lote.trailer.quantidade_registros, 2) + def test_adicionar_evento(self): with self.assertRaises(TypeError): self.lote.adicionar_evento(None) self.lote.adicionar_evento(self.evento_1) self.assertEqual(self.lote.trailer.quantidade_registros, 4) - + self.lote.adicionar_evento(self.evento_2) self.assertEqual(self.lote.trailer.quantidade_registros, 6) - + def test_unicode(self): with self.assertRaises(errors.NenhumEventoError): unicode(self.lote) - + self.lote.adicionar_evento(self.evento_1) self.lote.adicionar_evento(self.evento_2) self.lote.codigo = 1 - + self.assertIn(unicode(self.lote), self.remessa) - + def test_definir_codigo(self): self.lote.adicionar_evento(self.evento_1) self.lote.codigo = 129 @@ -59,4 +59,3 @@ def test_definir_codigo(self): for evento in self.lote.eventos: for seg in evento.segmentos: self.assertEqual(seg.controle_lote, 129) - diff --git a/tests/test_registro.py b/tests/test_registro.py index 6e5e359..ae6aaaf 100644 --- a/tests/test_registro.py +++ b/tests/test_registro.py @@ -1,7 +1,7 @@ -try: +try: import unittest2 as unittest -except ImportError: +except ImportError: import unittest from decimal import Decimal @@ -11,7 +11,7 @@ class TestRegistro(unittest.TestCase): - + def setUp(self): itau_data = get_itau_data_from_file() self.header_arquivo = itau_data['header_arquivo'] @@ -21,98 +21,97 @@ def setUp(self): self.seg_q_str = itau_data['seg_q1_str'] def test_leitura_campo_num_decimal(self): - self.assertEqual(self.seg_p.valor_titulo, Decimal('100.00')) - + self.assertEqual(self.seg_p.valor_titulo, Decimal('100.00')) + def test_escrita_campo_num_decimal(self): # aceitar somente tipo Decimal with self.assertRaises(errors.TipoError): - self.seg_p.valor_titulo = 10.0 + self.seg_p.valor_titulo = 10.0 with self.assertRaises(errors.TipoError): - self.seg_p.valor_titulo = '' - - # Testa se as casas decimais estao sendo verificadas - with self.assertRaises(errors.NumDecimaisError): + self.seg_p.valor_titulo = '' + + # Testa se as casas decimais estao sendo verificadas + with self.assertRaises(errors.NumDecimaisError): self.seg_p.valor_titulo = Decimal('100.2') - with self.assertRaises(errors.NumDecimaisError): + with self.assertRaises(errors.NumDecimaisError): self.seg_p.valor_titulo = Decimal('1001') - with self.assertRaises(errors.NumDecimaisError): + with self.assertRaises(errors.NumDecimaisError): self.seg_p.valor_titulo = Decimal('1.000') - - # verifica se o numero de digitos esta sendo verificado - with self.assertRaises(errors.NumDigitosExcedidoError): + + # verifica se o numero de digitos esta sendo verificado + with self.assertRaises(errors.NumDigitosExcedidoError): self.seg_p.valor_titulo = Decimal('10000000008100.21') - - # armazemamento correto de um decimal + + # armazemamento correto de um decimal self.seg_p.valor_titulo = Decimal('2.13') self.assertEqual(self.seg_p.valor_titulo, Decimal('2.13')) - + def test_leitura_campo_num_int(self): self.assertEqual(self.header_arquivo.controle_banco, 341) - + def test_escrita_campo_num_int(self): # aceitar somente inteiros (int e long) with self.assertRaises(errors.TipoError): - self.header_arquivo.controle_banco = 10.0 + self.header_arquivo.controle_banco = 10.0 with self.assertRaises(errors.TipoError): - self.header_arquivo.controle_banco = '' - - # verifica se o numero de digitos esta sendo verificado - with self.assertRaises(errors.NumDigitosExcedidoError): - self.header_arquivo.controle_banco = 12345678234567890234567890 - with self.assertRaises(errors.NumDigitosExcedidoError): + self.header_arquivo.controle_banco = '' + + # verifica se o numero de digitos esta sendo verificado + with self.assertRaises(errors.NumDigitosExcedidoError): + self.header_arquivo.controle_banco = 12345678234567890234567890 + with self.assertRaises(errors.NumDigitosExcedidoError): self.header_arquivo.controle_banco = 1234 - - # verifica valor armazenado + + # verifica valor armazenado self.header_arquivo.controle_banco = 5 self.assertEqual(self.header_arquivo.controle_banco, 5) - + def test_leitura_campo_alfa(self): - self.assertEqual(self.header_arquivo.cedente_nome, + self.assertEqual(self.header_arquivo.cedente_nome, u'TRACY TECNOLOGIA LTDA ME') - + def test_escrita_campo_alfa(self): # Testa que serao aceitos apenas unicode objects with self.assertRaises(errors.TipoError): - self.header_arquivo.cedente_nome = 'tracy' + self.header_arquivo.cedente_nome = 'tracy' - # Testa que strings mais longas que obj.digitos nao serao aceitas + # Testa que strings mais longas que obj.digitos nao serao aceitas with self.assertRaises(errors.NumDigitosExcedidoError): self.header_arquivo.cedente_convenio = u'123456789012345678901' - - # Testa que o valor atribuido foi guardado no objeto - self.header_arquivo.cedente_nome = u'tracy' + + # Testa que o valor atribuido foi guardado no objeto + self.header_arquivo.cedente_nome = u'tracy' self.assertEqual(self.header_arquivo.cedente_nome, 'tracy') - + def test_fromdict(self): header_dict = self.header_arquivo.todict() header_arquivo = itau.registros.HeaderArquivo(**header_dict) - self.assertEqual(header_arquivo.cedente_nome, - u'TRACY TECNOLOGIA LTDA ME') + self.assertEqual(header_arquivo.cedente_nome, + u'TRACY TECNOLOGIA LTDA ME') self.assertEqual(header_arquivo.nome_do_banco, u'BANCO ITAU SA') def test_necessario(self): self.assertTrue(self.seg_p) - + seg_p2 = itau.registros.SegmentoP() self.assertFalse(seg_p2.necessario()) - - seg_p2.controle_banco = 33 + + seg_p2.controle_banco = 33 self.assertFalse(seg_p2.necessario()) - seg_p2.vencimento_titulo = 10102012 + seg_p2.vencimento_titulo = 10102012 self.assertTrue(seg_p2.necessario()) def test_unicode(self): def unicode_test(seg_instance, seg_str): seg_gen_str = unicode(seg_instance) - + self.assertEqual(len(seg_gen_str), 240) self.assertEqual(len(seg_str), 240) - self.assertEqual(seg_gen_str, seg_str) + self.assertEqual(seg_gen_str, seg_str) unicode_test(self.seg_p, self.seg_p_str) unicode_test(self.seg_q, self.seg_q_str) if __name__ == '__main__': unittest.main() - From 493784a8fb65bc35601514c786bc1ffc030f3fc8 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:55:46 -0300 Subject: [PATCH 40/81] =?UTF-8?q?[REM]=20C=C3=B3digo=20comentado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/tipos.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/cnab240/tipos.py b/cnab240/tipos.py index ee8416a..d5ed3fd 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos.py @@ -102,7 +102,6 @@ def adicionar_evento(self, evento): if self._codigo: self.atualizar_codigo_eventos() - # Breakpoint def __unicode__(self): if not self._eventos: raise errors.NenhumEventoError() @@ -206,10 +205,8 @@ def carregar_retorno(self, arquivo): def lotes(self): return self._lotes - # def incluir_cobranca(self, **kwargs): def incluir_cobranca(self, header, **kwargs): # 1 eh o codigo de cobranca - #import pudb;pu.db codigo_evento = 1 evento = Evento(self.banco, codigo_evento) @@ -226,25 +223,19 @@ def incluir_cobranca(self, header, **kwargs): lote_cobranca = self.encontrar_lote(codigo_evento) if lote_cobranca is None: - #import pudb;pu.db - #header = self.banco.registros.HeaderLoteCobranca(**self.header.todict()) header = self.banco.registros.HeaderLoteCobranca(**header) trailer = self.banco.registros.TrailerLoteCobranca() lote_cobranca = Lote(self.banco, header, trailer) - # Para conseguir inserir todos os eventos de cobrança em um unico - # lote precisa informar o código do serviço lote_cobranca.header.servico_servico = codigo_evento self.adicionar_lote(lote_cobranca) - # if header.controlecob_numero is None: if "controlecob_numero" not in dir(header) or header.controlecob_numero is None: header.controlecob_numero = int('{0}{1:02}'.format( self.header.arquivo_sequencia, lote_cobranca.codigo)) - # if header.controlecob_data_gravacao is None: if "controlecob_data_gravacao" not in dir(header) or header.controlecob_data_gravacao is None: header.controlecob_data_gravacao = self.header.arquivo_data_de_geracao From eb1ef12fa3c6618fbe575295ca5b9dee65964b10 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:57:04 -0300 Subject: [PATCH 41/81] =?UTF-8?q?[FIX]=20Corre=C3=A7=C3=B5es=20diversas=20?= =?UTF-8?q?para=20tornar=20os=20testes=20verdes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/tipos.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/cnab240/tipos.py b/cnab240/tipos.py index d5ed3fd..58a8c8b 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos.py @@ -60,8 +60,7 @@ def __init__(self, banco, header=None, trailer=None): self.header = header self.trailer = trailer self._codigo = None - if self.trailer != None: - self.trailer.quantidade_registros = 2 + self.trailer.quantidade_registros = 2 self._eventos = [] @property @@ -160,6 +159,7 @@ def carregar_retorno(self, arquivo): tipo_registro = linha[7] if tipo_registro == '0': + self.header = self.banco.registros.HeaderArquivo() self.header.carregar(linha) @@ -205,7 +205,7 @@ def carregar_retorno(self, arquivo): def lotes(self): return self._lotes - def incluir_cobranca(self, header, **kwargs): + def incluir_cobranca(self, **kwargs): # 1 eh o codigo de cobranca codigo_evento = 1 evento = Evento(self.banco, codigo_evento) @@ -223,20 +223,20 @@ def incluir_cobranca(self, header, **kwargs): lote_cobranca = self.encontrar_lote(codigo_evento) if lote_cobranca is None: - header = self.banco.registros.HeaderLoteCobranca(**header) + header = self.banco.registros.HeaderLoteCobranca( + **self.header.todict() + ) trailer = self.banco.registros.TrailerLoteCobranca() lote_cobranca = Lote(self.banco, header, trailer) - lote_cobranca.header.servico_servico = codigo_evento - self.adicionar_lote(lote_cobranca) - if "controlecob_numero" not in dir(header) or header.controlecob_numero is None: + if header.controlecob_numero is None: header.controlecob_numero = int('{0}{1:02}'.format( self.header.arquivo_sequencia, lote_cobranca.codigo)) - if "controlecob_data_gravacao" not in dir(header) or header.controlecob_data_gravacao is None: + if header.controlecob_data_gravacao is None: header.controlecob_data_gravacao = self.header.arquivo_data_de_geracao lote_cobranca.adicionar_evento(evento) @@ -255,14 +255,11 @@ def adicionar_lote(self, lote): self._lotes.append(lote) lote.codigo = len(self._lotes) - if self.trailer != None: - if hasattr(self.trailer, 'totais_quantidade_lotes'): - # Incrementar numero de lotes no trailer do arquivo - self.trailer.totais_quantidade_lotes += 1 + # Incrementar numero de lotes no trailer do arquivo + self.trailer.totais_quantidade_lotes += 1 - if hasattr(self.trailer, 'totais_quantidade_registros'): - # Incrementar numero de registros no trailer do arquivo - self.trailer.totais_quantidade_registros += len(lote) + # Incrementar numero de registros no trailer do arquivo + self.trailer.totais_quantidade_registros += len(lote) def escrever(self, file_): file_.write(unicode(self).encode('ascii')) From 10faf3e53be5fa5b4d5f36cd9a5b4296d8c72344 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:57:33 -0300 Subject: [PATCH 42/81] =?UTF-8?q?[REM]=20C=C3=B3digo=20comentado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/registro.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cnab240/registro.py b/cnab240/registro.py index 89d0825..5efb240 100644 --- a/cnab240/registro.py +++ b/cnab240/registro.py @@ -25,14 +25,11 @@ def valor(self): @valor.setter def valor(self, valor): if self.formato == 'alfa': - # if not isinstance(valor, unicode): if not isinstance(valor, basestring): print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) if len(valor) > self.digitos: print "{0} - {1}".format(self.nome, self.valor) - # raise errors.NumDigitosExcedidoError(self, valor) - # reduz o len(valor) cortar = len(valor) - self.digitos valor = valor[:-(cortar)] @@ -81,7 +78,6 @@ def __unicode__(self): if self.formato == 'alfa' or self.decimais: if self.decimais: - # if self.formato == 'num': valor = unicode(self.valor).replace('.', '') chars_faltantes = self.digitos - len(valor) return (u'0' * chars_faltantes) + valor From 7a893032594cb48afcabb2a8a21de5f7bb31efb9 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:58:21 -0300 Subject: [PATCH 43/81] =?UTF-8?q?Retornando=20os=20registros=20ao=20conte?= =?UTF-8?q?=C3=BAdo=20padr=C3=A3o=20da=20biblioteca?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/registro.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cnab240/registro.py b/cnab240/registro.py index 5efb240..f1bb03d 100644 --- a/cnab240/registro.py +++ b/cnab240/registro.py @@ -25,13 +25,12 @@ def valor(self): @valor.setter def valor(self, valor): if self.formato == 'alfa': - if not isinstance(valor, basestring): + if not isinstance(valor, unicode): print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) if len(valor) > self.digitos: + raise errors.NumDigitosExcedidoError(self, valor) print "{0} - {1}".format(self.nome, self.valor) - cortar = len(valor) - self.digitos - valor = valor[:-(cortar)] elif self.decimais: if not isinstance(valor, Decimal): @@ -58,7 +57,6 @@ def valor(self, valor): self._valor = valor def __unicode__(self): - if self.valor is None: if self.default is not None: if self.decimais: From 8fc1414b70e24cf8ea190774f292a37dbe7b825c Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 00:58:55 -0300 Subject: [PATCH 44/81] [REM] PAGFOR --- cnab240/tipos.py | 40 ---------------------------------------- 1 file changed, 40 deletions(-) diff --git a/cnab240/tipos.py b/cnab240/tipos.py index 58a8c8b..15a29d2 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos.py @@ -275,43 +275,3 @@ def __unicode__(self): # Adicionar elemento vazio para arquivo terminar com \r\n result.append(u'') return u'\r\n'.join(result) - - def encontrar_lote_pag(self, codigo_servico): - for lote in self.lotes: - # FIXME - if codigo_servico == 20: - return lote - # - if lote.header.servico_servico == codigo_servico: - return lote - - # Implementação para Pag_For - def incluir_pagamento(self, **kwargs): - # 20: PAGTO FORNECEDORES - codigo_evento = 20 - evento = Evento(self.banco, codigo_evento) - - t_pag_for = self.banco.registros.TransacaoPagFor(**kwargs) - evento.adicionar_segmento(t_pag_for) - - lote_pag = self.encontrar_lote_pag(codigo_evento) - - if lote_pag is None: - # header = self.banco.registros.HeaderLoteCobranca(**self.header.todict()) - # trailer = self.banco.registros.TrailerLoteCobranca() - header = None - trailer = None - lote_pag = Lote(self.banco, header, trailer) - self.adicionar_lote(lote_pag) - - # if header.controlecob_numero is None: - # header.controlecob_numero = int('{0}{1:02}'.format( - # self.header.arquivo_sequencia, - # lote_pag.codigo)) - - # if header.controlecob_data_gravacao is None: - # header.controlecob_data_gravacao = self.header.arquivo_data_de_geracao - - lote_pag.adicionar_evento(evento) - # Incrementar numero de registros no trailer do arquivo - self.trailer.totais_quantidade_registros += len(evento) From 23ec0834fe45fb4a0cd08b0906fb268bb4891836 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 01:00:55 -0300 Subject: [PATCH 45/81] =?UTF-8?q?[NEW]=20D=C3=A9bito=20e=20pagamento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/tipos.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/cnab240/tipos.py b/cnab240/tipos.py index 15a29d2..959f988 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos.py @@ -243,6 +243,46 @@ def incluir_cobranca(self, **kwargs): # Incrementar numero de registros no trailer do arquivo self.trailer.totais_quantidade_registros += len(evento) + def incluir_debito_pagamento(self, seg_a=False, seg_b=False, **kwargs): + # 1 eh o codigo de cobranca + codigo_evento = 1 + evento = Evento(self.banco, codigo_evento) + + if not seg_a: + seg_a = self.banco.registros.SegmentoA(**kwargs) + evento.adicionar_segmento(seg_a) + + if not seg_b: + seg_b = self.banco.registros.SegmentoB(**kwargs) + evento.adicionar_segmento(seg_b) + + # seg_c = self.banco.registros.SegmentoC(**kwargs) + # if seg_c.necessario(): + # evento.adicionar_segmento(seg_c) + + lote_pagamento = self.encontrar_lote(codigo_evento) + + if lote_pagamento is None: + header = self.banco.registros.HeaderLotePagamento( + **self.header.todict() + ) + trailer = self.banco.registros.TrailerLotePagamento() + trailer.somatoria_valores = kwargs.get('credito_valor_pagamento') + trailer.somatoria_quantidade_moedas = kwargs.get( + 'credito_moeda_quantidade') + lote_pagamento = Lote(self.banco, header, trailer) + + self.adicionar_lote(lote_pagamento) + else: + lote_pagamento.trailer.somatoria_valores += \ + kwargs.get('credito_valor_pagamento') + lote_pagamento.trailer.somatoria_quantidade_moedas += kwargs.get( + 'credito_moeda_quantidade') + + lote_pagamento.adicionar_evento(evento) + # Incrementar numero de registros no trailer do arquivo + self.trailer.totais_quantidade_registros += len(evento) + def encontrar_lote(self, codigo_servico): for lote in self.lotes: if lote.header.servico_servico == codigo_servico: From 5eacec9953be79827b3c1d8132375de0ab5ad49f Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 01:01:50 -0300 Subject: [PATCH 46/81] =?UTF-8?q?[NEW]=20Novo=20erro=20para=20funcionalida?= =?UTF-8?q?des=20n=C3=A3o=20implementadas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/errors.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cnab240/errors.py b/cnab240/errors.py index c03cc02..853687f 100644 --- a/cnab240/errors.py +++ b/cnab240/errors.py @@ -68,3 +68,7 @@ class NenhumEventoError(Cnab240Error): class CampoObrigatorioError(Cnab240Error): """Campo obrigatorio nao preenchido.""" + + +class ElementoNaoImplementado(Cnab240Error): + """Campo obrigatorio nao preenchido.""" From f54dbeab6ddf4fc31385aa5dd7498f60bddfa738 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 01:02:02 -0300 Subject: [PATCH 47/81] [REF] pep8 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e937b3d..51ccc59 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ ], license='MIT', description='Classe para gerar arquivo de remessa e leitura de retorno no ' - 'padrão CNAB240', + 'padrão CNAB240', long_description=open('README.md', 'r').read(), download_url='https://github.com/TracyWebTech/cnab240', scripts=[], From 0b1afa0f2a982573d53ff06624f413378cd7e7d4 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 01:02:29 -0300 Subject: [PATCH 48/81] [NEW] Arquivo de constantes --- cnab240/constantes.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 cnab240/constantes.py diff --git a/cnab240/constantes.py b/cnab240/constantes.py new file mode 100644 index 0000000..c7de2ef --- /dev/null +++ b/cnab240/constantes.py @@ -0,0 +1,19 @@ + +from __future__ import division, print_function, unicode_literals + + +TIPO_REGISTRO_HEADER_ARQUIVO = '0' +TIPO_REGISTRO_HEADER_LOTE = '1' +TIPO_REGISTRO_REGISTROS_INICIAIS_LOTE = '2' +TIPO_REGISTRO_DETALHE = '3' +TIPO_REGISTRO_REGISTROS_FINAIS_LOTE = '4' +TIPO_REGISTRO_TRAILER_LOTE = '4' +TIPO_REGISTRO_TRAILER_ARQUIVO = '9' + +TIPO_OPERACAO_LANCAMENTO_CREDITO = 'C' +TIPO_OPERACAO_LANCAMENTO_DEBITO = 'D' +TIPO_OPERACAO_EXTRATO_CONCILIACAO = 'R' +TIPO_OPERACAO_GESTAO_DE_CAIXA = 'G' +TIPO_OPERACAO_INFORMACOES_TITULOS_CAPTURADOS_PROPRIO_BANCO = 'I' +TIPO_OPERACAO_ARQUIVO_REMESSA = 'R' +TIPO_OPERACAO_ARQUIVO_RETORNO = 'T' From a33449048a79cf433748736df8f031571b51c70f Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 01:46:13 -0300 Subject: [PATCH 49/81] =?UTF-8?q?[REM]=20Classe=20n=C3=A3o=20utilizada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/lotes/cobranca.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cnab240/lotes/cobranca.py b/cnab240/lotes/cobranca.py index b826392..89abfde 100644 --- a/cnab240/lotes/cobranca.py +++ b/cnab240/lotes/cobranca.py @@ -3,5 +3,6 @@ class LoteCobranca(LoteBase): - HeaderCls = LoteCobranca.banco.registros.HeaderLoteCobranca - TrailerCls = LoteCobranca.banco.registros.TrailerLoteCobranca + pass + # HeaderCls = LoteCobranca.banco.registros.HeaderLoteCobranca + # TrailerCls = LoteCobranca.banco.registros.TrailerLoteCobranca From 8c731697ec72827e9e9bc9b5847c976adaf4b63f Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 01:46:33 -0300 Subject: [PATCH 50/81] [REF] Flake8 --- cnab240/registro.py | 9 +++++---- cnab240/tipos.py | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/cnab240/registro.py b/cnab240/registro.py index f1bb03d..11db67e 100644 --- a/cnab240/registro.py +++ b/cnab240/registro.py @@ -135,7 +135,7 @@ def necessario(self): for campo in self._campos.values(): eh_controle = campo.nome.startswith( 'controle_') or campo.nome.startswith('servico_') - if not eh_controle and campo.valor != None: + if not eh_controle and campo.valor is not None: return True return False @@ -147,15 +147,16 @@ def todict(self): data_dict[campo.nome] = campo.valor return data_dict - def fromdict(self, data_dict): - ignore_fields = lambda key: any(( + def ignore_fields(self, key): + return any(( key.startswith('vazio'), key.startswith('servico_'), key.startswith('controle_'), )) + def fromdict(self, data_dict): for key, value in data_dict.items(): - if hasattr(self, key) and not ignore_fields(key): + if hasattr(self, key) and not self.ignore_fields(key): setattr(self, key, value) def carregar(self, registro_str): diff --git a/cnab240/tipos.py b/cnab240/tipos.py index 959f988..84be20c 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos.py @@ -1,7 +1,6 @@ # -*- encoding: utf8 -*- import codecs -import importlib from datetime import datetime from cnab240 import errors @@ -70,9 +69,9 @@ def codigo(self): @codigo.setter def codigo(self, valor): self._codigo = valor - if self.header != None: + if self.header is not None: self.header.controle_lote = valor - if self.trailer != None: + if self.trailer is not None: self.trailer.controle_lote = valor self.atualizar_codigo_eventos() @@ -94,7 +93,8 @@ def adicionar_evento(self, evento): raise TypeError self._eventos.append(evento) - if self.trailer != None and hasattr(self.trailer, 'quantidade_registros'): + if self.trailer is not None and \ + hasattr(self.trailer, 'quantidade_registros'): self.trailer.quantidade_registros += len(evento) self.atualizar_codigo_registros() @@ -106,15 +106,16 @@ def __unicode__(self): raise errors.NenhumEventoError() result = [] - if self.header != None: + if self.header is not None: result.append(unicode(self.header)) result.extend(unicode(evento) for evento in self._eventos) - if self.trailer != None: + if self.trailer is not None: result.append(unicode(self.trailer)) return '\r\n'.join(result) def __len__(self): - if self.trailer != None and hasattr(self.trailer, 'quantidade_registros'): + if self.trailer is not None and \ + hasattr(self.trailer, 'quantidade_registros'): return self.trailer.quantidade_registros else: return len(self._eventos) @@ -237,7 +238,8 @@ def incluir_cobranca(self, **kwargs): lote_cobranca.codigo)) if header.controlecob_data_gravacao is None: - header.controlecob_data_gravacao = self.header.arquivo_data_de_geracao + header.controlecob_data_gravacao = \ + self.header.arquivo_data_de_geracao lote_cobranca.adicionar_evento(evento) # Incrementar numero de registros no trailer do arquivo From 70ec6104563d5fc34b9fbb67fae1c12a1ed6403b Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 01:47:17 -0300 Subject: [PATCH 51/81] [REF] Rename data to data_itau --- tests/{data.py => data_itau.py} | 5 +++-- tests/test_arquivo.py | 2 +- tests/test_evento.py | 1 - tests/test_lote.py | 6 +----- tests/test_registro.py | 2 +- 5 files changed, 6 insertions(+), 10 deletions(-) rename tests/{data.py => data_itau.py} (96%) diff --git a/tests/data.py b/tests/data_itau.py similarity index 96% rename from tests/data.py rename to tests/data_itau.py index bcb9195..99bfec2 100644 --- a/tests/data.py +++ b/tests/data_itau.py @@ -11,8 +11,9 @@ def get_itau_data_from_file(): itau_data = dict() - arquivo_remessa = codecs.open(os.path.join(ARQS_DIRPATH, - 'cobranca.itau.rem'), encoding='ascii') + arquivo_remessa = codecs.open(os.path.join( + ARQS_DIRPATH, + 'cobranca.itau.rem'), encoding='ascii') itau_data['remessa'] = arquivo_remessa.read() arquivo_remessa.seek(0) diff --git a/tests/test_arquivo.py b/tests/test_arquivo.py index b6eef3f..d5aaa81 100644 --- a/tests/test_arquivo.py +++ b/tests/test_arquivo.py @@ -10,7 +10,7 @@ from cnab240 import errors from cnab240.bancos import itau from cnab240.tipos import Arquivo -from tests.data import get_itau_data_from_dict, get_itau_file_remessa, \ +from tests.data_itau import get_itau_data_from_dict, get_itau_file_remessa, \ ARQS_DIRPATH diff --git a/tests/test_evento.py b/tests/test_evento.py index 526e05e..5dd88ba 100644 --- a/tests/test_evento.py +++ b/tests/test_evento.py @@ -6,7 +6,6 @@ from cnab240.bancos import itau from cnab240.tipos import Evento -from tests.data import get_itau_data_from_file class TestEvento(unittest.TestCase): diff --git a/tests/test_lote.py b/tests/test_lote.py index 76cf60c..6745a9c 100644 --- a/tests/test_lote.py +++ b/tests/test_lote.py @@ -4,13 +4,9 @@ except ImportError: import unittest -import os -import codecs from cnab240 import errors -from cnab240.bancos import itau -from cnab240.tipos import Lote -from tests.data import get_itau_data_from_file +from tests.data_itau import get_itau_data_from_file class TestLote(unittest.TestCase): diff --git a/tests/test_registro.py b/tests/test_registro.py index ae6aaaf..2dd652e 100644 --- a/tests/test_registro.py +++ b/tests/test_registro.py @@ -7,7 +7,7 @@ from decimal import Decimal from cnab240 import errors from cnab240.bancos import itau -from tests.data import get_itau_data_from_file +from tests.data_itau import get_itau_data_from_file class TestRegistro(unittest.TestCase): From 2ba94d7d0aa3e106e77a3ba3e1c23808eccf0437 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 01:47:38 -0300 Subject: [PATCH 52/81] [NEW] Testes pagamento banco do brasil --- .../arquivos/pagamento_dict.banco_brasil.rem | 10 ++ tests/data_bancobrasil.py | 158 ++++++++++++++++++ tests/test_banco_brasil_pagamento.py | 58 +++++++ 3 files changed, 226 insertions(+) create mode 100644 tests/arquivos/pagamento_dict.banco_brasil.rem create mode 100644 tests/data_bancobrasil.py create mode 100644 tests/test_banco_brasil_pagamento.py diff --git a/tests/arquivos/pagamento_dict.banco_brasil.rem b/tests/arquivos/pagamento_dict.banco_brasil.rem new file mode 100644 index 0000000..a2bc24a --- /dev/null +++ b/tests/arquivos/pagamento_dict.banco_brasil.rem @@ -0,0 +1,10 @@ +00100000 2231309350001980001234567891 0123410000003333330 KMEE INFORMATICA LTDA BANCO DO BRASIL 12606201700000000000103000000 EMPRESA 100 +00000011C0000046 0000000000000000001234567891 0123410000003333330 KMEE INFORMATICA LTDA 00000 00000 +0000001300001A0010000010444440000000543210 LUIS FELIPE MILEO 000133 06/2017 A 30062017BRL000000000000000000000000612136 0 +0000001300002B 100033333333333RUA DOS FERROVIARIOS 00000 CENTRO ITAJUBA 37500150MG00000000000000000000000000000000000000000000000000000000000000000000000000000000000 00 0 +00100015 000004000000000000612136000000000000000000 +00000021C0000046 0000000000000000001234567891 0123410000003333330 KMEE INFORMATICA LTDA 00000 00000 +0000002300001A0010000010444440000000543210 LUIS FELIPE MILEO 000133 06/2017 A 30062017BRL000000000000000000000000612136 0 +0000002300002B 100033333333333RUA DOS FERROVIARIOS 00000 CENTRO ITAJUBA 37500150MG00000000000000000000000000000000000000000000000000000000000000000000000000000000000 00 0 +00100025 000004000000000000612136000000000000000000 +00100009 000002000010000000 diff --git a/tests/data_bancobrasil.py b/tests/data_bancobrasil.py new file mode 100644 index 0000000..faa3466 --- /dev/null +++ b/tests/data_bancobrasil.py @@ -0,0 +1,158 @@ + +from __future__ import division, print_function, unicode_literals + +import os +import codecs +from decimal import Decimal + +TESTS_DIRPATH = os.path.abspath(os.path.dirname(__file__)) +ARQS_DIRPATH = os.path.join(TESTS_DIRPATH, 'arquivos') + + +def get_banco_brasil_data_from_dict(): + data = dict() + + header = { + 'controle_banco': 1, + 'arquivo_data_de_geracao': 12606201, + 'arquivo_densidade': 0, + 'arquivo_hora_de_geracao': 700000, + 'arquivo_layout': 103, + 'arquivo_sequencia': 0, + 'cedente_agencia': 1234, + 'cedente_agencia_dv': '1', + 'cedente_conta': 333333, + 'cedente_conta_dv': '0', + 'cedente_convenio': '0001234567891', + 'cedente_agencia_conta_dv': '', + 'cedente_inscricao_numero': 23130935000198, + 'cedente_inscricao_tipo': 2, + 'cedente_nome': "KMEE INFORMATICA LTDA", + 'controle_lote': 0, + 'controle_registro': 0, + 'nome_do_banco': 'BANCO DO BRASIL', + 'reservado_banco': '0', + 'reservado_empresa': 'EMPRESA 100', + 'vazio1': '', + 'vazio3': '', + 'vazio4': 'CSP000', + } + + pagamentos = [] + + pagamento_1 = { + 'aviso_ao_favorecido': 0, + 'codigo_finalidade_complementar': '', + 'codigo_finalidade_doc': '', + 'codigo_finalidade_ted': '', + 'controle_banco': 1, + 'controle_lote': 1, + 'controle_registro': 3, + 'credito_data_pagamento': 30062017, + 'credito_data_real': '', + 'credito_moeda_quantidade': Decimal('0.00000'), + 'credito_moeda_tipo': 'BRL', + 'credito_nosso_numero': '', + 'credito_seu_numero': '000133 06/2017 A', + 'credito_valor_pagamento': Decimal('6121.36'), + 'credito_valor_real': '', + 'favorecido_agencia': 4444, + 'favorecido_agencia_dv': '4', + 'favorecido_banco': 1, + 'favorecido_camara': 0, + 'favorecido_conta': 54321, + 'favorecido_conta_dv': '0', + 'favorecido_dv': ' ', + 'favorecido_nome': 'LUIS FELIPE MILEO', + 'ocorrencias': '', + 'outras_informacoes': '', + 'servico_codigo_movimento': 0, + 'servico_tipo_movimento': 0, + 'aviso': '0', + 'cod_documento_favorecido': '', + 'codigo_ispb': '0', + 'codigo_ug_centralizadora': '0', + 'favorecido_cep': 37500, + 'favorecido_cep_complemento': '150', + 'favorecido_endereco_bairro': 'CENTRO', + 'favorecido_endereco_cidade': 'ITAJUBA', + 'favorecido_endereco_complemento': '', + 'favorecido_endereco_num': 0, + 'favorecido_endereco_rua': 'RUA DOS FERROVIARIOS', + 'favorecido_estado': 'MG', + 'favorecido_num_inscricao': 33333333333, + 'favorecido_tipo_inscricao': 1, + 'pagamento_abatimento': Decimal('0.00'), + 'pagamento_desconto': Decimal('0.00'), + 'pagamento_mora': Decimal('0.00'), + 'pagamento_multa': Decimal('0.00'), + 'pagamento_valor_documento': Decimal('0.00'), + 'pagamento_vencimento': 0, + } + + pagamento_2 = { + 'aviso_ao_favorecido': 0, + 'codigo_finalidade_complementar': '', + 'codigo_finalidade_doc': '', + 'codigo_finalidade_ted': '', + 'controle_banco': 1, + 'controle_lote': 1, + 'controle_registro': 3, + 'credito_data_pagamento': 30062017, + 'credito_data_real': '', + 'credito_moeda_quantidade': Decimal('0.00000'), + 'credito_moeda_tipo': 'BRL', + 'credito_nosso_numero': '', + 'credito_seu_numero': '000133 06/2017 A', + 'credito_valor_pagamento': Decimal('6121.36'), + 'credito_valor_real': '', + 'favorecido_agencia': 4444, + 'favorecido_agencia_dv': '4', + 'favorecido_banco': 1, + 'favorecido_camara': 0, + 'favorecido_conta': 54321, + 'favorecido_conta_dv': '0', + 'favorecido_dv': ' ', + 'favorecido_nome': 'HENDRIX COSTA', + 'ocorrencias': '', + 'outras_informacoes': '', + 'servico_codigo_movimento': 0, + 'servico_tipo_movimento': 0, + 'aviso': '0', + 'cod_documento_favorecido': '', + 'codigo_ispb': '0', + 'codigo_ug_centralizadora': '0', + 'favorecido_cep': 37500, + 'favorecido_cep_complemento': '124', + 'favorecido_endereco_bairro': 'CENTRO', + 'favorecido_endereco_cidade': 'ITAJUBA', + 'favorecido_endereco_complemento': '', + 'favorecido_endereco_num': 0, + 'favorecido_endereco_rua': 'av 3 de abril', + 'favorecido_estado': 'MG', + 'favorecido_num_inscricao': 33333333333, + 'favorecido_tipo_inscricao': 1, + 'pagamento_abatimento': Decimal('0.00'), + 'pagamento_desconto': Decimal('0.00'), + 'pagamento_mora': Decimal('0.00'), + 'pagamento_multa': Decimal('0.00'), + 'pagamento_valor_documento': Decimal('0.00'), + 'pagamento_vencimento': 0, + } + + pagamentos.append(pagamento_1) + pagamentos.append(pagamento_2) + + data['header'] = header + data['pagamento'] = pagamentos + + return data + + +def get_banco_brasil_file_remessa(): + arquivo_remessa = codecs.open( + os.path.join(ARQS_DIRPATH, + 'pagamento_dict.banco_brasil.rem'), encoding='ascii') + arquivo_data = arquivo_remessa.read() + arquivo_remessa.close() + return arquivo_data diff --git a/tests/test_banco_brasil_pagamento.py b/tests/test_banco_brasil_pagamento.py new file mode 100644 index 0000000..76f6044 --- /dev/null +++ b/tests/test_banco_brasil_pagamento.py @@ -0,0 +1,58 @@ + +try: + import unittest2 as unittest +except ImportError: + import unittest + +# import os +# import codecs + +from cnab240 import errors +from cnab240.bancos import bancodobrasil +from cnab240.tipos import Arquivo +from tests.data_bancobrasil import ( + get_banco_brasil_data_from_dict, + # get_banco_brasil_file_remessa, + # ARQS_DIRPATH +) + + +class TestBancoBrasilPagamentoCnab240(unittest.TestCase): + + def __init__(self, *args, **kwargs): + super(TestBancoBrasilPagamentoCnab240, self).__init__(*args, **kwargs) + self.maxDiff = None + + def setUp(self): + self.data = get_banco_brasil_data_from_dict() + self.arquivo = Arquivo(bancodobrasil, **self.data['header']) + + def test_unicode(self): + + for evento in self.data['pagamento']: + self.arquivo.incluir_debito_pagamento( + **evento + ) + # TODO: FIXME + # self.assertEqual( + # unicode(self.arquivo), + # get_banco_brasil_file_remessa() + # ) + + def test_empty_data(self): + arquivo = Arquivo(bancodobrasil) + self.assertRaises(errors.ArquivoVazioError, unicode, arquivo) + + # TODO: FIXME + # def test_leitura(self): + # return_file_path = os.path.join( + # ARQS_DIRPATH, + # 'pagamento.bancodobrasil.ret' + # ) + # ret_file = codecs.open(return_file_path, encoding='ascii') + # arquivo = Arquivo(bancodobrasil, arquivo=ret_file) + # ret_file.seek(0) + # self.assertEqual(ret_file.read(), unicode(arquivo)) + +if __name__ == '__main__': + unittest.main() From e64806381befefe27599b903938bbe1aade72a6f Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 02:04:37 -0300 Subject: [PATCH 53/81] =?UTF-8?q?[REF]=20Refatora=C3=A7=C3=A3o=20da=20estr?= =?UTF-8?q?utura=20dos=20arquivos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/tipos/__init__.py | 7 ++ cnab240/{tipos.py => tipos/arquivo.py} | 122 +------------------------ cnab240/tipos/evento.py | 49 ++++++++++ cnab240/tipos/lote.py | 73 +++++++++++++++ 4 files changed, 133 insertions(+), 118 deletions(-) create mode 100644 cnab240/tipos/__init__.py rename cnab240/{tipos.py => tipos/arquivo.py} (67%) create mode 100644 cnab240/tipos/evento.py create mode 100644 cnab240/tipos/lote.py diff --git a/cnab240/tipos/__init__.py b/cnab240/tipos/__init__.py new file mode 100644 index 0000000..2ffcd43 --- /dev/null +++ b/cnab240/tipos/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +from .. import errors + +from .arquivo import Arquivo +from .evento import Evento +from .lote import Lote \ No newline at end of file diff --git a/cnab240/tipos.py b/cnab240/tipos/arquivo.py similarity index 67% rename from cnab240/tipos.py rename to cnab240/tipos/arquivo.py index 84be20c..b99ab88 100644 --- a/cnab240/tipos.py +++ b/cnab240/tipos/arquivo.py @@ -2,123 +2,9 @@ import codecs from datetime import datetime -from cnab240 import errors - - -class Evento(object): - - def __init__(self, banco, codigo_evento): - self._segmentos = [] - self.banco = banco - self.codigo_evento = codigo_evento - self._codigo_lote = None - - def adicionar_segmento(self, segmento): - self._segmentos.append(segmento) - for segmento in self._segmentos: - segmento.servico_codigo_movimento = self.codigo_evento - - @property - def segmentos(self): - return self._segmentos - - def __getattribute__(self, name): - for segmento in object.__getattribute__(self, '_segmentos'): - if hasattr(segmento, name): - return getattr(segmento, name) - return object.__getattribute__(self, name) - - def __unicode__(self): - return u'\r\n'.join(unicode(seg) for seg in self._segmentos) - - def __len__(self): - return len(self._segmentos) - - @property - def codigo_lote(self): - return self._codigo_lote - - @codigo_lote.setter - def codigo_lote(self, valor): - self._codigo_lote = valor - for segmento in self._segmentos: - segmento.controle_lote = valor - - def atualizar_codigo_registros(self, last_id): - current_id = last_id - for segmento in self._segmentos: - current_id += 1 - segmento.servico_numero_registro = current_id - return current_id - - -class Lote(object): - - def __init__(self, banco, header=None, trailer=None): - self.banco = banco - self.header = header - self.trailer = trailer - self._codigo = None - self.trailer.quantidade_registros = 2 - self._eventos = [] - - @property - def codigo(self): - return self._codigo - - @codigo.setter - def codigo(self, valor): - self._codigo = valor - if self.header is not None: - self.header.controle_lote = valor - if self.trailer is not None: - self.trailer.controle_lote = valor - self.atualizar_codigo_eventos() - - def atualizar_codigo_eventos(self): - for evento in self._eventos: - evento.codigo_lote = self._codigo - - def atualizar_codigo_registros(self): - last_id = 0 - for evento in self._eventos: - last_id = evento.atualizar_codigo_registros(last_id) - - @property - def eventos(self): - return self._eventos - - def adicionar_evento(self, evento): - if not isinstance(evento, Evento): - raise TypeError - - self._eventos.append(evento) - if self.trailer is not None and \ - hasattr(self.trailer, 'quantidade_registros'): - self.trailer.quantidade_registros += len(evento) - self.atualizar_codigo_registros() - - if self._codigo: - self.atualizar_codigo_eventos() - - def __unicode__(self): - if not self._eventos: - raise errors.NenhumEventoError() - - result = [] - if self.header is not None: - result.append(unicode(self.header)) - result.extend(unicode(evento) for evento in self._eventos) - if self.trailer is not None: - result.append(unicode(self.trailer)) - return '\r\n'.join(result) - - def __len__(self): - if self.trailer is not None and \ - hasattr(self.trailer, 'quantidade_registros'): - return self.trailer.quantidade_registros - else: - return len(self._eventos) +from .. import errors +from evento import Evento +from lote import Lote class Arquivo(object): @@ -316,4 +202,4 @@ def __unicode__(self): result.append(unicode(self.trailer)) # Adicionar elemento vazio para arquivo terminar com \r\n result.append(u'') - return u'\r\n'.join(result) + return u'\r\n'.join(result) \ No newline at end of file diff --git a/cnab240/tipos/evento.py b/cnab240/tipos/evento.py new file mode 100644 index 0000000..05a102a --- /dev/null +++ b/cnab240/tipos/evento.py @@ -0,0 +1,49 @@ +# -*- encoding: utf8 -*- + + + +class Evento(object): + + def __init__(self, banco, codigo_evento): + self._segmentos = [] + self.banco = banco + self.codigo_evento = codigo_evento + self._codigo_lote = None + + def adicionar_segmento(self, segmento): + self._segmentos.append(segmento) + for segmento in self._segmentos: + segmento.servico_codigo_movimento = self.codigo_evento + + @property + def segmentos(self): + return self._segmentos + + def __getattribute__(self, name): + for segmento in object.__getattribute__(self, '_segmentos'): + if hasattr(segmento, name): + return getattr(segmento, name) + return object.__getattribute__(self, name) + + def __unicode__(self): + return u'\r\n'.join(unicode(seg) for seg in self._segmentos) + + def __len__(self): + return len(self._segmentos) + + @property + def codigo_lote(self): + return self._codigo_lote + + @codigo_lote.setter + def codigo_lote(self, valor): + self._codigo_lote = valor + for segmento in self._segmentos: + segmento.controle_lote = valor + + def atualizar_codigo_registros(self, last_id): + current_id = last_id + for segmento in self._segmentos: + current_id += 1 + segmento.servico_numero_registro = current_id + return current_id diff --git a/cnab240/tipos/lote.py b/cnab240/tipos/lote.py new file mode 100644 index 0000000..f2be8ae --- /dev/null +++ b/cnab240/tipos/lote.py @@ -0,0 +1,73 @@ +# -*- encoding: utf8 -*- + +from evento import Evento +from .. import errors + + +class Lote(object): + + def __init__(self, banco, header=None, trailer=None): + self.banco = banco + self.header = header + self.trailer = trailer + self._codigo = None + self.trailer.quantidade_registros = 2 + self._eventos = [] + + @property + def codigo(self): + return self._codigo + + @codigo.setter + def codigo(self, valor): + self._codigo = valor + if self.header is not None: + self.header.controle_lote = valor + if self.trailer is not None: + self.trailer.controle_lote = valor + self.atualizar_codigo_eventos() + + def atualizar_codigo_eventos(self): + for evento in self._eventos: + evento.codigo_lote = self._codigo + + def atualizar_codigo_registros(self): + last_id = 0 + for evento in self._eventos: + last_id = evento.atualizar_codigo_registros(last_id) + + @property + def eventos(self): + return self._eventos + + def adicionar_evento(self, evento): + if not isinstance(evento, Evento): + raise TypeError + + self._eventos.append(evento) + if self.trailer is not None and \ + hasattr(self.trailer, 'quantidade_registros'): + self.trailer.quantidade_registros += len(evento) + self.atualizar_codigo_registros() + + if self._codigo: + self.atualizar_codigo_eventos() + + def __unicode__(self): + if not self._eventos: + raise errors.NenhumEventoError() + + result = [] + if self.header is not None: + result.append(unicode(self.header)) + result.extend(unicode(evento) for evento in self._eventos) + if self.trailer is not None: + result.append(unicode(self.trailer)) + return '\r\n'.join(result) + + def __len__(self): + if self.trailer is not None and \ + hasattr(self.trailer, 'quantidade_registros'): + return self.trailer.quantidade_registros + else: + return len(self._eventos) From 609a42cb401c578f7e373c7740b5f87a16c867e0 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 02:41:56 -0300 Subject: [PATCH 54/81] [NEW] Novas constantes --- cnab240/constantes.py | 37 ++++++++++++++++++++++++++++++++++++- cnab240/tipos/arquivo.py | 31 +++++++++++++++++++++---------- 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/cnab240/constantes.py b/cnab240/constantes.py index c7de2ef..682b063 100644 --- a/cnab240/constantes.py +++ b/cnab240/constantes.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from __future__ import division, print_function, unicode_literals @@ -7,7 +8,7 @@ TIPO_REGISTRO_REGISTROS_INICIAIS_LOTE = '2' TIPO_REGISTRO_DETALHE = '3' TIPO_REGISTRO_REGISTROS_FINAIS_LOTE = '4' -TIPO_REGISTRO_TRAILER_LOTE = '4' +TIPO_REGISTRO_TRAILER_LOTE = '5' TIPO_REGISTRO_TRAILER_ARQUIVO = '9' TIPO_OPERACAO_LANCAMENTO_CREDITO = 'C' @@ -17,3 +18,37 @@ TIPO_OPERACAO_INFORMACOES_TITULOS_CAPTURADOS_PROPRIO_BANCO = 'I' TIPO_OPERACAO_ARQUIVO_REMESSA = 'R' TIPO_OPERACAO_ARQUIVO_RETORNO = 'T' + + +TIPO_SERVICO_COBRANCA = '01' +TIPO_SERVICO_BLOQUETO_ELETRONICO = '03' +TIPO_SERVICO_CONCILIACAO_BANCARAI = '04' +TIPO_SERVICO_DEBITOS = '05' +TIPO_SERVICO_CUSTODIA_DE_CHEQUES = '06' +TIPO_SERVICO_GESTAO_DE_CAIXA = '07' +TIPO_SERVICO_CONSULTA_INFORMACAO_MARGEM = '08' +TIPO_SERVICO_AVERBACAO_DA_CONSIGNACAO_RETENCAO = '09' +TIPO_SERVICO_PAGAMENTO_DIVIDENDOS = '10' +TIPO_SERVICO_MANUTENCAO_DA_CONSIGNACAO = '11' +TIPO_SERVICO_CONSIGNACAO_DE_PARCELAS = '12' +TIPO_SERVICO_GLOSA_DA_CONSIGNACAO_INSS = '13' +TIPO_SERVICO_CONSULTA_DE_TRIBUTOS_A_PAGAR = '14' +TIPO_SERVICO_PAGAMENTO_FORNECEDOR = '20' +TIPO_SERVICO_PAGAMENTO_DE_CONTAS_TRIBUTOS_E_IMPOSTOS = '22' +TIPO_SERVICO_COMPROR = '25' +TIPO_SERVICO_COMPROR_ROTATIVO = '26' +TIPO_SERVICO_ALEGACAO_DO_SACADO = '29' +TIPO_SERVICO_PAGAMENTO_SALARIOS = '30' +TIPO_SERVICO_PAGAMENTO_DE_HONORARIOS = '32' +TIPO_SERVICO_PAGAMENTO_DE_BOLSA_AUXILIO = '33' +TIPO_SERVICO_PAGAMENTO_DE_PREBENDA_REMUNERACAO_A_PADRES_E_SACERDOTES = '34' +TIPO_SERVICO_VENDOR = '40' +TIPO_SERVICO_VENDOR_A_TERMO = '41' +TIPO_SERVICO_PAGAMENTO_SINISTRO_SEGURADOS = '50' +TIPO_SERVICO_PAGAMENTO_DESPESAS_VIAJANTE_EM_TRANSITO = '60' +TIPO_SERVICO_PAGAMENTO_AUTORIZADO = '70' +TIPO_SERVICO_PAGAMENTO_CREDENCIADOS = '75' +TIPO_SERVICO_PAGAMENTO_DE_REMUNERACAO = '77' +TIPO_SERVICO_PAGAMENTO_REPRESENTANTES_VENDEDORES_AUTORIZADOS = '80' +TIPO_SERVICO_PAGAMENTO_BENEFICIOS = '90' +TIPO_SERVICO_PAGAMENTOS_DIVERSOS = '98' diff --git a/cnab240/tipos/arquivo.py b/cnab240/tipos/arquivo.py index b99ab88..df6e4e6 100644 --- a/cnab240/tipos/arquivo.py +++ b/cnab240/tipos/arquivo.py @@ -1,10 +1,21 @@ -# -*- encoding: utf8 -*- +# -*- coding: utf-8 -*- +from __future__ import division, print_function, unicode_literals import codecs from datetime import datetime -from .. import errors + from evento import Evento from lote import Lote +from .. import errors +from ..constantes import ( + TIPO_REGISTRO_HEADER_ARQUIVO, + TIPO_REGISTRO_HEADER_LOTE, + TIPO_REGISTRO_DETALHE, + TIPO_REGISTRO_TRAILER_LOTE, + TIPO_REGISTRO_TRAILER_ARQUIVO, + TIPO_OPERACAO_ARQUIVO_RETORNO, + TIPO_SERVICO_COBRANCA, +) class Arquivo(object): @@ -45,26 +56,26 @@ def carregar_retorno(self, arquivo): for linha in arquivo: tipo_registro = linha[7] - if tipo_registro == '0': + if tipo_registro == TIPO_REGISTRO_HEADER_ARQUIVO: self.header = self.banco.registros.HeaderArquivo() self.header.carregar(linha) - elif tipo_registro == '1': + elif tipo_registro == TIPO_REGISTRO_HEADER_LOTE: codigo_servico = linha[9:11] - if codigo_servico == '01': + if codigo_servico == TIPO_SERVICO_COBRANCA: header_lote = self.banco.registros.HeaderLoteCobranca() header_lote.carregar(linha) trailer_lote = self.banco.registros.TrailerLoteCobranca() lote_aberto = Lote(self.banco, header_lote, trailer_lote) self._lotes.append(lote_aberto) - elif tipo_registro == '3': + elif tipo_registro == TIPO_REGISTRO_DETALHE: tipo_segmento = linha[13] codigo_evento = linha[15:17] - if tipo_segmento == 'T': + if tipo_segmento == TIPO_OPERACAO_ARQUIVO_RETORNO: seg_t = self.banco.registros.SegmentoT() seg_t.carregar(linha) @@ -78,13 +89,13 @@ def carregar_retorno(self, arquivo): evento_aberto._segmentos.append(seg_u) evento_aberto = None - elif tipo_registro == '5': + elif tipo_registro == TIPO_REGISTRO_TRAILER_LOTE: if trailer_lote is not None: lote_aberto.trailer.carregar(linha) else: raise Exception - elif tipo_registro == '9': + elif tipo_registro == TIPO_REGISTRO_TRAILER_ARQUIVO: self.trailer = self.banco.registros.TrailerArquivo() self.trailer.carregar(linha) @@ -202,4 +213,4 @@ def __unicode__(self): result.append(unicode(self.trailer)) # Adicionar elemento vazio para arquivo terminar com \r\n result.append(u'') - return u'\r\n'.join(result) \ No newline at end of file + return u'\r\n'.join(result) From f7d00dde451597246047144f80974462af1a36d5 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 02:42:51 -0300 Subject: [PATCH 55/81] [REF] import future --- cnab240/errors.py | 2 ++ cnab240/eventos/cobranca.py | 2 ++ cnab240/lotes/cobranca.py | 2 ++ cnab240/registro.py | 17 ++++++++++------- cnab240/tipos/evento.py | 3 ++- tests/test_arquivo.py | 6 +++--- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/cnab240/errors.py b/cnab240/errors.py index 853687f..1cca58a 100644 --- a/cnab240/errors.py +++ b/cnab240/errors.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +from __future__ import division, print_function, unicode_literals + class Cnab240Error(Exception): """Excessao base para o CNAB 240""" diff --git a/cnab240/eventos/cobranca.py b/cnab240/eventos/cobranca.py index 0832b68..f877272 100644 --- a/cnab240/eventos/cobranca.py +++ b/cnab240/eventos/cobranca.py @@ -1,4 +1,6 @@ +from __future__ import division, print_function, unicode_literals + from cnab240.tipos import EventoBase diff --git a/cnab240/lotes/cobranca.py b/cnab240/lotes/cobranca.py index 89abfde..43954ba 100644 --- a/cnab240/lotes/cobranca.py +++ b/cnab240/lotes/cobranca.py @@ -1,4 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import division, print_function, unicode_literals from cnab240.tipos import LoteBase diff --git a/cnab240/registro.py b/cnab240/registro.py index 11db67e..705e456 100644 --- a/cnab240/registro.py +++ b/cnab240/registro.py @@ -1,3 +1,6 @@ +# -*- coding: utf-8 -*- + +from __future__ import division, print_function, unicode_literals import os import json @@ -26,32 +29,32 @@ def valor(self): def valor(self, valor): if self.formato == 'alfa': if not isinstance(valor, unicode): - print "{0} - {1}".format(self.nome, self.valor) + print ("{0} - {1}".format(self.nome, self.valor)) raise errors.TipoError(self, valor) if len(valor) > self.digitos: raise errors.NumDigitosExcedidoError(self, valor) - print "{0} - {1}".format(self.nome, self.valor) + print ("{0} - {1}".format(self.nome, self.valor)) elif self.decimais: if not isinstance(valor, Decimal): - print "{0} - {1}".format(self.nome, self.valor) + print ("{0} - {1}".format(self.nome, self.valor)) raise errors.TipoError(self, valor) num_decimais = valor.as_tuple().exponent * -1 if num_decimais != self.decimais: - print "{0} - {1}".format(self.nome, self.valor) + print ("{0} - {1}".format(self.nome, self.valor)) raise errors.NumDecimaisError(self, valor) if len(str(valor).replace('.', '')) > self.digitos: - print "{0} - {1}".format(self.nome, self.valor) + print ("{0} - {1}".format(self.nome, self.valor)) raise errors.NumDigitosExcedidoError(self, valor) else: if not isinstance(valor, (int, long)): - print "{0} - {1}".format(self.nome, self.valor) + print ("{0} - {1}".format(self.nome, self.valor)) raise errors.TipoError(self, valor) if len(str(valor)) > self.digitos: - print "{0} - {1}".format(self.nome, self.valor) + print ("{0} - {1}".format(self.nome, self.valor)) raise errors.NumDigitosExcedidoError(self, valor) self._valor = valor diff --git a/cnab240/tipos/evento.py b/cnab240/tipos/evento.py index 05a102a..58589b7 100644 --- a/cnab240/tipos/evento.py +++ b/cnab240/tipos/evento.py @@ -1,5 +1,6 @@ -# -*- encoding: utf8 -*- +# -*- coding: utf-8 -*- +from __future__ import division, print_function, unicode_literals class Evento(object): diff --git a/tests/test_arquivo.py b/tests/test_arquivo.py index d5aaa81..4309616 100644 --- a/tests/test_arquivo.py +++ b/tests/test_arquivo.py @@ -24,15 +24,15 @@ def setUp(self): self.itau_data = get_itau_data_from_dict() self.arquivo = Arquivo(itau, **self.itau_data['arquivo']) - def test_unicode(self): + def test_itau_remessa_cobranca_unicode(self): self.arquivo.incluir_cobranca(**self.itau_data['cobranca']) self.assertEqual(unicode(self.arquivo), get_itau_file_remessa()) - def test_empty_data(self): + def test_itau_arquivo_vazio(self): arquivo = Arquivo(itau) self.assertRaises(errors.ArquivoVazioError, unicode, arquivo) - def test_leitura(self): + def test_itau_retorno_cobranca(self): return_file_path = os.path.join(ARQS_DIRPATH, 'cobranca.itau.ret') ret_file = codecs.open(return_file_path, encoding='ascii') arquivo = Arquivo(itau, arquivo=ret_file) From db8d4fb761eb9b346e0c5874ead3c2c7217ed329 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 02:43:18 -0300 Subject: [PATCH 56/81] [REF] Nome dos testes --- tests/test_banco_brasil_pagamento.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_banco_brasil_pagamento.py b/tests/test_banco_brasil_pagamento.py index 76f6044..a433931 100644 --- a/tests/test_banco_brasil_pagamento.py +++ b/tests/test_banco_brasil_pagamento.py @@ -27,7 +27,7 @@ def setUp(self): self.data = get_banco_brasil_data_from_dict() self.arquivo = Arquivo(bancodobrasil, **self.data['header']) - def test_unicode(self): + def test_banco_do_brasil_pagamento(self): for evento in self.data['pagamento']: self.arquivo.incluir_debito_pagamento( @@ -39,7 +39,7 @@ def test_unicode(self): # get_banco_brasil_file_remessa() # ) - def test_empty_data(self): + def test_banco_do_brasil_arquivo_vazio(self): arquivo = Arquivo(bancodobrasil) self.assertRaises(errors.ArquivoVazioError, unicode, arquivo) From 4e2d52d26cfcf631059feda2bfb3b06cd2e5a111 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 02:43:37 -0300 Subject: [PATCH 57/81] =?UTF-8?q?[REM]=20import=20n=C3=A3o=20usado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/tipos/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/cnab240/tipos/__init__.py b/cnab240/tipos/__init__.py index 2ffcd43..0c8f942 100644 --- a/cnab240/tipos/__init__.py +++ b/cnab240/tipos/__init__.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- -from .. import errors - from .arquivo import Arquivo from .evento import Evento from .lote import Lote \ No newline at end of file From 07b34e996b1fbd89361a7565629d801fe44092e4 Mon Sep 17 00:00:00 2001 From: fernandomr Date: Thu, 24 Sep 2015 18:14:30 -0300 Subject: [PATCH 58/81] Itau, Cef, Bradesco 240. Bradesco Pag For 500 --- bradesco/__init__.py | 0 bradesco/specs/header_arquivo.json | 179 +++++++++++++ bradesco/specs/header_lote_cobranca.json | 171 ++++++++++++ bradesco/specs/segmento_p.json | 308 ++++++++++++++++++++++ bradesco/specs/segmento_q.json | 162 ++++++++++++ bradesco/specs/segmento_r.json | 216 +++++++++++++++ bradesco/specs/segmento_t.json | 214 +++++++++++++++ bradesco/specs/segmento_u.json | 186 +++++++++++++ bradesco/specs/spec_to_doc.py | 28 ++ bradesco/specs/trailer_arquivo.json | 64 +++++ bradesco/specs/trailer_lote_cobranca.json | 117 ++++++++ 11 files changed, 1645 insertions(+) create mode 100644 bradesco/__init__.py create mode 100644 bradesco/specs/header_arquivo.json create mode 100644 bradesco/specs/header_lote_cobranca.json create mode 100644 bradesco/specs/segmento_p.json create mode 100644 bradesco/specs/segmento_q.json create mode 100644 bradesco/specs/segmento_r.json create mode 100644 bradesco/specs/segmento_t.json create mode 100644 bradesco/specs/segmento_u.json create mode 100644 bradesco/specs/spec_to_doc.py create mode 100644 bradesco/specs/trailer_arquivo.json create mode 100644 bradesco/specs/trailer_lote_cobranca.json diff --git a/bradesco/__init__.py b/bradesco/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bradesco/specs/header_arquivo.json b/bradesco/specs/header_arquivo.json new file mode 100644 index 0000000..1c59882 --- /dev/null +++ b/bradesco/specs/header_arquivo.json @@ -0,0 +1,179 @@ +{ + "nome": "HeaderArquivo", + "campos": { + "01.0": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.0": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.0": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 0 + }, + + "04.0": { + "nome": "febraban_cnab04d0", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.0": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "06.0": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "num" + }, + + "07.0": { + "nome": "cedente_convenio", + "posicao_inicio": 33, + "posicao_fim": 52, + "formato": "alfa", + "default": "" + }, + + "08.0": { + "nome": "cedente_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num" + }, + + "09.0": { + "nome": "cedente_conta_ag_dv", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "alfa" + }, + + "10.0": { + "nome": "cedente_conta_num", + "posicao_inicio": 59, + "posicao_fim": 70, + "formato": "num" + }, + + "11.0": { + "nome": "cedente_conta_conta_dv", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa" + }, + + "12.0": { + "nome": "cedente_conta_dv", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "13.0": { + "nome": "cedente_nome", + "posicao_inicio": 73, + "posicao_fim": 102, + "formato": "alfa" + }, + + "14.0": { + "nome": "nome_banco", + "posicao_inicio": 103, + "posicao_fim": 132, + "formato": "alfa" + }, + + "15.0": { + "nome": "febraban_cnab15d0", + "posicao_inicio": 133, + "posicao_fim": 142, + "formato": "alfa", + "default": "" + }, + + "16.0": { + "nome": "arq_cod", + "posicao_inicio": 143, + "posicao_fim": 143, + "formato": "num" + }, + + "17.0": { + "nome": "arq_data", + "posicao_inicio": 144, + "posicao_fim": 151, + "formato": "num" + }, + + "18.0": { + "nome": "arq_hora", + "posicao_inicio": 152, + "posicao_fim": 157, + "formato": "num" + }, + + "19.0": { + "nome": "arq_seq", + "posicao_inicio": 158, + "posicao_fim": 163, + "formato": "num" + }, + + "20.0": { + "nome": "arq_layout", + "posicao_inicio": 164, + "posicao_fim": 166, + "formato": "num", + "default": 84 + }, + + "21.0": { + "nome": "arq_densidade", + "posicao_inicio": 167, + "posicao_fim": 171, + "formato": "num" + }, + + "22.0": { + "nome": "reservado_banco", + "posicao_inicio": 172, + "posicao_fim": 191, + "formato": "alfa" + }, + + "23.0": { + "nome": "reservado_empresa", + "posicao_inicio": 192, + "posicao_fim": 211, + "formato": "alfa" + }, + + "24.0": { + "nome": "febraban_cnab24d0", + "posicao_inicio": 212, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/bradesco/specs/header_lote_cobranca.json b/bradesco/specs/header_lote_cobranca.json new file mode 100644 index 0000000..fffac83 --- /dev/null +++ b/bradesco/specs/header_lote_cobranca.json @@ -0,0 +1,171 @@ +{ + "nome": "HeaderLoteCobranca", + "campos": { + "01.1": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.1": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.1": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 1 + }, + + "04.1": { + "nome": "serv_operacao", + "posicao_inicio": 9, + "posicao_fim": 9, + "formato": "alfa" + }, + + "05.1": { + "nome": "serv_serv", + "posicao_inicio": 10, + "posicao_fim": 11, + "formato": "num", + "default": 1 + }, + + "06.1": { + "nome": "febraban_cnab06d1", + "posicao_inicio": 12, + "posicao_fim": 13, + "formato": "alfa", + "default": "" + }, + + "07.1": { + "nome": "serv_layout", + "posicao_inicio": 14, + "posicao_fim": 16, + "formato": "num", + "default": 42 + }, + + "08.1": { + "nome": "febraban_cnab08d1", + "posicao_inicio": 17, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "09.1": { + "nome": "cedente_insc_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "10.1": { + "nome": "cedente_insc_num", + "posicao_inicio": 19, + "posicao_fim": 33, + "formato": "num" + }, + + "11.1": { + "nome": "cedente_convenio", + "posicao_inicio": 34, + "posicao_fim": 53, + "formato": "alfa" + }, + + "12.1": { + "nome": "cedente_cc_ag_cod", + "posicao_inicio": 54, + "posicao_fim": 58, + "formato": "num" + }, + + "13.1": { + "nome": "cedente_cc_ag_dv", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "alfa" + }, + + "14.1": { + "nome": "cedente_cc_conta_num", + "posicao_inicio": 60, + "posicao_fim": 71, + "formato": "num" + }, + + "15.1": { + "nome": "cedente_cc_conta_dv", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "16.1": { + "nome": "cedente_cc_dv", + "posicao_inicio": 73, + "posicao_fim": 73, + "formato": "alfa" + }, + + "17.1": { + "nome": "cedente_nome", + "posicao_inicio": 74, + "posicao_fim": 103, + "formato": "alfa" + }, + + "18.1": { + "nome": "info1", + "posicao_inicio": 104, + "posicao_fim": 143, + "formato": "alfa" + }, + + "19.1": { + "nome": "info2", + "posicao_inicio": 144, + "posicao_fim": 183, + "formato": "alfa" + }, + + "20.1": { + "nome": "cont_num_r", + "posicao_inicio": 184, + "posicao_fim": 191, + "formato": "num" + }, + + "21.1": { + "nome": "controle_data", + "posicao_inicio": 192, + "posicao_fim": 199, + "formato": "num" + }, + + "22.1": { + "nome": "data_credito", + "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num" + }, + + "23.1": { + "nome": "febraban_cnab23d1", + "posicao_inicio": 208, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/bradesco/specs/segmento_p.json b/bradesco/specs/segmento_p.json new file mode 100644 index 0000000..d204459 --- /dev/null +++ b/bradesco/specs/segmento_p.json @@ -0,0 +1,308 @@ +{ + "nome": "SegmentoP", + "campos": { + "01.3P": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3P": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3P": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3P": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3P": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "P" + }, + + "06.3P": { + "nome": "febraban_cnab_06d3P", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3P": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3P": { + "nome": "cedente_ag_cod", + "posicao_inicio": 18, + "posicao_fim": 22, + "formato": "num" + }, + + "09.3P": { + "nome": "cedente_ag_dv", + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "alfa" + }, + + "10.3P": { + "nome": "cedente_conta_num", + "posicao_inicio": 24, + "posicao_fim": 35, + "formato": "num" + }, + + "11.3P": { + "nome": "cedente_conta_dv", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "alfa" + }, + + "12.3P": { + "nome": "cedente_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "alfa" + }, + + "13.3P": { + "nome": "ident_titu", + "posicao_inicio": 38, + "posicao_fim": 57, + "formato": "num" + }, + + "14.3P": { + "nome": "cobr_carteira", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num" + }, + + "15.3P": { + "nome": "cobr_cadastramento", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "num" + }, + + "16.3P": { + "nome": "cobr_documento", + "posicao_inicio": 60, + "posicao_fim": 60, + "formato": "alfa" + }, + + "17.3P": { + "nome": "cobr_emissao_bloqueto", + "posicao_inicio": 61, + "posicao_fim": 61, + "formato": "num" + }, + + "18.3P": { + "nome": "cobr_distrib_bloqueto", + "posicao_inicio": 62, + "posicao_fim": 62, + "formato": "alfa" + }, + + "19.3P": { + "nome": "num_doc", + "posicao_inicio": 63, + "posicao_fim": 77, + "formato": "alfa" + }, + + "20.3P": { + "nome": "vencimento", + "posicao_inicio": 78, + "posicao_fim": 85, + "formato": "num" + }, + + "21.3P": { + "nome": "valor_titulo", + "posicao_inicio": 86, + "posicao_fim": 100, + "formato": "num", + "decimais": 2 + }, + + "22.3P": { + "nome": "ag_cobradora", + "posicao_inicio": 101, + "posicao_fim": 105, + "formato": "num" + }, + + "23.3P": { + "nome": "ag_cobradora_dv", + "posicao_inicio": 106, + "posicao_fim": 106, + "formato": "alfa" + }, + + "24.3P": { + "nome": "esp_titulo", + "posicao_inicio": 107, + "posicao_fim": 108, + "formato": "num" + }, + + "25.3P": { + "nome": "ident_aceite", + "posicao_inicio": 109, + "posicao_fim": 109, + "formato": "alfa" + }, + + "26.3P": { + "nome": "data_emissao_titulo", + "posicao_inicio": 110, + "posicao_fim": 117, + "formato": "num" + }, + + "27.3P": { + "nome": "juros_cod", + "posicao_inicio": 118, + "posicao_fim": 118, + "formato": "num" + }, + + "28.3P": { + "nome": "juros_data", + "posicao_inicio": 119, + "posicao_fim": 126, + "formato": "num" + }, + + "29.3P": { + "nome": "juros_mora_valor", + "posicao_inicio": 127, + "posicao_fim": 141, + "formato": "num", + "decimais": 2 + }, + + "30.3P": { + "nome": "desc1_cod", + "posicao_inicio": 142, + "posicao_fim": 142, + "formato": "num" + }, + + "31.3P": { + "nome": "desc1_data", + "posicao_inicio": 143, + "posicao_fim": 150, + "formato": "num" + }, + + "32.3P": { + "nome": "desc1_valor", + "posicao_inicio": 151, + "posicao_fim": 156, + "formato": "num", + "decimais": 2 + }, + + "33.3P": { + "nome": "valor_iof", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2 + }, + + "34.3P": { + "nome": "valor_abatimento", + "posicao_inicio": 181, + "posicao_fim": 195, + "formato": "num", + "decimais": 2 + }, + + "35.3P": { + "nome": "uso_empresa_cedente", + "posicao_inicio": 196, + "posicao_fim": 220, + "formato": "alfa" + }, + + "36.3P": { + "nome": "codigo_protesto", + "posicao_inicio": 221, + "posicao_fim": 221, + "formato": "num" + }, + + "37.3P": { + "nome": "prazo_protesto", + "posicao_inicio": 222, + "posicao_fim": 223, + "formato": "num" + }, + + "38.3P": { + "nome": "codigo_baixa_dev", + "posicao_inicio": 224, + "posicao_fim": 224, + "formato": "num" + }, + + "39.3P": { + "nome": "prazo_baixa", + "posicao_inicio": 225, + "posicao_fim": 227, + "formato": "alfa" + }, + + "40.3P": { + "nome": "codigo_moeda", + "posicao_inicio": 228, + "posicao_fim": 229, + "formato": "num" + }, + + "41.3P": { + "nome": "num_contrato", + "posicao_inicio": 230, + "posicao_fim": 239, + "formato": "num" + }, + + "42.3P": { + "nome": "febraban_cnab_42d3P", + "posicao_inicio": 240, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/bradesco/specs/segmento_q.json b/bradesco/specs/segmento_q.json new file mode 100644 index 0000000..b7114b0 --- /dev/null +++ b/bradesco/specs/segmento_q.json @@ -0,0 +1,162 @@ +{ + "nome": "SegmentoQ", + "campos": { + "01.3Q": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3Q": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3Q": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3Q": { + "nome": "servico_num_reg", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3Q": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "Q" + }, + + "06.3Q": { + "nome": "febraban_cnab06d3Q", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3Q": { + "nome": "servico_cod_mov", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3Q": { + "nome": "pagador_insc_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "09.3Q": { + "nome": "pagador_insc_num", + "posicao_inicio": 19, + "posicao_fim": 33, + "formato": "num" + }, + + "10.3Q": { + "nome": "pagador_nome", + "posicao_inicio": 34, + "posicao_fim": 73, + "formato": "alfa" + }, + + "11.3Q": { + "nome": "pagador_endereco", + "posicao_inicio": 74, + "posicao_fim": 113, + "formato": "alfa" + }, + + "12.3Q": { + "nome": "pagador_bairro", + "posicao_inicio": 114, + "posicao_fim": 128, + "formato": "alfa" + }, + + "13.3Q": { + "nome": "pagador_cep", + "posicao_inicio": 129, + "posicao_fim": 133, + "formato": "num" + }, + + "14.3Q": { + "nome": "pagador_cep_sufixo", + "posicao_inicio": 134, + "posicao_fim": 136, + "formato": "num" + }, + + "15.3Q": { + "nome": "pagador_cidade", + "posicao_inicio": 137, + "posicao_fim": 151, + "formato": "alfa" + }, + + "16.3Q": { + "nome": "pagador_uf", + "posicao_inicio": 152, + "posicao_fim": 153, + "formato": "alfa" + }, + + "17.3Q": { + "nome": "sacador_insc_tipo", + "posicao_inicio": 154, + "posicao_fim": 154, + "formato": "num" + }, + + "18.3Q": { + "nome": "sacador_insc_num", + "posicao_inicio": 155, + "posicao_fim": 169, + "formato": "num" + }, + + "19.3Q": { + "nome": "sacador_nome", + "posicao_inicio": 170, + "posicao_fim": 209, + "formato": "alfa" + }, + + "20.3Q": { + "nome": "banco_corresp", + "posicao_inicio": 210, + "posicao_fim": 212, + "formato": "num" + }, + + "21.3Q": { + "nome": "nosso_num_bco_corresp", + "posicao_inicio": 213, + "posicao_fim": 232, + "formato": "alfa" + }, + + "22.3Q": { + "nome": "febraban_cnab22d3Q", + "posicao_inicio": 233, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/bradesco/specs/segmento_r.json b/bradesco/specs/segmento_r.json new file mode 100644 index 0000000..0050611 --- /dev/null +++ b/bradesco/specs/segmento_r.json @@ -0,0 +1,216 @@ +{ + "nome": "SegmentoR", + "campos": { + "01.3R": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3R": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3R": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3R": { + "nome": "serv_num", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3R": { + "nome": "serv_seg", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "R" + }, + + "06.3R": { + "nome": "febraban_cnab06d3R", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3R": { + "nome": "serv_cod", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3R": { + "nome": "desc2_cod", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "09.3R": { + "nome": "desc2_data", + "posicao_inicio": 19, + "posicao_fim": 26, + "formato": "num" + }, + + "10.3R": { + "nome": "desc2_desc2", + "posicao_inicio": 27, + "posicao_fim": 41, + "formato": "num", + "decimais": 2 + }, + + "11.3R": { + "nome": "desc3_cod", + "posicao_inicio": 42, + "posicao_fim": 42, + "formato": "num" + }, + + "12.3R": { + "nome": "desc3_data", + "posicao_inicio": 43, + "posicao_fim": 50, + "formato": "num" + }, + + "13.3R": { + "nome": "desc3_desc3", + "posicao_inicio": 51, + "posicao_fim": 65, + "formato": "num", + "decimais": 2 + }, + + "14.3R": { + "nome": "multa_cod", + "posicao_inicio": 66, + "posicao_fim": 66, + "formato": "alfa" + }, + + "15.3R": { + "nome": "multa_data", + "posicao_inicio": 67, + "posicao_fim": 74, + "formato": "num" + }, + + "16.3R": { + "nome": "multa_multa", + "posicao_inicio": 75, + "posicao_fim": 89, + "formato": "num", + "decimais": 2 + }, + + "17.3R": { + "nome": "info_pagador", + "posicao_inicio": 90, + "posicao_fim": 99, + "formato": "alfa" + }, + + "18.3R": { + "nome": "info3", + "posicao_inicio": 100, + "posicao_fim": 139, + "formato": "alfa" + }, + + "19.3R": { + "nome": "info4", + "posicao_inicio": 140, + "posicao_fim": 179, + "formato": "alfa" + }, + + "20.3R": { + "nome": "febraban_cnab20d3R", + "posicao_inicio": 180, + "posicao_fim": 199, + "formato": "alfa", + "default": "" + }, + + "21.3R": { + "nome": "cod_ocor_pag", + "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num" + }, + + "22.3R": { + "nome": "dados_deb_banco", + "posicao_inicio": 208, + "posicao_fim": 210, + "formato": "num" + }, + + "23.3R": { + "nome": "dados_deb_ag_cod", + "posicao_inicio": 211, + "posicao_fim": 215, + "formato": "num" + }, + + "24.3R": { + "nome": "dados_deb_ag_dv", + "posicao_inicio": 216, + "posicao_fim": 216, + "formato": "alfa" + }, + + "25.3R": { + "nome": "dados_deb_cc_cod", + "posicao_inicio": 217, + "posicao_fim": 228, + "formato": "num" + }, + + "26.3R": { + "nome": "dados_deb_cc_dv", + "posicao_inicio": 229, + "posicao_fim": 229, + "formato": "alfa" + }, + + "27.3R": { + "nome": "dados_deb_dv", + "posicao_inicio": 230, + "posicao_fim": 230, + "formato": "alfa" + }, + + "28.3R": { + "nome": "ident_emissao", + "posicao_inicio": 231, + "posicao_fim": 231, + "formato": "num" + }, + + "29.3R": { + "nome": "febraban_cnab29d3R", + "posicao_inicio": 232, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/bradesco/specs/segmento_t.json b/bradesco/specs/segmento_t.json new file mode 100644 index 0000000..ffe74b8 --- /dev/null +++ b/bradesco/specs/segmento_t.json @@ -0,0 +1,214 @@ +{ + "nome": "SegmentoT", + "campos": { + "01.3T": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3T": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3T": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3T": { + "nome": "serv_num", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3T": { + "nome": "serv_seg", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "T" + }, + + "06.3T": { + "nome": "febraban_cnab06d3T", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3T": { + "nome": "serv_cod", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3T": { + "nome": "cc_ag_cod", + "posicao_inicio": 18, + "posicao_fim": 22, + "formato": "num" + }, + + "09.3T": { + "nome": "cc_ag_dv", + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "num" + }, + + "10.3T": { + "nome": "cc_conta_num", + "posicao_inicio": 24, + "posicao_fim": 35, + "formato": "num" + }, + + "11.3T": { + "nome": "cc_conta_dv", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "num" + }, + + "12.3T": { + "nome": "cc_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "num" + }, + + "13.3T": { + "nome": "nosso_num", + "posicao_inicio": 38, + "posicao_fim": 57, + "formato": "alfa" + }, + + "14.3T": { + "nome": "carteira_cod", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num" + }, + + "15.3T": { + "nome": "num_doc", + "posicao_inicio": 59, + "posicao_fim": 73, + "formato": "alfa" + }, + + "16.3T": { + "nome": "vencimento_data", + "posicao_inicio": 74, + "posicao_fim": 81, + "formato": "num" + }, + + "17.3T": { + "nome": "valor_titulo", + "posicao_inicio": 82, + "posicao_fim": 96, + "formato": "num", + "decimais": 2 + }, + + "18.3T": { + "nome": "banco_num", + "posicao_inicio": 97, + "posicao_fim": 99, + "formato": "num" + }, + + "19.3T": { + "nome": "ag_cobr_rec", + "posicao_inicio": 100, + "posicao_fim": 104, + "formato": "num" + }, + + "20.3T": { + "nome": "ag_dv", + "posicao_inicio": 105, + "posicao_fim": 105, + "formato": "num" + }, + + "21.3T": { + "nome": "ident_tit_empresa", + "posicao_inicio": 106, + "posicao_fim": 130, + "formato": "alfa" + }, + + "22.3T": { + "nome": "cod_moeda", + "posicao_inicio": 131, + "posicao_fim": 132, + "formato": "num" + }, + + "23.3T": { + "nome": "pagador_insc_tipo", + "posicao_inicio": 133, + "posicao_fim": 133, + "formato": "num" + }, + + "24.3T": { + "nome": "pagador_insc_num", + "posicao_inicio": 134, + "posicao_fim": 148, + "formato": "num" + }, + + "25.3T": { + "nome": "pagador_nome", + "posicao_inicio": 149, + "posicao_fim": 188, + "formato": "alfa" + }, + + "26.3T": { + "nome": "num_contrato", + "posicao_inicio": 189, + "posicao_fim": 198, + "formato": "num" + }, + + "27.3T": { + "nome": "valor_tar_custas", + "posicao_inicio": 199, + "posicao_fim": 213, + "formato": "num", + "decimais": 2 + }, + + "28.3T": { + "nome": "motivo_ocorrencia", + "posicao_inicio": 214, + "posicao_fim": 223, + "formato": "alfa" + }, + + "29.3T": { + "nome": "febraban_cnab29d3T", + "posicao_inicio": 224, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/bradesco/specs/segmento_u.json b/bradesco/specs/segmento_u.json new file mode 100644 index 0000000..635023b --- /dev/null +++ b/bradesco/specs/segmento_u.json @@ -0,0 +1,186 @@ +{ + "nome": "SegmentoU", + "campos": { + "01.3U": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3U": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3U": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3U": { + "nome": "serv_num", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3U": { + "nome": "serv_seg", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "U" + }, + + "06.3U": { + "nome": "febraban_cnab06d3U", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3U": { + "nome": "serv_cod", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3U": { + "nome": "dados_titu_acresc", + "posicao_inicio": 18, + "posicao_fim": 32, + "formato": "num", + "decimais": 2 + }, + + "09.3U": { + "nome": "dados_titu_desconto", + "posicao_inicio": 33, + "posicao_fim": 47, + "formato": "num", + "decimais": 2 + }, + + "10.3U": { + "nome": "dados_titu_abatimento", + "posicao_inicio": 48, + "posicao_fim": 62, + "formato": "num", + "decimais": 2 + }, + + "11.3U": { + "nome": "dados_titu_iof", + "posicao_inicio": 63, + "posicao_fim": 77, + "formato": "num", + "decimais": 2 + }, + + "12.3U": { + "nome": "dados_titu_valor_pg", + "posicao_inicio": 78, + "posicao_fim": 92, + "formato": "num", + "decimais": 2 + }, + + "13.3U": { + "nome": "dados_titu_valor_liq", + "posicao_inicio": 93, + "posicao_fim": 107, + "formato": "num", + "decimais": 2 + }, + + "14.3U": { + "nome": "outras_despesas", + "posicao_inicio": 108, + "posicao_fim": 122, + "formato": "num", + "decimais": 2 + }, + + "15.3U": { + "nome": "outros_creditos", + "posicao_inicio": 123, + "posicao_fim": 137, + "formato": "num", + "decimais": 2 + }, + + "16.3U": { + "nome": "data_ocorr", + "posicao_inicio": 138, + "posicao_fim": 145, + "formato": "num" + }, + + "17.3U": { + "nome": "data_cred", + "posicao_inicio": 146, + "posicao_fim": 153, + "formato": "num" + }, + + "18.3U": { + "nome": "ocorr_pag_cod", + "posicao_inicio": 154, + "posicao_fim": 157, + "formato": "alfa" + }, + + "19.3U": { + "nome": "ocorr_pag_data", + "posicao_inicio": 158, + "posicao_fim": 165, + "formato": "alfa" + }, + + "20.3U": { + "nome": "ocorr_pag_valor", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2 + }, + + "21.3U": { + "nome": "ocorr_pag_compl", + "posicao_inicio": 181, + "posicao_fim": 210, + "formato": "alfa" + }, + + "22.3U": { + "nome": "cod_bco_ocorr", + "posicao_inicio": 211, + "posicao_fim": 213, + "formato": "num" + }, + + "23.3U": { + "nome": "nosso_num_bco_corr", + "posicao_inicio": 214, + "posicao_fim": 233, + "formato": "num" + }, + + "24.3U": { + "nome": "febraban_cnab24d3U", + "posicao_inicio": 234, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/bradesco/specs/spec_to_doc.py b/bradesco/specs/spec_to_doc.py new file mode 100644 index 0000000..74519b6 --- /dev/null +++ b/bradesco/specs/spec_to_doc.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import sys +import json +from collections import OrderedDict + +fname = sys.argv[1] +f = file(fname) +spec = json.load(f, object_pairs_hook=OrderedDict) +f.close() + +campos = spec.get('campos') +for campo in campos.values(): + campo_nome = campo.get('nome') + campo_formato = campo.get('formato') + campo_decimais = campo.get('decimais') + + if campo_decimais: + tipo = 'Decimal ({0} digitos)'.format(campo_decimais) + elif campo_formato == 'alfa': + tipo = 'str' + else: + tipo = 'int' + + print (' '* 8) + ':param {0}:'.format(campo_nome) + print (' '* 8) + ':type {0}: {1}'.format(campo_nome, tipo) + print + diff --git a/bradesco/specs/trailer_arquivo.json b/bradesco/specs/trailer_arquivo.json new file mode 100644 index 0000000..1cc7759 --- /dev/null +++ b/bradesco/specs/trailer_arquivo.json @@ -0,0 +1,64 @@ +{ + "nome": "TrailerArquivo", + "campos": { + "01.9": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.9": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 9999 + }, + + "03.9": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 9 + }, + + "04.9": { + "nome": "febraban_cnab04d9", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.9": { + "nome": "totais_quantidade_lotes", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num" + }, + + "06.9": { + "nome": "totais_quantidade_registros", + "posicao_inicio": 24, + "posicao_fim": 29, + "formato": "num" + }, + + "07.9": { + "nome": "totais_quantidade_contas_concil", + "posicao_inicio": 30, + "posicao_fim": 35, + "formato": "num" + }, + + "08.9": { + "nome": "febraban_cnab08d9", + "posicao_inicio": 36, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/bradesco/specs/trailer_lote_cobranca.json b/bradesco/specs/trailer_lote_cobranca.json new file mode 100644 index 0000000..b6b2dea --- /dev/null +++ b/bradesco/specs/trailer_lote_cobranca.json @@ -0,0 +1,117 @@ +{ + "nome": "TrailerLoteCobranca", + "campos": { + "01.5": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.5": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.5": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 5 + }, + + "04.5": { + "nome": "febraban_cnab04d5", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.5": { + "nome": "qtde_reg", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num" + }, + + "06.5": { + "nome": "tot_cobranca_simples_qtde", + "posicao_inicio": 24, + "posicao_fim": 29, + "formato": "num" + }, + + "07.5": { + "nome": "tot_cobranca_simples_valor", + "posicao_inicio": 30, + "posicao_fim": 46, + "formato": "num", + "decimais": 2 + }, + + "08.5": { + "nome": "tot_cobranca_vinc_qtde", + "posicao_inicio": 47, + "posicao_fim": 52, + "formato": "num" + }, + + "09.5": { + "nome": "tot_cobranca_vinc_valor", + "posicao_inicio": 53, + "posicao_fim": 69, + "formato": "num", + "decimais": 2 + }, + + "10.5": { + "nome": "tot_cobranca_cauc_qtde_cobr", + "posicao_inicio": 70, + "posicao_fim": 75, + "formato": "num" + }, + + "11.5": { + "nome": "tot_cobranca_cauc_qtde_cart", + "posicao_inicio": 76, + "posicao_fim": 92, + "formato": "num", + "decimais": 2 + }, + + "12.5": { + "nome": "tot_cobranca_desc_qtde_cobr", + "posicao_inicio": 93, + "posicao_fim": 98, + "formato": "num" + }, + + "13.5": { + "nome": "tot_cobranca_desc_valor_cart", + "posicao_inicio": 99, + "posicao_fim": 115, + "formato": "num", + "decimais": 2 + }, + + "14.5": { + "nome": "num_aviso", + "posicao_inicio": 116, + "posicao_fim": 123, + "formato": "alfa" + }, + + "15.5": { + "nome": "febraban_cnab15d5", + "posicao_inicio": 124, + "posicao_fim": 240, + "formato": "alfa", + "decimais": "" + } + + } +} From f0b36f7602f971efc2e6be84d4d90192f396b733 Mon Sep 17 00:00:00 2001 From: fernandomr Date: Fri, 2 Oct 2015 17:08:25 -0300 Subject: [PATCH 59/81] =?UTF-8?q?altera=C3=A7=C3=B5es=20na=20lib=20para=20?= =?UTF-8?q?emitir=20bradesco240?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bradesco/specs/header_arquivo.json | 12 ++++++------ bradesco/specs/header_lote_cobranca.json | 4 ++-- bradesco/specs/segmento_p.json | 8 ++++---- bradesco/specs/trailer_lote_cobranca.json | 14 +++++++++----- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/bradesco/specs/header_arquivo.json b/bradesco/specs/header_arquivo.json index 1c59882..13b3f40 100644 --- a/bradesco/specs/header_arquivo.json +++ b/bradesco/specs/header_arquivo.json @@ -112,35 +112,35 @@ }, "16.0": { - "nome": "arq_cod", + "nome": "arquivo_codigo", "posicao_inicio": 143, "posicao_fim": 143, "formato": "num" }, "17.0": { - "nome": "arq_data", + "nome": "arquivo_data_de_geracao", "posicao_inicio": 144, "posicao_fim": 151, "formato": "num" }, "18.0": { - "nome": "arq_hora", + "nome": "arquivo_hora_de_geracao", "posicao_inicio": 152, "posicao_fim": 157, "formato": "num" }, "19.0": { - "nome": "arq_seq", + "nome": "arquivo_sequencia", "posicao_inicio": 158, "posicao_fim": 163, "formato": "num" }, "20.0": { - "nome": "arq_layout", + "nome": "arquivo_layout", "posicao_inicio": 164, "posicao_fim": 166, "formato": "num", @@ -148,7 +148,7 @@ }, "21.0": { - "nome": "arq_densidade", + "nome": "arquivo_densidade", "posicao_inicio": 167, "posicao_fim": 171, "formato": "num" diff --git a/bradesco/specs/header_lote_cobranca.json b/bradesco/specs/header_lote_cobranca.json index fffac83..defb93f 100644 --- a/bradesco/specs/header_lote_cobranca.json +++ b/bradesco/specs/header_lote_cobranca.json @@ -140,14 +140,14 @@ }, "20.1": { - "nome": "cont_num_r", + "nome": "controlecob_numero", "posicao_inicio": 184, "posicao_fim": 191, "formato": "num" }, "21.1": { - "nome": "controle_data", + "nome": "controlecob_data_gravacao", "posicao_inicio": 192, "posicao_fim": 199, "formato": "num" diff --git a/bradesco/specs/segmento_p.json b/bradesco/specs/segmento_p.json index d204459..5578349 100644 --- a/bradesco/specs/segmento_p.json +++ b/bradesco/specs/segmento_p.json @@ -202,7 +202,7 @@ }, "29.3P": { - "nome": "juros_mora_valor", + "nome": "juros_mora_taxa_dia", "posicao_inicio": 127, "posicao_fim": 141, "formato": "num", @@ -210,21 +210,21 @@ }, "30.3P": { - "nome": "desc1_cod", + "nome": "desconto1_cod", "posicao_inicio": 142, "posicao_fim": 142, "formato": "num" }, "31.3P": { - "nome": "desc1_data", + "nome": "desconto1_data", "posicao_inicio": 143, "posicao_fim": 150, "formato": "num" }, "32.3P": { - "nome": "desc1_valor", + "nome": "desconto1_percentual", "posicao_inicio": 151, "posicao_fim": 156, "formato": "num", diff --git a/bradesco/specs/trailer_lote_cobranca.json b/bradesco/specs/trailer_lote_cobranca.json index b6b2dea..226c957 100644 --- a/bradesco/specs/trailer_lote_cobranca.json +++ b/bradesco/specs/trailer_lote_cobranca.json @@ -46,11 +46,12 @@ }, "07.5": { - "nome": "tot_cobranca_simples_valor", + "nome": "cobrancasimples_valor_titulos", "posicao_inicio": 30, "posicao_fim": 46, "formato": "num", - "decimais": 2 + "decimais": 2, + "default": 0 }, "08.5": { @@ -65,7 +66,8 @@ "posicao_inicio": 53, "posicao_fim": 69, "formato": "num", - "decimais": 2 + "decimais": 2, + "default": 0 }, "10.5": { @@ -80,7 +82,8 @@ "posicao_inicio": 76, "posicao_fim": 92, "formato": "num", - "decimais": 2 + "decimais": 2, + "default": 0 }, "12.5": { @@ -95,7 +98,8 @@ "posicao_inicio": 99, "posicao_fim": 115, "formato": "num", - "decimais": 2 + "decimais": 2, + "default": 0 }, "14.5": { From ea20a86bc2c6afcf2e41a175e29943d8c7725ddd Mon Sep 17 00:00:00 2001 From: fernandomr Date: Thu, 3 Dec 2015 14:58:40 -0200 Subject: [PATCH 60/81] renomeacao de campos --- bradesco/specs/header_arquivo.json | 10 +++--- bradesco/specs/header_lote_cobranca.json | 24 ++++++------- bradesco/specs/segmento_p.json | 44 ++++++++++++------------ bradesco/specs/segmento_q.json | 34 +++++++++--------- bradesco/specs/segmento_r.json | 36 +++++++++---------- bradesco/specs/segmento_t.json | 38 ++++++++++---------- bradesco/specs/segmento_u.json | 22 ++++++------ 7 files changed, 104 insertions(+), 104 deletions(-) diff --git a/bradesco/specs/header_arquivo.json b/bradesco/specs/header_arquivo.json index 13b3f40..cdc98dc 100644 --- a/bradesco/specs/header_arquivo.json +++ b/bradesco/specs/header_arquivo.json @@ -25,7 +25,7 @@ }, "04.0": { - "nome": "febraban_cnab04d0", + "nome": "vazio1", "posicao_inicio": 9, "posicao_fim": 17, "formato": "alfa", @@ -62,28 +62,28 @@ }, "09.0": { - "nome": "cedente_conta_ag_dv", + "nome": "cedente_agencia_dv", "posicao_inicio": 58, "posicao_fim": 58, "formato": "alfa" }, "10.0": { - "nome": "cedente_conta_num", + "nome": "cedente_conta", "posicao_inicio": 59, "posicao_fim": 70, "formato": "num" }, "11.0": { - "nome": "cedente_conta_conta_dv", + "nome": "cedente_conta_dv", "posicao_inicio": 71, "posicao_fim": 71, "formato": "alfa" }, "12.0": { - "nome": "cedente_conta_dv", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 72, "posicao_fim": 72, "formato": "alfa" diff --git a/bradesco/specs/header_lote_cobranca.json b/bradesco/specs/header_lote_cobranca.json index defb93f..92bc0b5 100644 --- a/bradesco/specs/header_lote_cobranca.json +++ b/bradesco/specs/header_lote_cobranca.json @@ -24,7 +24,7 @@ }, "04.1": { - "nome": "serv_operacao", + "nome": "servico_operacao", "posicao_inicio": 9, "posicao_fim": 9, "formato": "alfa" @@ -47,7 +47,7 @@ }, "07.1": { - "nome": "serv_layout", + "nome": "servico_layout", "posicao_inicio": 14, "posicao_fim": 16, "formato": "num", @@ -63,14 +63,14 @@ }, "09.1": { - "nome": "cedente_insc_tipo", + "nome": "cedente_inscricao_tipo", "posicao_inicio": 18, "posicao_fim": 18, "formato": "num" }, "10.1": { - "nome": "cedente_insc_num", + "nome": "cedente_inscricao_numero", "posicao_inicio": 19, "posicao_fim": 33, "formato": "num" @@ -84,35 +84,35 @@ }, "12.1": { - "nome": "cedente_cc_ag_cod", + "nome": "cedente_agencia", "posicao_inicio": 54, "posicao_fim": 58, "formato": "num" }, "13.1": { - "nome": "cedente_cc_ag_dv", + "nome": "cedente_agencia_dv", "posicao_inicio": 59, "posicao_fim": 59, "formato": "alfa" }, "14.1": { - "nome": "cedente_cc_conta_num", + "nome": "cedente_conta", "posicao_inicio": 60, "posicao_fim": 71, "formato": "num" }, "15.1": { - "nome": "cedente_cc_conta_dv", + "nome": "cedente_conta_dv", "posicao_inicio": 72, "posicao_fim": 72, "formato": "alfa" }, "16.1": { - "nome": "cedente_cc_dv", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 73, "posicao_fim": 73, "formato": "alfa" @@ -126,14 +126,14 @@ }, "18.1": { - "nome": "info1", + "nome": "informacao1", "posicao_inicio": 104, "posicao_fim": 143, "formato": "alfa" }, "19.1": { - "nome": "info2", + "nome": "informacao2", "posicao_inicio": 144, "posicao_fim": 183, "formato": "alfa" @@ -154,7 +154,7 @@ }, "22.1": { - "nome": "data_credito", + "nome": "data_credito_hd_lote", "posicao_inicio": 200, "posicao_fim": 207, "formato": "num" diff --git a/bradesco/specs/segmento_p.json b/bradesco/specs/segmento_p.json index 5578349..6a322e1 100644 --- a/bradesco/specs/segmento_p.json +++ b/bradesco/specs/segmento_p.json @@ -39,7 +39,7 @@ }, "06.3P": { - "nome": "febraban_cnab_06d3P", + "nome": "vazio1", "posicao_inicio": 15, "posicao_fim": 15, "formato": "alfa", @@ -54,21 +54,21 @@ }, "08.3P": { - "nome": "cedente_ag_cod", + "nome": "cedente_agencia", "posicao_inicio": 18, "posicao_fim": 22, "formato": "num" }, "09.3P": { - "nome": "cedente_ag_dv", + "nome": "cedente_agencia_dv", "posicao_inicio": 23, "posicao_fim": 23, "formato": "alfa" }, "10.3P": { - "nome": "cedente_conta_num", + "nome": "cedente_conta", "posicao_inicio": 24, "posicao_fim": 35, "formato": "num" @@ -82,63 +82,63 @@ }, "12.3P": { - "nome": "cedente_dv", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 37, "posicao_fim": 37, "formato": "alfa" }, "13.3P": { - "nome": "ident_titu", + "nome": "identificacao_titulo_banco", "posicao_inicio": 38, "posicao_fim": 57, "formato": "num" }, "14.3P": { - "nome": "cobr_carteira", + "nome": "cobranca_carteira", "posicao_inicio": 58, "posicao_fim": 58, "formato": "num" }, "15.3P": { - "nome": "cobr_cadastramento", + "nome": "cobranca_cadastramento", "posicao_inicio": 59, "posicao_fim": 59, "formato": "num" }, "16.3P": { - "nome": "cobr_documento", + "nome": "cobranca_documentoTipo", "posicao_inicio": 60, "posicao_fim": 60, "formato": "alfa" }, "17.3P": { - "nome": "cobr_emissao_bloqueto", + "nome": "cobranca_emissaoBloqueto", "posicao_inicio": 61, "posicao_fim": 61, "formato": "num" }, "18.3P": { - "nome": "cobr_distrib_bloqueto", + "nome": "cobranca_distribuicaoBloqueto", "posicao_inicio": 62, "posicao_fim": 62, "formato": "alfa" }, "19.3P": { - "nome": "num_doc", + "nome": "numero_documento", "posicao_inicio": 63, "posicao_fim": 77, "formato": "alfa" }, "20.3P": { - "nome": "vencimento", + "nome": "vencimento_titulo", "posicao_inicio": 78, "posicao_fim": 85, "formato": "num" @@ -153,28 +153,28 @@ }, "22.3P": { - "nome": "ag_cobradora", + "nome": "agencia_cobradora", "posicao_inicio": 101, "posicao_fim": 105, "formato": "num" }, "23.3P": { - "nome": "ag_cobradora_dv", + "nome": "agencia_cobradora_dv", "posicao_inicio": 106, "posicao_fim": 106, "formato": "alfa" }, "24.3P": { - "nome": "esp_titulo", + "nome": "especie_titulo", "posicao_inicio": 107, "posicao_fim": 108, "formato": "num" }, "25.3P": { - "nome": "ident_aceite", + "nome": "aceite_titulo", "posicao_inicio": 109, "posicao_fim": 109, "formato": "alfa" @@ -188,14 +188,14 @@ }, "27.3P": { - "nome": "juros_cod", + "nome": "juros_cod_mora", "posicao_inicio": 118, "posicao_fim": 118, "formato": "num" }, "28.3P": { - "nome": "juros_data", + "nome": "juros_mora_data", "posicao_inicio": 119, "posicao_fim": 126, "formato": "num" @@ -226,7 +226,7 @@ "32.3P": { "nome": "desconto1_percentual", "posicao_inicio": 151, - "posicao_fim": 156, + "posicao_fim": 165, "formato": "num", "decimais": 2 }, @@ -248,7 +248,7 @@ }, "35.3P": { - "nome": "uso_empresa_cedente", + "nome": "identificacao_titulo_empresa", "posicao_inicio": 196, "posicao_fim": 220, "formato": "alfa" @@ -269,7 +269,7 @@ }, "38.3P": { - "nome": "codigo_baixa_dev", + "nome": "codigo_baixa", "posicao_inicio": 224, "posicao_fim": 224, "formato": "num" diff --git a/bradesco/specs/segmento_q.json b/bradesco/specs/segmento_q.json index b7114b0..1903424 100644 --- a/bradesco/specs/segmento_q.json +++ b/bradesco/specs/segmento_q.json @@ -24,7 +24,7 @@ }, "04.3Q": { - "nome": "servico_num_reg", + "nome": "servico_numero_registro", "posicao_inicio": 9, "posicao_fim": 13, "formato": "num" @@ -39,7 +39,7 @@ }, "06.3Q": { - "nome": "febraban_cnab06d3Q", + "nome": "servico_cnab_exclusivo", "posicao_inicio": 15, "posicao_fim": 15, "formato": "alfa", @@ -47,84 +47,84 @@ }, "07.3Q": { - "nome": "servico_cod_mov", + "nome": "servico_codigo_movimento", "posicao_inicio": 16, "posicao_fim": 17, "formato": "num" }, "08.3Q": { - "nome": "pagador_insc_tipo", + "nome": "sacado_inscricao_tipo", "posicao_inicio": 18, "posicao_fim": 18, "formato": "num" }, "09.3Q": { - "nome": "pagador_insc_num", + "nome": "sacado_inscricao_numero", "posicao_inicio": 19, "posicao_fim": 33, "formato": "num" }, "10.3Q": { - "nome": "pagador_nome", + "nome": "sacado_nome", "posicao_inicio": 34, "posicao_fim": 73, "formato": "alfa" }, "11.3Q": { - "nome": "pagador_endereco", + "nome": "sacado_endereco", "posicao_inicio": 74, "posicao_fim": 113, "formato": "alfa" }, "12.3Q": { - "nome": "pagador_bairro", + "nome": "sacado_bairro", "posicao_inicio": 114, "posicao_fim": 128, "formato": "alfa" }, "13.3Q": { - "nome": "pagador_cep", + "nome": "sacado_cep", "posicao_inicio": 129, "posicao_fim": 133, "formato": "num" }, "14.3Q": { - "nome": "pagador_cep_sufixo", + "nome": "sacado_cep_sufixo", "posicao_inicio": 134, "posicao_fim": 136, "formato": "num" }, "15.3Q": { - "nome": "pagador_cidade", + "nome": "sacado_cidade", "posicao_inicio": 137, "posicao_fim": 151, "formato": "alfa" }, "16.3Q": { - "nome": "pagador_uf", + "nome": "sacado_uf", "posicao_inicio": 152, "posicao_fim": 153, "formato": "alfa" }, "17.3Q": { - "nome": "sacador_insc_tipo", + "nome": "sacador_inscricao_tipo", "posicao_inicio": 154, "posicao_fim": 154, "formato": "num" }, "18.3Q": { - "nome": "sacador_insc_num", + "nome": "sacador_inscricao_numero", "posicao_inicio": 155, "posicao_fim": 169, "formato": "num" @@ -138,21 +138,21 @@ }, "20.3Q": { - "nome": "banco_corresp", + "nome": "banco_correspondente", "posicao_inicio": 210, "posicao_fim": 212, "formato": "num" }, "21.3Q": { - "nome": "nosso_num_bco_corresp", + "nome": "numero_no_bancoCorrespondente", "posicao_inicio": 213, "posicao_fim": 232, "formato": "alfa" }, "22.3Q": { - "nome": "febraban_cnab22d3Q", + "nome": "cnab_exclusivo_campo22dot3Q", "posicao_inicio": 233, "posicao_fim": 240, "formato": "alfa", diff --git a/bradesco/specs/segmento_r.json b/bradesco/specs/segmento_r.json index 0050611..53bf520 100644 --- a/bradesco/specs/segmento_r.json +++ b/bradesco/specs/segmento_r.json @@ -24,14 +24,14 @@ }, "04.3R": { - "nome": "serv_num", + "nome": "servico_numero_registro", "posicao_inicio": 9, "posicao_fim": 13, "formato": "num" }, "05.3R": { - "nome": "serv_seg", + "nome": "servico_segmento", "posicao_inicio": 14, "posicao_fim": 14, "formato": "alfa", @@ -39,7 +39,7 @@ }, "06.3R": { - "nome": "febraban_cnab06d3R", + "nome": "cnab_exclusivo_campo06dot3R", "posicao_inicio": 15, "posicao_fim": 15, "formato": "alfa", @@ -47,28 +47,28 @@ }, "07.3R": { - "nome": "serv_cod", + "nome": "servico_codigoMovimento", "posicao_inicio": 16, "posicao_fim": 17, "formato": "num" }, "08.3R": { - "nome": "desc2_cod", + "nome": "desconto2_cod", "posicao_inicio": 18, "posicao_fim": 18, "formato": "num" }, "09.3R": { - "nome": "desc2_data", + "nome": "desconto2_data", "posicao_inicio": 19, "posicao_fim": 26, "formato": "num" }, "10.3R": { - "nome": "desc2_desc2", + "nome": "desconto2_percentual", "posicao_inicio": 27, "posicao_fim": 41, "formato": "num", @@ -76,21 +76,21 @@ }, "11.3R": { - "nome": "desc3_cod", + "nome": "desconto3_codigo", "posicao_inicio": 42, "posicao_fim": 42, "formato": "num" }, "12.3R": { - "nome": "desc3_data", + "nome": "desconto3_data", "posicao_inicio": 43, "posicao_fim": 50, "formato": "num" }, "13.3R": { - "nome": "desc3_desc3", + "nome": "desconto3_percentual", "posicao_inicio": 51, "posicao_fim": 65, "formato": "num", @@ -98,7 +98,7 @@ }, "14.3R": { - "nome": "multa_cod", + "nome": "multa_codigo", "posicao_inicio": 66, "posicao_fim": 66, "formato": "alfa" @@ -112,7 +112,7 @@ }, "16.3R": { - "nome": "multa_multa", + "nome": "multa_percentual", "posicao_inicio": 75, "posicao_fim": 89, "formato": "num", @@ -120,21 +120,21 @@ }, "17.3R": { - "nome": "info_pagador", + "nome": "informacao_ao_sacado", "posicao_inicio": 90, "posicao_fim": 99, "formato": "alfa" }, "18.3R": { - "nome": "info3", + "nome": "informacao_3", "posicao_inicio": 100, "posicao_fim": 139, "formato": "alfa" }, "19.3R": { - "nome": "info4", + "nome": "informacao_4", "posicao_inicio": 140, "posicao_fim": 179, "formato": "alfa" @@ -163,7 +163,7 @@ }, "23.3R": { - "nome": "dados_deb_ag_cod", + "nome": "dados_deb_ag", "posicao_inicio": 211, "posicao_fim": 215, "formato": "num" @@ -177,7 +177,7 @@ }, "25.3R": { - "nome": "dados_deb_cc_cod", + "nome": "dados_deb_cc", "posicao_inicio": 217, "posicao_fim": 228, "formato": "num" @@ -191,7 +191,7 @@ }, "27.3R": { - "nome": "dados_deb_dv", + "nome": "dados_deb_dv_ag_cc", "posicao_inicio": 230, "posicao_fim": 230, "formato": "alfa" diff --git a/bradesco/specs/segmento_t.json b/bradesco/specs/segmento_t.json index ffe74b8..4e8933d 100644 --- a/bradesco/specs/segmento_t.json +++ b/bradesco/specs/segmento_t.json @@ -24,14 +24,14 @@ }, "04.3T": { - "nome": "serv_num", + "nome": "servico_numero_registro", "posicao_inicio": 9, "posicao_fim": 13, "formato": "num" }, "05.3T": { - "nome": "serv_seg", + "nome": "servico_segmento", "posicao_inicio": 14, "posicao_fim": 14, "formato": "alfa", @@ -39,7 +39,7 @@ }, "06.3T": { - "nome": "febraban_cnab06d3T", + "nome": "cnab_exclusivo_campo06dot3T", "posicao_inicio": 15, "posicao_fim": 15, "formato": "alfa", @@ -47,49 +47,49 @@ }, "07.3T": { - "nome": "serv_cod", + "nome": "servico_codigo_movimento", "posicao_inicio": 16, "posicao_fim": 17, "formato": "num" }, "08.3T": { - "nome": "cc_ag_cod", + "nome": "cedente_agencia", "posicao_inicio": 18, "posicao_fim": 22, "formato": "num" }, "09.3T": { - "nome": "cc_ag_dv", + "nome": "cedente_agencia_dv", "posicao_inicio": 23, "posicao_fim": 23, "formato": "num" }, "10.3T": { - "nome": "cc_conta_num", + "nome": "cedente_conta", "posicao_inicio": 24, "posicao_fim": 35, "formato": "num" }, "11.3T": { - "nome": "cc_conta_dv", + "nome": "cedente_conta_dv", "posicao_inicio": 36, "posicao_fim": 36, "formato": "num" }, "12.3T": { - "nome": "cc_dv", + "nome": "cedente_dv_ag_cc", "posicao_inicio": 37, "posicao_fim": 37, "formato": "num" }, "13.3T": { - "nome": "nosso_num", + "nome": "nosso_numero", "posicao_inicio": 38, "posicao_fim": 57, "formato": "alfa" @@ -103,14 +103,14 @@ }, "15.3T": { - "nome": "num_doc", + "nome": "numero_documento", "posicao_inicio": 59, "posicao_fim": 73, "formato": "alfa" }, "16.3T": { - "nome": "vencimento_data", + "nome": "vencimento_titulo", "posicao_inicio": 74, "posicao_fim": 81, "formato": "num" @@ -125,21 +125,21 @@ }, "18.3T": { - "nome": "banco_num", + "nome": "banco_cobrador_recebedor", "posicao_inicio": 97, "posicao_fim": 99, "formato": "num" }, "19.3T": { - "nome": "ag_cobr_rec", + "nome": "agencia_cobradora_recebedora", "posicao_inicio": 100, "posicao_fim": 104, "formato": "num" }, "20.3T": { - "nome": "ag_dv", + "nome": "agencia_cobradora_recebedora_dv", "posicao_inicio": 105, "posicao_fim": 105, "formato": "num" @@ -160,21 +160,21 @@ }, "23.3T": { - "nome": "pagador_insc_tipo", + "nome": "sacado_inscricao_tipo", "posicao_inicio": 133, "posicao_fim": 133, "formato": "num" }, "24.3T": { - "nome": "pagador_insc_num", + "nome": "sacado_inscricao_numero", "posicao_inicio": 134, "posicao_fim": 148, "formato": "num" }, "25.3T": { - "nome": "pagador_nome", + "nome": "sacado_nome", "posicao_inicio": 149, "posicao_fim": 188, "formato": "alfa" @@ -188,7 +188,7 @@ }, "27.3T": { - "nome": "valor_tar_custas", + "nome": "valor_tarifas", "posicao_inicio": 199, "posicao_fim": 213, "formato": "num", diff --git a/bradesco/specs/segmento_u.json b/bradesco/specs/segmento_u.json index 635023b..dd58d86 100644 --- a/bradesco/specs/segmento_u.json +++ b/bradesco/specs/segmento_u.json @@ -24,14 +24,14 @@ }, "04.3U": { - "nome": "serv_num", + "nome": "servico_numero_registro", "posicao_inicio": 9, "posicao_fim": 13, "formato": "num" }, "05.3U": { - "nome": "serv_seg", + "nome": "servico_segmento", "posicao_inicio": 14, "posicao_fim": 14, "formato": "alfa", @@ -47,14 +47,14 @@ }, "07.3U": { - "nome": "serv_cod", + "nome": "servico_codigo_movimento", "posicao_inicio": 16, "posicao_fim": 17, "formato": "num" }, "08.3U": { - "nome": "dados_titu_acresc", + "nome": "titulo_acrescimos", "posicao_inicio": 18, "posicao_fim": 32, "formato": "num", @@ -62,7 +62,7 @@ }, "09.3U": { - "nome": "dados_titu_desconto", + "nome": "titulo_desconto", "posicao_inicio": 33, "posicao_fim": 47, "formato": "num", @@ -70,7 +70,7 @@ }, "10.3U": { - "nome": "dados_titu_abatimento", + "nome": "titulo_abatimento", "posicao_inicio": 48, "posicao_fim": 62, "formato": "num", @@ -78,7 +78,7 @@ }, "11.3U": { - "nome": "dados_titu_iof", + "nome": "titulo_iof", "posicao_inicio": 63, "posicao_fim": 77, "formato": "num", @@ -86,7 +86,7 @@ }, "12.3U": { - "nome": "dados_titu_valor_pg", + "nome": "titulo_pago", "posicao_inicio": 78, "posicao_fim": 92, "formato": "num", @@ -94,7 +94,7 @@ }, "13.3U": { - "nome": "dados_titu_valor_liq", + "nome": "titulo_liquido", "posicao_inicio": 93, "posicao_fim": 107, "formato": "num", @@ -118,14 +118,14 @@ }, "16.3U": { - "nome": "data_ocorr", + "nome": "data_ocorrencia", "posicao_inicio": 138, "posicao_fim": 145, "formato": "num" }, "17.3U": { - "nome": "data_cred", + "nome": "data_credito", "posicao_inicio": 146, "posicao_fim": 153, "formato": "num" From 1613688157a4fed320d3936a7a5afaf6dcf86cd3 Mon Sep 17 00:00:00 2001 From: fernandomr Date: Thu, 3 Dec 2015 17:48:33 -0200 Subject: [PATCH 61/81] controle_banco --- bradesco/specs/header_arquivo.json | 3 ++- bradesco/specs/header_lote_cobranca.json | 5 +++-- bradesco/specs/segmento_p.json | 3 ++- bradesco/specs/segmento_q.json | 3 ++- bradesco/specs/segmento_r.json | 3 ++- bradesco/specs/segmento_t.json | 3 ++- bradesco/specs/segmento_u.json | 3 ++- bradesco/specs/trailer_arquivo.json | 3 ++- bradesco/specs/trailer_lote_cobranca.json | 3 ++- 9 files changed, 19 insertions(+), 10 deletions(-) diff --git a/bradesco/specs/header_arquivo.json b/bradesco/specs/header_arquivo.json index cdc98dc..403b689 100644 --- a/bradesco/specs/header_arquivo.json +++ b/bradesco/specs/header_arquivo.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.0": { diff --git a/bradesco/specs/header_lote_cobranca.json b/bradesco/specs/header_lote_cobranca.json index 92bc0b5..9335ea4 100644 --- a/bradesco/specs/header_lote_cobranca.json +++ b/bradesco/specs/header_lote_cobranca.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.1": { @@ -31,7 +32,7 @@ }, "05.1": { - "nome": "serv_serv", + "nome": "servico_servico", "posicao_inicio": 10, "posicao_fim": 11, "formato": "num", diff --git a/bradesco/specs/segmento_p.json b/bradesco/specs/segmento_p.json index 6a322e1..dda2d75 100644 --- a/bradesco/specs/segmento_p.json +++ b/bradesco/specs/segmento_p.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.3P": { diff --git a/bradesco/specs/segmento_q.json b/bradesco/specs/segmento_q.json index 1903424..4ddcb38 100644 --- a/bradesco/specs/segmento_q.json +++ b/bradesco/specs/segmento_q.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.3Q": { diff --git a/bradesco/specs/segmento_r.json b/bradesco/specs/segmento_r.json index 53bf520..8ba12cd 100644 --- a/bradesco/specs/segmento_r.json +++ b/bradesco/specs/segmento_r.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.3R": { diff --git a/bradesco/specs/segmento_t.json b/bradesco/specs/segmento_t.json index 4e8933d..f8c399d 100644 --- a/bradesco/specs/segmento_t.json +++ b/bradesco/specs/segmento_t.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.3T": { diff --git a/bradesco/specs/segmento_u.json b/bradesco/specs/segmento_u.json index dd58d86..54b49b5 100644 --- a/bradesco/specs/segmento_u.json +++ b/bradesco/specs/segmento_u.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.3U": { diff --git a/bradesco/specs/trailer_arquivo.json b/bradesco/specs/trailer_arquivo.json index 1cc7759..17ce334 100644 --- a/bradesco/specs/trailer_arquivo.json +++ b/bradesco/specs/trailer_arquivo.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.9": { diff --git a/bradesco/specs/trailer_lote_cobranca.json b/bradesco/specs/trailer_lote_cobranca.json index 226c957..1124d66 100644 --- a/bradesco/specs/trailer_lote_cobranca.json +++ b/bradesco/specs/trailer_lote_cobranca.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 231 }, "02.5": { From 328c2e7e83c6fe26f88e2f5a14f54c8a3fb250ae Mon Sep 17 00:00:00 2001 From: fernandomr Date: Wed, 6 Jan 2016 13:38:13 -0200 Subject: [PATCH 62/81] detalhe --- bradesco/specs/header_lote_cobranca.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bradesco/specs/header_lote_cobranca.json b/bradesco/specs/header_lote_cobranca.json index 9335ea4..33dc3a0 100644 --- a/bradesco/specs/header_lote_cobranca.json +++ b/bradesco/specs/header_lote_cobranca.json @@ -28,7 +28,8 @@ "nome": "servico_operacao", "posicao_inicio": 9, "posicao_fim": 9, - "formato": "alfa" + "formato": "alfa", + "default": "R" }, "05.1": { From 760996d428fc68f656d12a6d76287b9e926a8a05 Mon Sep 17 00:00:00 2001 From: hendrixcosta Date: Thu, 17 Mar 2016 20:04:27 -0300 Subject: [PATCH 63/81] add Segmento E e Headers --- bradesco/specs/header_lote_extrato.json | 189 +++++++++++++++++++++ bradesco/specs/segmento_e.json | 205 +++++++++++++++++++++++ bradesco/specs/trailer_lote_extrato.json | 184 ++++++++++++++++++++ 3 files changed, 578 insertions(+) create mode 100644 bradesco/specs/header_lote_extrato.json create mode 100644 bradesco/specs/segmento_e.json create mode 100644 bradesco/specs/trailer_lote_extrato.json diff --git a/bradesco/specs/header_lote_extrato.json b/bradesco/specs/header_lote_extrato.json new file mode 100644 index 0000000..cea8849 --- /dev/null +++ b/bradesco/specs/header_lote_extrato.json @@ -0,0 +1,189 @@ +{ + "nome": "HeaderLoteExtrato", + "campos": { + "01.1": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.1": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.1": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 1 + }, + + "04.1": { + "nome": "servico_operacao", + "posicao_inicio": 9, + "posicao_fim": 9, + "formato": "alfa", + "default": "E" + }, + + "05.1": { + "nome": "servico_servico", + "posicao_inicio": 10, + "posicao_fim": 11, + "formato": "num", + "default": 4 + }, + + "06.1": { + "nome": "servico_forma_lancamento", + "posicao_inicio": 12, + "posicao_fim": 13, + "formato": "num", + "default": 40 + }, + + "07.1": { + "nome": "servico_layout", + "posicao_inicio": 14, + "posicao_fim": 16, + "formato": "num", + "default": 50 + }, + + "08.1": { + "nome": "febraban_cnab08d1", + "posicao_inicio": 17, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "09.1": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "10.1": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "num" + }, + + "11.1": { + "nome": "cedente_convenio", + "posicao_inicio": 33, + "posicao_fim": 52, + "formato": "alfa" + }, + + "12.1": { + "nome": "cedente_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num" + }, + + "13.1": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "alfa" + }, + + "14.1": { + "nome": "cedente_conta", + "posicao_inicio": 59, + "posicao_fim": 70, + "formato": "alfa" + }, + + "15.1": { + "nome": "cedente_conta_dv", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa" + }, + + "16.1": { + "nome": "cedente_dv_ag_cc", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "17.1": { + "nome": "cedente_nome", + "posicao_inicio": 73, + "posicao_fim": 102, + "formato": "alfa" + }, + + "18.1": { + "nome": "febraban_cnab18d1", + "posicao_inicio": 103, + "posicao_fim": 142, + "formato": "alfa", + "default": "" + }, + + "19.1": { + "nome": "saldo_inicial_data", + "posicao_inicio": 143, + "posicao_fim": 150, + "formato": "num" + }, + + "20.1": { + "nome": "saldo_inicial_valor", + "posicao_inicio": 151, + "posicao_fim": 168, + "formato": "num", + "decimais": 2 + }, + + "21.1": { + "nome": "saldo_inicial_situacao", + "posicao_inicio": 169, + "posicao_fim": 169, + "formato": "alfa" + }, + + "22.1": { + "nome": "saldo_inicial_status", + "posicao_inicio": 170, + "posicao_fim": 170, + "formato": "alfa" + }, + + "23.1": { + "nome": "saldo_inicial_tipo_moeda", + "posicao_inicio": 171, + "posicao_fim": 173, + "formato": "alfa" + }, + + "24.1": { + "nome": "saldo_inicial_sequencia_extrato", + "posicao_inicio": 174, + "posicao_fim": 178, + "formato": "num" + }, + + "25.1": { + "nome": "febraban_cnab25d1", + "posicao_inicio": 179, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} \ No newline at end of file diff --git a/bradesco/specs/segmento_e.json b/bradesco/specs/segmento_e.json new file mode 100644 index 0000000..d8c0ff1 --- /dev/null +++ b/bradesco/specs/segmento_e.json @@ -0,0 +1,205 @@ +{ + "nome": "SegmentoE", + "campos": { + "01.3E": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.3E": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3E": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3E": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3E": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "E" + }, + + "06.3E": { + "nome": "febraban_cnab_6d3E", + "posicao_inicio": 15, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "07.3E": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "08.3E": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "num" + }, + + "09.3E": { + "nome": "cedente_convenio", + "posicao_inicio": 33, + "posicao_fim": 52, + "formato": "alfa" + }, + + "10.3E": { + "nome": "cedente_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num" + }, + + "11.3E": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "alfa" + }, + + "12.3E": { + "nome": "cedente_conta", + "posicao_inicio": 59, + "posicao_fim": 70, + "formato": "num" + }, + + "13.3E": { + "nome": "cedente_conta_dv", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa" + }, + + "14.3E": { + "nome": "cedente_dv_ag_cc", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "15.3E": { + "nome": "cedente_nome", + "posicao_inicio": 73, + "posicao_fim": 102, + "formato": "alfa" + }, + + "16.3E": { + "nome": "febraban_cnab_16d3E", + "posicao_inicio": 103, + "posicao_fim": 108, + "formato": "alfa", + "default": "" + }, + + "17.3E": { + "nome": "natureza", + "posicao_inicio": 109, + "posicao_fim": 111, + "formato": "alfa" + }, + + "18.3E": { + "nome": "tipo_complemento", + "posicao_inicio": 112, + "posicao_fim": 113, + "formato": "num" + }, + + "19.3E": { + "nome": "complemento", + "posicao_inicio": 114, + "posicao_fim": 133, + "formato": "alfa" + }, + + "20.3E": { + "nome": "cpmf", + "posicao_inicio": 134, + "posicao_fim": 134, + "formato": "alfa" + }, + + "21.3E": { + "nome": "data", + "posicao_inicio": 135, + "posicao_fim": 142, + "formato": "num" + }, + + "22.3E": { + "nome": "lancamento_data", + "posicao_inicio": 143, + "posicao_fim": 150, + "formato": "num" + }, + + "23.3E": { + "nome": "lancamento_valor", + "posicao_inicio": 151, + "posicao_fim": 168, + "formato": "num", + "decimais": 2 + }, + + "24.3E": { + "nome": "lancamento_tipo", + "posicao_inicio": 169, + "posicao_fim": 169, + "formato": "alfa" + }, + + "25.3E": { + "nome": "lancamento_categoria", + "posicao_inicio": 170, + "posicao_fim": 172, + "formato": "num" + }, + + "26.3E": { + "nome": "lancamento_codigo_historico", + "posicao_inicio": 173, + "posicao_fim": 176, + "formato": "alfa" + }, + + "27.3E": { + "nome": "historico", + "posicao_inicio": 177, + "posicao_fim": 201, + "formato": "alfa" + }, + + "28.3E": { + "nome": "numero_documento", + "posicao_inicio": 202, + "posicao_fim": 240, + "formato": "alfa" + } + } +} diff --git a/bradesco/specs/trailer_lote_extrato.json b/bradesco/specs/trailer_lote_extrato.json new file mode 100644 index 0000000..42b27a2 --- /dev/null +++ b/bradesco/specs/trailer_lote_extrato.json @@ -0,0 +1,184 @@ +{ + "nome": "TrailerLoteExtrato", + "campos": { + "01.5": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num" + }, + + "02.5": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.5": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 5 + }, + + "04.5": { + "nome": "febraban_cnab04d5", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.5": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "06.5": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "num" + }, + + "07.5": { + "nome": "cedente_convenio", + "posicao_inicio": 33, + "posicao_fim": 52, + "formato": "alfa" + }, + + "08.5": { + "nome": "cedente_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num" + }, + + "09.5": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "alfa" + }, + + "10.5": { + "nome": "cedente_conta", + "posicao_inicio": 59, + "posicao_fim": 70, + "formato": "num" + }, + + "11.5": { + "nome": "cedente_conta_dv", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa" + }, + + "12.5": { + "nome": "cedente_dv_ag_cc", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa" + }, + + "13.5": { + "nome": "febraban_cnab13d5", + "posicao_inicio": 73, + "posicao_fim": 88, + "formato": "alfa", + "default": "" + }, + + "14.5": { + "nome": "valores_bloqueado_acima_24h", + "posicao_inicio": 89, + "posicao_fim": 106, + "formato": "num", + "decimais": 2 + }, + + "15.5": { + "nome": "valores_limite", + "posicao_inicio": 107, + "posicao_fim": 124, + "formato": "num", + "decimais": "2" + }, + + "16.5": { + "nome": "valores_bloqueado_ate_24h", + "posicao_inicio": 125, + "posicao_fim": 142, + "formato": "num", + "decimais": "2" + }, + + "17.5": { + "nome": "saldo_final_data", + "posicao_inicio": 143, + "posicao_fim": 150, + "formato": "num" + }, + + "18.5": { + "nome": "saldo_final_valor", + "posicao_inicio": 151, + "posicao_fim": 168, + "formato": "num", + "decimais": "2" + }, + + "19.5": { + "nome": "saldo_final_situacao", + "posicao_inicio": 169, + "posicao_fim":169 , + "formato": "alfa" + }, + + "20.5": { + "nome": "saldo_final_status", + "posicao_inicio": 170, + "posicao_fim": 170, + "formato": "alfa" + }, + + "21.5": { + "nome": "totais_registros", + "posicao_inicio": 171, + "posicao_fim": 176, + "formato": "num" + }, + + "22.5": { + "nome": "totais_valor_debitos", + "posicao_inicio": 177, + "posicao_fim": 194, + "formato": "num", + "decimais": 2 + }, + + "23.5": { + "nome": "totais_valor_creditos", + "posicao_inicio": 195, + "posicao_fim": 212, + "formato": "num", + "decimais": 2 + }, + + "24.5": { + "nome": "febraban_cnab24d5", + "posicao_inicio": 213, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + + } +} From f06bf526f62967165a35061d1b6011b171aa3eac Mon Sep 17 00:00:00 2001 From: Luiz Felipe do Divino Date: Mon, 21 Mar 2016 12:33:56 -0300 Subject: [PATCH 64/81] [FIX] Correcoes nos tipos de operacoes e no json de trailer_lot_extrato --- bradesco/specs/trailer_lote_extrato.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bradesco/specs/trailer_lote_extrato.json b/bradesco/specs/trailer_lote_extrato.json index 42b27a2..643a360 100644 --- a/bradesco/specs/trailer_lote_extrato.json +++ b/bradesco/specs/trailer_lote_extrato.json @@ -108,7 +108,7 @@ "posicao_inicio": 107, "posicao_fim": 124, "formato": "num", - "decimais": "2" + "decimais": 2 }, "16.5": { @@ -116,7 +116,7 @@ "posicao_inicio": 125, "posicao_fim": 142, "formato": "num", - "decimais": "2" + "decimais": 2 }, "17.5": { @@ -131,7 +131,7 @@ "posicao_inicio": 151, "posicao_fim": 168, "formato": "num", - "decimais": "2" + "decimais": 2 }, "19.5": { From a3e0dde37c941b36371e7c33a6e1ab045e2d74ed Mon Sep 17 00:00:00 2001 From: Luiz Felipe do Divino Date: Thu, 7 Apr 2016 19:49:58 -0300 Subject: [PATCH 65/81] [ADD] Adicionado campo valor_pago no segmento_e --- bradesco/specs/segmento_e.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bradesco/specs/segmento_e.json b/bradesco/specs/segmento_e.json index d8c0ff1..d39258a 100644 --- a/bradesco/specs/segmento_e.json +++ b/bradesco/specs/segmento_e.json @@ -200,6 +200,13 @@ "posicao_inicio": 202, "posicao_fim": 240, "formato": "alfa" + }, + + "29.3E": { + "nome": "valor_pago", + "posicao_inicio": 254, + "posicao_fim": 266, + "formato": "num" } } } From eed5a9aca8647237440ba244f80e5714c628a2a8 Mon Sep 17 00:00:00 2001 From: Luiz Felipe do Divino Date: Wed, 20 Apr 2016 15:33:55 -0300 Subject: [PATCH 66/81] [FIX] Removido campo que nao estava sendo utilizado no json do segmento E e estava causando conflitos no cnab240 --- bradesco/specs/segmento_e.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/bradesco/specs/segmento_e.json b/bradesco/specs/segmento_e.json index d39258a..d8c0ff1 100644 --- a/bradesco/specs/segmento_e.json +++ b/bradesco/specs/segmento_e.json @@ -200,13 +200,6 @@ "posicao_inicio": 202, "posicao_fim": 240, "formato": "alfa" - }, - - "29.3E": { - "nome": "valor_pago", - "posicao_inicio": 254, - "posicao_fim": 266, - "formato": "num" } } } From c3ea5c440eadf4089508e656db96b6cb3133195d Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 20:38:28 -0300 Subject: [PATCH 67/81] [NEW] Adicionando o banco bradesco --- {bradesco => cnab240/bancos/bradesco}/__init__.py | 0 {bradesco => cnab240/bancos/bradesco}/specs/header_arquivo.json | 0 .../bancos/bradesco}/specs/header_lote_cobranca.json | 0 .../bancos/bradesco}/specs/header_lote_extrato.json | 0 {bradesco => cnab240/bancos/bradesco}/specs/segmento_e.json | 0 {bradesco => cnab240/bancos/bradesco}/specs/segmento_p.json | 0 {bradesco => cnab240/bancos/bradesco}/specs/segmento_q.json | 0 {bradesco => cnab240/bancos/bradesco}/specs/segmento_r.json | 0 {bradesco => cnab240/bancos/bradesco}/specs/segmento_t.json | 0 {bradesco => cnab240/bancos/bradesco}/specs/segmento_u.json | 0 {bradesco => cnab240/bancos/bradesco}/specs/spec_to_doc.py | 0 {bradesco => cnab240/bancos/bradesco}/specs/trailer_arquivo.json | 0 .../bancos/bradesco}/specs/trailer_lote_cobranca.json | 0 .../bancos/bradesco}/specs/trailer_lote_extrato.json | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename {bradesco => cnab240/bancos/bradesco}/__init__.py (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/header_arquivo.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/header_lote_cobranca.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/header_lote_extrato.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/segmento_e.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/segmento_p.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/segmento_q.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/segmento_r.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/segmento_t.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/segmento_u.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/spec_to_doc.py (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/trailer_arquivo.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/trailer_lote_cobranca.json (100%) rename {bradesco => cnab240/bancos/bradesco}/specs/trailer_lote_extrato.json (100%) diff --git a/bradesco/__init__.py b/cnab240/bancos/bradesco/__init__.py similarity index 100% rename from bradesco/__init__.py rename to cnab240/bancos/bradesco/__init__.py diff --git a/bradesco/specs/header_arquivo.json b/cnab240/bancos/bradesco/specs/header_arquivo.json similarity index 100% rename from bradesco/specs/header_arquivo.json rename to cnab240/bancos/bradesco/specs/header_arquivo.json diff --git a/bradesco/specs/header_lote_cobranca.json b/cnab240/bancos/bradesco/specs/header_lote_cobranca.json similarity index 100% rename from bradesco/specs/header_lote_cobranca.json rename to cnab240/bancos/bradesco/specs/header_lote_cobranca.json diff --git a/bradesco/specs/header_lote_extrato.json b/cnab240/bancos/bradesco/specs/header_lote_extrato.json similarity index 100% rename from bradesco/specs/header_lote_extrato.json rename to cnab240/bancos/bradesco/specs/header_lote_extrato.json diff --git a/bradesco/specs/segmento_e.json b/cnab240/bancos/bradesco/specs/segmento_e.json similarity index 100% rename from bradesco/specs/segmento_e.json rename to cnab240/bancos/bradesco/specs/segmento_e.json diff --git a/bradesco/specs/segmento_p.json b/cnab240/bancos/bradesco/specs/segmento_p.json similarity index 100% rename from bradesco/specs/segmento_p.json rename to cnab240/bancos/bradesco/specs/segmento_p.json diff --git a/bradesco/specs/segmento_q.json b/cnab240/bancos/bradesco/specs/segmento_q.json similarity index 100% rename from bradesco/specs/segmento_q.json rename to cnab240/bancos/bradesco/specs/segmento_q.json diff --git a/bradesco/specs/segmento_r.json b/cnab240/bancos/bradesco/specs/segmento_r.json similarity index 100% rename from bradesco/specs/segmento_r.json rename to cnab240/bancos/bradesco/specs/segmento_r.json diff --git a/bradesco/specs/segmento_t.json b/cnab240/bancos/bradesco/specs/segmento_t.json similarity index 100% rename from bradesco/specs/segmento_t.json rename to cnab240/bancos/bradesco/specs/segmento_t.json diff --git a/bradesco/specs/segmento_u.json b/cnab240/bancos/bradesco/specs/segmento_u.json similarity index 100% rename from bradesco/specs/segmento_u.json rename to cnab240/bancos/bradesco/specs/segmento_u.json diff --git a/bradesco/specs/spec_to_doc.py b/cnab240/bancos/bradesco/specs/spec_to_doc.py similarity index 100% rename from bradesco/specs/spec_to_doc.py rename to cnab240/bancos/bradesco/specs/spec_to_doc.py diff --git a/bradesco/specs/trailer_arquivo.json b/cnab240/bancos/bradesco/specs/trailer_arquivo.json similarity index 100% rename from bradesco/specs/trailer_arquivo.json rename to cnab240/bancos/bradesco/specs/trailer_arquivo.json diff --git a/bradesco/specs/trailer_lote_cobranca.json b/cnab240/bancos/bradesco/specs/trailer_lote_cobranca.json similarity index 100% rename from bradesco/specs/trailer_lote_cobranca.json rename to cnab240/bancos/bradesco/specs/trailer_lote_cobranca.json diff --git a/bradesco/specs/trailer_lote_extrato.json b/cnab240/bancos/bradesco/specs/trailer_lote_extrato.json similarity index 100% rename from bradesco/specs/trailer_lote_extrato.json rename to cnab240/bancos/bradesco/specs/trailer_lote_extrato.json From 0a1222d76ac90cb4604d532b373d91fd926faa2d Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sat, 8 Jul 2017 22:22:11 -0300 Subject: [PATCH 68/81] [IMP] Testes Pagamento banco do Brasil --- tests/arquivos/pagamento_dict.banco_brasil.rem | 4 ++-- tests/test_banco_brasil_pagamento.py | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/tests/arquivos/pagamento_dict.banco_brasil.rem b/tests/arquivos/pagamento_dict.banco_brasil.rem index a2bc24a..56e77a0 100644 --- a/tests/arquivos/pagamento_dict.banco_brasil.rem +++ b/tests/arquivos/pagamento_dict.banco_brasil.rem @@ -4,7 +4,7 @@ 0000001300002B 100033333333333RUA DOS FERROVIARIOS 00000 CENTRO ITAJUBA 37500150MG00000000000000000000000000000000000000000000000000000000000000000000000000000000000 00 0 00100015 000004000000000000612136000000000000000000 00000021C0000046 0000000000000000001234567891 0123410000003333330 KMEE INFORMATICA LTDA 00000 00000 -0000002300001A0010000010444440000000543210 LUIS FELIPE MILEO 000133 06/2017 A 30062017BRL000000000000000000000000612136 0 -0000002300002B 100033333333333RUA DOS FERROVIARIOS 00000 CENTRO ITAJUBA 37500150MG00000000000000000000000000000000000000000000000000000000000000000000000000000000000 00 0 +0000002300001A0010000010444440000000543210 HENDRIX COSTA 000133 06/2017 A 30062017BRL000000000000000000000000612136 0 +0000002300002B 100033333333333av 3 de abril 00000 CENTRO ITAJUBA 37500124MG00000000000000000000000000000000000000000000000000000000000000000000000000000000000 00 0 00100025 000004000000000000612136000000000000000000 00100009 000002000010000000 diff --git a/tests/test_banco_brasil_pagamento.py b/tests/test_banco_brasil_pagamento.py index a433931..f06fc4a 100644 --- a/tests/test_banco_brasil_pagamento.py +++ b/tests/test_banco_brasil_pagamento.py @@ -12,7 +12,7 @@ from cnab240.tipos import Arquivo from tests.data_bancobrasil import ( get_banco_brasil_data_from_dict, - # get_banco_brasil_file_remessa, + get_banco_brasil_file_remessa, # ARQS_DIRPATH ) @@ -33,17 +33,15 @@ def test_banco_do_brasil_pagamento(self): self.arquivo.incluir_debito_pagamento( **evento ) - # TODO: FIXME - # self.assertEqual( - # unicode(self.arquivo), - # get_banco_brasil_file_remessa() - # ) + self.assertEqual( + unicode(self.arquivo), + get_banco_brasil_file_remessa() + ) def test_banco_do_brasil_arquivo_vazio(self): arquivo = Arquivo(bancodobrasil) self.assertRaises(errors.ArquivoVazioError, unicode, arquivo) - # TODO: FIXME # def test_leitura(self): # return_file_path = os.path.join( # ARQS_DIRPATH, From fc0968ecd13031c8ac45d2e1128c289fe9a27717 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sun, 9 Jul 2017 01:38:16 -0300 Subject: [PATCH 69/81] [IMP] Melhoria na estrutura da biblioteca --- cnab240/constantes.py | 1 - cnab240/tipos/__init__.py | 2 +- cnab240/tipos/arquivo.py | 93 +++++++++++++++++++++++---------------- cnab240/tipos/lote.py | 43 +++++++++++++++++- 4 files changed, 98 insertions(+), 41 deletions(-) diff --git a/cnab240/constantes.py b/cnab240/constantes.py index 682b063..5f00225 100644 --- a/cnab240/constantes.py +++ b/cnab240/constantes.py @@ -2,7 +2,6 @@ from __future__ import division, print_function, unicode_literals - TIPO_REGISTRO_HEADER_ARQUIVO = '0' TIPO_REGISTRO_HEADER_LOTE = '1' TIPO_REGISTRO_REGISTROS_INICIAIS_LOTE = '2' diff --git a/cnab240/tipos/__init__.py b/cnab240/tipos/__init__.py index 0c8f942..ddb607b 100644 --- a/cnab240/tipos/__init__.py +++ b/cnab240/tipos/__init__.py @@ -2,4 +2,4 @@ from .arquivo import Arquivo from .evento import Evento -from .lote import Lote \ No newline at end of file +from .lote import Lote diff --git a/cnab240/tipos/arquivo.py b/cnab240/tipos/arquivo.py index df6e4e6..a346cc4 100644 --- a/cnab240/tipos/arquivo.py +++ b/cnab240/tipos/arquivo.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import division, print_function, unicode_literals + import codecs from datetime import datetime @@ -10,11 +11,14 @@ from ..constantes import ( TIPO_REGISTRO_HEADER_ARQUIVO, TIPO_REGISTRO_HEADER_LOTE, + TIPO_REGISTRO_REGISTROS_INICIAIS_LOTE, TIPO_REGISTRO_DETALHE, TIPO_REGISTRO_TRAILER_LOTE, + TIPO_REGISTRO_REGISTROS_FINAIS_LOTE, TIPO_REGISTRO_TRAILER_ARQUIVO, + TIPO_OPERACAO_ARQUIVO_RETORNO, - TIPO_SERVICO_COBRANCA, + ) @@ -27,6 +31,8 @@ def __init__(self, banco, **kwargs): self.banco = banco arquivo = kwargs.get('arquivo') if isinstance(arquivo, (file, codecs.StreamReaderWriter)): + self.lote_aberto = None + self.evento_aberto = None return self.carregar_retorno(arquivo) self.header = self.banco.registros.HeaderArquivo(**kwargs) @@ -48,56 +54,67 @@ def __init__(self, banco, **kwargs): except AttributeError: pass - def carregar_retorno(self, arquivo): + def _carrega_header_arquivo(self, linha): + self.header = self.banco.registros.HeaderArquivo() + self.header.carregar(linha) - lote_aberto = None - evento_aberto = None + def _carrega_header_lote(self, linha): + # self.lote_aberto = None + self.lote_aberto = Lote(self.banco, linha=linha) + self._lotes.append(self.lote_aberto) - for linha in arquivo: - tipo_registro = linha[7] + def _carrega_registros_iniciais_lote(self): + raise NotImplementedError - if tipo_registro == TIPO_REGISTRO_HEADER_ARQUIVO: + def _carrega_registro_detalhe(self, linha): - self.header = self.banco.registros.HeaderArquivo() - self.header.carregar(linha) + tipo_segmento = linha[13] + codigo_evento = linha[15:17] - elif tipo_registro == TIPO_REGISTRO_HEADER_LOTE: - codigo_servico = linha[9:11] + if tipo_segmento == TIPO_OPERACAO_ARQUIVO_RETORNO: + seg_t = self.banco.registros.SegmentoT() + seg_t.carregar(linha) - if codigo_servico == TIPO_SERVICO_COBRANCA: - header_lote = self.banco.registros.HeaderLoteCobranca() - header_lote.carregar(linha) - trailer_lote = self.banco.registros.TrailerLoteCobranca() - lote_aberto = Lote(self.banco, header_lote, trailer_lote) - self._lotes.append(lote_aberto) + self.evento_aberto = Evento(self.banco, int(codigo_evento)) + self.lote_aberto._eventos.append(self.evento_aberto) + self.evento_aberto._segmentos.append(seg_t) - elif tipo_registro == TIPO_REGISTRO_DETALHE: - tipo_segmento = linha[13] - codigo_evento = linha[15:17] + elif tipo_segmento == 'U': + seg_u = self.banco.registros.SegmentoU() + seg_u.carregar(linha) + self.evento_aberto._segmentos.append(seg_u) + self.evento_aberto = None - if tipo_segmento == TIPO_OPERACAO_ARQUIVO_RETORNO: - seg_t = self.banco.registros.SegmentoT() - seg_t.carregar(linha) + def _carrega_regitros_finais_lote(self): + raise NotImplementedError - evento_aberto = Evento(self.banco, int(codigo_evento)) - lote_aberto._eventos.append(evento_aberto) - evento_aberto._segmentos.append(seg_t) + def _carrega_trailer_lote(self, linha): + # TODO: Verificar oque fazer com um arquivo com mais de um lote + self.lote_aberto.trailer.carregar(linha) - elif tipo_segmento == 'U': - seg_u = self.banco.registros.SegmentoU() - seg_u.carregar(linha) - evento_aberto._segmentos.append(seg_u) - evento_aberto = None + def _carega_trailer_arquivo(self, linha): + self.trailer = self.banco.registros.TrailerArquivo() + self.trailer.carregar(linha) - elif tipo_registro == TIPO_REGISTRO_TRAILER_LOTE: - if trailer_lote is not None: - lote_aberto.trailer.carregar(linha) - else: - raise Exception + def carregar_retorno(self, arquivo): + + for linha in arquivo: + tipo_registro = linha[7] + if tipo_registro == TIPO_REGISTRO_HEADER_ARQUIVO: + self._carrega_header_arquivo(linha) + elif tipo_registro == TIPO_REGISTRO_HEADER_LOTE: + self._carrega_header_lote(linha) + elif tipo_registro == TIPO_REGISTRO_REGISTROS_INICIAIS_LOTE: + self._carrega_registros_iniciais_lote(linha) + elif tipo_registro == TIPO_REGISTRO_DETALHE: + self._carrega_registro_detalhe(linha) + elif tipo_registro == TIPO_REGISTRO_REGISTROS_FINAIS_LOTE: + self._carrega_regitros_finais_lote(linha) + elif tipo_registro == TIPO_REGISTRO_TRAILER_LOTE: + self._carrega_trailer_lote(linha) elif tipo_registro == TIPO_REGISTRO_TRAILER_ARQUIVO: - self.trailer = self.banco.registros.TrailerArquivo() - self.trailer.carregar(linha) + self._carega_trailer_arquivo(linha) @property def lotes(self): diff --git a/cnab240/tipos/lote.py b/cnab240/tipos/lote.py index f2be8ae..522449c 100644 --- a/cnab240/tipos/lote.py +++ b/cnab240/tipos/lote.py @@ -2,18 +2,59 @@ from evento import Evento from .. import errors +from ..constantes import ( + + TIPO_OPERACAO_LANCAMENTO_CREDITO, +) class Lote(object): - def __init__(self, banco, header=None, trailer=None): + def __init__(self, banco, header=None, trailer=None, linha=None): + self.banco = banco self.header = header self.trailer = trailer self._codigo = None + + if linha: + tipo_registro = linha[7] + if not tipo_registro == '1': + raise NotImplementedError + self.carrega_lote(linha) + self.trailer.quantidade_registros = 2 self._eventos = [] + def carrega_lote(self, linha): + + tipo_operacao = linha[8] + + if tipo_operacao == TIPO_OPERACAO_LANCAMENTO_CREDITO: + self.header = self.banco.registros.HeaderLotePagamento() + self.header.carregar(linha) + self.trailer = self.banco.registros.TrailerLotePagamento() + # elif tipo_operacao == TIPO_OPERACAO_LANCAMENTO_DEBITO: + # raise NotImplementedError + # elif tipo_operacao == TIPO_OPERACAO_EXTRATO_CONCILIACAO: + # raise NotImplementedError + # elif tipo_operacao == TIPO_OPERACAO_GESTAO_DE_CAIXA: + # raise NotImplementedError + # elif tipo_operacao == \ + # TIPO_OPERACAO_INFORMACOES_TITULOS_CAPTURADOS_PROPRIO_BANCO: + # raise NotImplementedError + # elif tipo_operacao == TIPO_OPERACAO_ARQUIVO_REMESSA: + # raise NotImplementedError + # elif tipo_operacao == TIPO_OPERACAO_ARQUIVO_RETORNO: + # raise NotImplementedError + else: + # codigo_servico = linha[9:11] + # Isto + # if codigo_servico == 0: + self.header = self.banco.registros.HeaderLoteCobranca() + self.header.carregar(linha) + self.trailer = self.banco.registros.TrailerLoteCobranca() + @property def codigo(self): return self._codigo From 8b0e4895338c97194c9e4da55728848911f91ecf Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sun, 9 Jul 2017 06:29:44 -0300 Subject: [PATCH 70/81] =?UTF-8?q?[NEW]=20Reestrutura=C3=A7=C3=A3o=20dos=20?= =?UTF-8?q?eventos=20e=20lotes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cnab240/eventos/cobranca.py | 21 --------- cnab240/tipos/arquivo.py | 33 ++++++------- cnab240/{ => tipos}/eventos/__init__.py | 0 cnab240/tipos/eventos/cobranca.py | 31 ++++++++++++ cnab240/tipos/eventos/pagamento.py | 56 ++++++++++++++++++++++ cnab240/tipos/lote.py | 63 +++++++++++++++++-------- pip-selfcheck.json | 1 + 7 files changed, 149 insertions(+), 56 deletions(-) delete mode 100644 cnab240/eventos/cobranca.py rename cnab240/{ => tipos}/eventos/__init__.py (100%) create mode 100644 cnab240/tipos/eventos/cobranca.py create mode 100644 cnab240/tipos/eventos/pagamento.py create mode 100644 pip-selfcheck.json diff --git a/cnab240/eventos/cobranca.py b/cnab240/eventos/cobranca.py deleted file mode 100644 index f877272..0000000 --- a/cnab240/eventos/cobranca.py +++ /dev/null @@ -1,21 +0,0 @@ - -from __future__ import division, print_function, unicode_literals - -from cnab240.tipos import EventoBase - - -class EventoInclusao(EventoBase): - - def __init__(self, banco, **kwargs): - super(EventoInclusao, self).__init__(banco, 1) - args = self.clean_kwargs(kwargs) - - seg_p = self.banco.registros.SegmentoP(**args) - self.adicionar_segmento(seg_p) - - seg_q = self.banco.registros.SegmentoQ(**args) - self.adicionar_segmento(seg_q) - - seg_r = self.banco.registros.SegmentoR(**args) - if seg_r.necessario(): - self.adicionar_segmento(seg_r) diff --git a/cnab240/tipos/arquivo.py b/cnab240/tipos/arquivo.py index a346cc4..b07953f 100644 --- a/cnab240/tipos/arquivo.py +++ b/cnab240/tipos/arquivo.py @@ -18,7 +18,7 @@ TIPO_REGISTRO_TRAILER_ARQUIVO, TIPO_OPERACAO_ARQUIVO_RETORNO, - + TIPO_OPERACAO_LANCAMENTO_CREDITO, ) @@ -29,11 +29,16 @@ def __init__(self, banco, **kwargs): self._lotes = [] self.banco = banco + self.arquivo_remessa_retorno = None + + self.lote_aberto = None + self.evento_aberto = None + arquivo = kwargs.get('arquivo') if isinstance(arquivo, (file, codecs.StreamReaderWriter)): self.lote_aberto = None self.evento_aberto = None - return self.carregar_retorno(arquivo) + return self.carregar_arquivo(arquivo) self.header = self.banco.registros.HeaderArquivo(**kwargs) self.trailer = self.banco.registros.TrailerArquivo(**kwargs) @@ -55,6 +60,7 @@ def __init__(self, banco, **kwargs): pass def _carrega_header_arquivo(self, linha): + self.arquivo_remessa_retorno = linha[142] self.header = self.banco.registros.HeaderArquivo() self.header.carregar(linha) @@ -67,23 +73,18 @@ def _carrega_registros_iniciais_lote(self): raise NotImplementedError def _carrega_registro_detalhe(self, linha): - - tipo_segmento = linha[13] + # codigo_evento = linha[9:13] codigo_evento = linha[15:17] + Evento = self.lote_aberto.classe_evento + segmento, abertura = Evento.carrega_segmento(self.banco, linha) - if tipo_segmento == TIPO_OPERACAO_ARQUIVO_RETORNO: - seg_t = self.banco.registros.SegmentoT() - seg_t.carregar(linha) - + if abertura: self.evento_aberto = Evento(self.banco, int(codigo_evento)) - self.lote_aberto._eventos.append(self.evento_aberto) - self.evento_aberto._segmentos.append(seg_t) - elif tipo_segmento == 'U': - seg_u = self.banco.registros.SegmentoU() - seg_u.carregar(linha) - self.evento_aberto._segmentos.append(seg_u) - self.evento_aberto = None + self.lote_aberto._eventos.append(self.evento_aberto) + self.evento_aberto._segmentos.append(segmento) + # self.lote_aberto.adicionar_evento(self.evento_aberto) + # self.evento_aberto.adicionar_segmento(segmento) def _carrega_regitros_finais_lote(self): raise NotImplementedError @@ -96,7 +97,7 @@ def _carega_trailer_arquivo(self, linha): self.trailer = self.banco.registros.TrailerArquivo() self.trailer.carregar(linha) - def carregar_retorno(self, arquivo): + def carregar_arquivo(self, arquivo): for linha in arquivo: tipo_registro = linha[7] diff --git a/cnab240/eventos/__init__.py b/cnab240/tipos/eventos/__init__.py similarity index 100% rename from cnab240/eventos/__init__.py rename to cnab240/tipos/eventos/__init__.py diff --git a/cnab240/tipos/eventos/cobranca.py b/cnab240/tipos/eventos/cobranca.py new file mode 100644 index 0000000..f550cec --- /dev/null +++ b/cnab240/tipos/eventos/cobranca.py @@ -0,0 +1,31 @@ + +from __future__ import division, print_function, unicode_literals + +from ..evento import Evento + + +class Cobranca(Evento): + + @staticmethod + def carrega_segmento(banco, linha): + + codigo_segmento = linha[13] + abertura = False + + if codigo_segmento == 'P': + abertura = True + segmento = banco.registros.SegmentoO() + elif codigo_segmento == 'Q': + segmento = banco.registros.SegmentoQ() + elif codigo_segmento == 'R': + segmento = banco.registros.SegmentoR() + elif codigo_segmento == 'T': + abertura = True + segmento = banco.registros.SegmentoT() + elif codigo_segmento == 'U': + segmento = banco.registros.SegmentoU() + else: + raise NotImplementedError + + segmento.carregar(linha) + return segmento, abertura diff --git a/cnab240/tipos/eventos/pagamento.py b/cnab240/tipos/eventos/pagamento.py new file mode 100644 index 0000000..1ace28e --- /dev/null +++ b/cnab240/tipos/eventos/pagamento.py @@ -0,0 +1,56 @@ + +from __future__ import division, print_function, unicode_literals + +from ..evento import Evento + + +class Pagamento(Evento): + + @staticmethod + def carrega_segmento(banco, linha): + codigo_segmento = linha[13] + abertura = False + + if codigo_segmento == 'A': + segmento = banco.registros.SegmentoA() + abertura = True + elif codigo_segmento == 'B': + segmento = banco.registros.SegmentoB() + elif codigo_segmento == 'C': + segmento = banco.registros.SegmentoC() + else: + raise NotImplementedError + + segmento.carregar(linha) + return segmento, abertura + + +class Titulos(Evento): + + @staticmethod + def carrega_segmento(banco, linha): + + raise NotImplementedError + + codigo_segmento = linha[13] + abertura = False + if codigo_segmento == 'J': + segmento = banco.registros.SegmentoJ(**args) + + segmento.carregar(linha) + return segmento, abertura + + +class Tributos(Evento): + + @staticmethod + def carrega_segmento(banco, linha): + raise NotImplementedError + + codigo_segmento = linha[13] + abertura = False + if codigo_segmento == 'O': + segmento = banco.registros.SegmentoO(**args) + + segmento.carregar(linha) + return segmento, abertura diff --git a/cnab240/tipos/lote.py b/cnab240/tipos/lote.py index 522449c..986f5d4 100644 --- a/cnab240/tipos/lote.py +++ b/cnab240/tipos/lote.py @@ -1,10 +1,22 @@ # -*- encoding: utf8 -*- from evento import Evento +from eventos import ( + cobranca, + pagamento, +) from .. import errors from ..constantes import ( TIPO_OPERACAO_LANCAMENTO_CREDITO, + TIPO_OPERACAO_LANCAMENTO_DEBITO, + TIPO_OPERACAO_EXTRATO_CONCILIACAO, + TIPO_OPERACAO_GESTAO_DE_CAIXA, + TIPO_OPERACAO_INFORMACOES_TITULOS_CAPTURADOS_PROPRIO_BANCO, + TIPO_OPERACAO_ARQUIVO_REMESSA, + TIPO_OPERACAO_ARQUIVO_RETORNO, + TIPO_SERVICO_PAGAMENTO_SALARIOS, + TIPO_SERVICO_COBRANCA, ) @@ -16,7 +28,7 @@ def __init__(self, banco, header=None, trailer=None, linha=None): self.header = header self.trailer = trailer self._codigo = None - + self.classe_evento = None if linha: tipo_registro = linha[7] if not tipo_registro == '1': @@ -29,32 +41,45 @@ def __init__(self, banco, header=None, trailer=None, linha=None): def carrega_lote(self, linha): tipo_operacao = linha[8] - + tipo_servico = linha[9:11] if tipo_operacao == TIPO_OPERACAO_LANCAMENTO_CREDITO: self.header = self.banco.registros.HeaderLotePagamento() self.header.carregar(linha) self.trailer = self.banco.registros.TrailerLotePagamento() - # elif tipo_operacao == TIPO_OPERACAO_LANCAMENTO_DEBITO: - # raise NotImplementedError - # elif tipo_operacao == TIPO_OPERACAO_EXTRATO_CONCILIACAO: - # raise NotImplementedError - # elif tipo_operacao == TIPO_OPERACAO_GESTAO_DE_CAIXA: - # raise NotImplementedError - # elif tipo_operacao == \ - # TIPO_OPERACAO_INFORMACOES_TITULOS_CAPTURADOS_PROPRIO_BANCO: - # raise NotImplementedError - # elif tipo_operacao == TIPO_OPERACAO_ARQUIVO_REMESSA: - # raise NotImplementedError - # elif tipo_operacao == TIPO_OPERACAO_ARQUIVO_RETORNO: - # raise NotImplementedError - else: - # codigo_servico = linha[9:11] - # Isto - # if codigo_servico == 0: + if tipo_servico in ( + TIPO_SERVICO_PAGAMENTO_SALARIOS, + ): + self.classe_evento = pagamento.Pagamento + elif tipo_servico in (): + self.classe_evento = pagamento.Titulos + elif tipo_servico in (): + self.classe_evento = pagamento.Tributos + else: + raise NotImplementedError + elif tipo_operacao == TIPO_OPERACAO_LANCAMENTO_DEBITO: + raise NotImplementedError + elif tipo_operacao == TIPO_OPERACAO_EXTRATO_CONCILIACAO: + raise NotImplementedError + elif tipo_operacao == TIPO_OPERACAO_GESTAO_DE_CAIXA: + raise NotImplementedError + elif tipo_operacao == \ + TIPO_OPERACAO_INFORMACOES_TITULOS_CAPTURADOS_PROPRIO_BANCO: + raise NotImplementedError + elif tipo_operacao == TIPO_OPERACAO_ARQUIVO_REMESSA: + raise NotImplementedError + elif tipo_operacao == TIPO_OPERACAO_ARQUIVO_RETORNO: + self.header = self.banco.registros.HeaderLoteCobranca() self.header.carregar(linha) self.trailer = self.banco.registros.TrailerLoteCobranca() + if tipo_servico == TIPO_SERVICO_COBRANCA: + self.classe_evento = cobranca.Cobranca + else: + raise NotImplementedError + else: + raise NotImplementedError + @property def codigo(self): return self._codigo diff --git a/pip-selfcheck.json b/pip-selfcheck.json new file mode 100644 index 0000000..19c294d --- /dev/null +++ b/pip-selfcheck.json @@ -0,0 +1 @@ +{"last_check":"2017-07-07T23:56:27Z","pypi_version":"9.0.1"} \ No newline at end of file From f03475346ca36deb2a8821569acaf23f2a383a59 Mon Sep 17 00:00:00 2001 From: Luis Felipe Mileo Date: Sun, 9 Jul 2017 19:38:57 -0300 Subject: [PATCH 71/81] [FIX] Eventos duplicados --- cnab240/tipos/arquivo.py | 2 +- cnab240/tipos/eventos/cobranca.py | 4 ++++ cnab240/tipos/eventos/pagamento.py | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cnab240/tipos/arquivo.py b/cnab240/tipos/arquivo.py index b07953f..5e1a1ac 100644 --- a/cnab240/tipos/arquivo.py +++ b/cnab240/tipos/arquivo.py @@ -80,8 +80,8 @@ def _carrega_registro_detalhe(self, linha): if abertura: self.evento_aberto = Evento(self.banco, int(codigo_evento)) + self.lote_aberto._eventos.append(self.evento_aberto) - self.lote_aberto._eventos.append(self.evento_aberto) self.evento_aberto._segmentos.append(segmento) # self.lote_aberto.adicionar_evento(self.evento_aberto) # self.evento_aberto.adicionar_segmento(segmento) diff --git a/cnab240/tipos/eventos/cobranca.py b/cnab240/tipos/eventos/cobranca.py index f550cec..a884ae8 100644 --- a/cnab240/tipos/eventos/cobranca.py +++ b/cnab240/tipos/eventos/cobranca.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from __future__ import division, print_function, unicode_literals @@ -19,6 +20,9 @@ def carrega_segmento(banco, linha): segmento = banco.registros.SegmentoQ() elif codigo_segmento == 'R': segmento = banco.registros.SegmentoR() + # + # Retorno de cobrança + # elif codigo_segmento == 'T': abertura = True segmento = banco.registros.SegmentoT() diff --git a/cnab240/tipos/eventos/pagamento.py b/cnab240/tipos/eventos/pagamento.py index 1ace28e..b708153 100644 --- a/cnab240/tipos/eventos/pagamento.py +++ b/cnab240/tipos/eventos/pagamento.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from __future__ import division, print_function, unicode_literals From 7798a81ca2751c53d30bf59084e2b286b25cfd61 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 2 May 2016 13:20:55 -0300 Subject: [PATCH 72/81] Header arquivo cnab240 sicoob --- cnab240/bancos/sicoob/__init__.py | 0 .../bancos/sicoob/specs/header_arquivo.json | 189 ++++++++++++++++++ .../sicoob/specs/header_lote_cobranca.json | 0 cnab240/bancos/sicoob/specs/segment_p.json | 0 cnab240/bancos/sicoob/specs/segment_q.json | 0 cnab240/bancos/sicoob/specs/segmento_r.json | 0 cnab240/bancos/sicoob/specs/segmento_s.json | 0 .../bancos/sicoob/specs/trailer_arquivo.json | 0 .../sicoob/specs/trailer_lote_cobranca.json | 0 9 files changed, 189 insertions(+) create mode 100644 cnab240/bancos/sicoob/__init__.py create mode 100644 cnab240/bancos/sicoob/specs/header_arquivo.json create mode 100644 cnab240/bancos/sicoob/specs/header_lote_cobranca.json create mode 100644 cnab240/bancos/sicoob/specs/segment_p.json create mode 100644 cnab240/bancos/sicoob/specs/segment_q.json create mode 100644 cnab240/bancos/sicoob/specs/segmento_r.json create mode 100644 cnab240/bancos/sicoob/specs/segmento_s.json create mode 100644 cnab240/bancos/sicoob/specs/trailer_arquivo.json create mode 100644 cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json diff --git a/cnab240/bancos/sicoob/__init__.py b/cnab240/bancos/sicoob/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/sicoob/specs/header_arquivo.json b/cnab240/bancos/sicoob/specs/header_arquivo.json new file mode 100644 index 0000000..eb7d18a --- /dev/null +++ b/cnab240/bancos/sicoob/specs/header_arquivo.json @@ -0,0 +1,189 @@ +{ + "nome": "HeaderArquivo", + "campos": { + "01.0": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.0": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 0 + }, + + "03.0": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 0 + }, + + "04.0": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.0": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "06.0": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 32, + "formato": "num" + }, + + "07.0": { + "nome": "vazio2", + "posicao_inicio": 33, + "posicao_fim": 52, + "formato": "alfa", + "default": "" + }, + + "08.0": { + "nome": "cedente_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num", + "default": 0 + }, + + "09.0": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "alfa", + }, + + "10.0": { + "nome": "cedente_conta", + "posicao_inicio": 59, + "posicao_fim": 70, + "formato": "alfa", + "default": "" + }, + + "11.0": { + "nome": "cedente_conta_dv", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa", + "default": 0 + }, + + "12.0": { + "nome": "vazio3", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa", + "default": "" + }, + + "13.0": { + "nome": "cedente_nome", + "posicao_inicio": 73, + "posicao_fim": 102, + "formato": "alfa", + "default": "" + }, + + "14.0": { + "nome": "nome_do_banco", + "posicao_inicio": 103, + "posicao_fim": 132, + "formato": "alfa", + "default": "SICOOB" + }, + + "15.0": { + "nome": "vazio4", + "posicao_inicio": 133, + "posicao_fim": 142, + "formato": "alfa" + }, + + "16.0": { + "nome": "arquivo_codigo", + "posicao_inicio": 143, + "posicao_fim": 143, + "formato": "num", + "default": 1 + }, + + "17.0": { + "nome": "arquivo_data_de_geracao", + "posicao_inicio": 144, + "posicao_fim": 151, + "formato": "num" + }, + + "18.0": { + "nome": "arquivo_hora_de_geracao", + "posicao_inicio": 152, + "posicao_fim": 157, + "formato": "num" + }, + + "19.0": { + "nome": "arquivo_sequencia", + "posicao_inicio": 158, + "posicao_fim": 163, + "formato": "num" + }, + + "20.0": { + "nome": "arquivo_layout", + "posicao_inicio": 164, + "posicao_fim": 166, + "formato": "alfa", + "default": "081" + }, + + "21.0": { + "nome": "vazio5", + "posicao_inicio": 167, + "posicao_fim": 171, + "formato": "alfa", + "default": "0000" + }, + + "22.0": { + "nome": "vazio6", + "posicao_inicio": 172, + "posicao_fim": 191, + "formato": "alfa", + "default": "" + }, + + "23.0": { + "nome": "vazio7", + "posicao_inicio": 192, + "posicao_fim": 211, + "formato": "alfa", + "default": "" + }, + + "24.0": { + "nome": "vazio8", + "posicao_inicio": 212, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/sicoob/specs/segment_p.json b/cnab240/bancos/sicoob/specs/segment_p.json new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/sicoob/specs/segment_q.json b/cnab240/bancos/sicoob/specs/segment_q.json new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/sicoob/specs/segmento_r.json b/cnab240/bancos/sicoob/specs/segmento_r.json new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/sicoob/specs/segmento_s.json b/cnab240/bancos/sicoob/specs/segmento_s.json new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/sicoob/specs/trailer_arquivo.json b/cnab240/bancos/sicoob/specs/trailer_arquivo.json new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json b/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json new file mode 100644 index 0000000..e69de29 From 6d28aeadb82cd50a93815386a9d5367a88016efa Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 2 May 2016 14:55:35 -0300 Subject: [PATCH 73/81] Finalizando layout cnab240 - a testar --- .../sicoob/specs/header_lote_cobranca.json | 196 +++++++++++ cnab240/bancos/sicoob/specs/segment_p.json | 330 ++++++++++++++++++ cnab240/bancos/sicoob/specs/segment_q.json | 171 +++++++++ cnab240/bancos/sicoob/specs/segmento_r.json | 236 +++++++++++++ cnab240/bancos/sicoob/specs/segmento_s.json | 110 ++++++ .../bancos/sicoob/specs/trailer_arquivo.json | 67 ++++ .../sicoob/specs/trailer_lote_cobranca.json | 127 +++++++ 7 files changed, 1237 insertions(+) diff --git a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json index e69de29..7d69f1b 100644 --- a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json +++ b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json @@ -0,0 +1,196 @@ +{ + "nome": "HeaderLoteCobranca", + "campos": { + "01.1": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.1": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 1 + }, + + "03.1": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 1 + }, + + "04.1": { + "nome": "servico_operacao", + "posicao_inicio": 9, + "posicao_fim": 9, + "formato": "alfa", + "default": "R" + }, + + "05.1": { + "nome": "servico_servico", + "posicao_inicio": 10, + "posicao_fim": 11, + "formato": "num", + "default": 1 + }, + + "06.1": { + "nome": "vazio1", + "posicao_inicio": 12, + "posicao_fim": 13, + "formato": "num", + "default": 0 + }, + + "07.1": { + "nome": "servico_layout", + "posicao_inicio": 14, + "posicao_fim": 16, + "formato": "num", + "default": 40 + }, + + "08.1": { + "nome": "vazio2", + "posicao_inicio": 17, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "09.1": { + "nome": "cedente_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "10.1": { + "nome": "cedente_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 33, + "formato": "num" + }, + + "11.1": { + "nome": "vazio3", + "posicao_inicio": 34, + "posicao_fim": 53, + "formato": "alfa", + "default": "" + }, + + "12.1": { + "nome": "cedente_agencia", + "posicao_inicio": 54, + "posicao_fim": 58, + "formato": "num", + "default": 3069 + }, + + "13.1": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "alfa" + }, + + "14.1": { + "nome": "cedente_conta", + "posicao_inicio": 60, + "posicao_fim": 71, + "formato": "num", + }, + + "15.1": { + "nome": "cedente_conta_dv", + "posicao_inicio": 72, + "posicao_fim": 72, + "formato": "alfa", + }, + + "16.1": { + "nome": "vazio4", + "posicao_inicio": 73, + "posicao_fim": 73, + "formato": "alfa", + "default": "" + }, + + "17.1": { + "nome": "cedente_nome", + "posicao_inicio": 74, + "posicao_fim": 103, + "formato": "alfa", + "default": "" + }, + + "18.1": { + "nome": "cedente_agencia_conta_dv", + "posicao_inicio": 73, + "posicao_fim": 73, + "formato": "num" + }, + + "19.1": { + "nome": "cedente_nome", + "posicao_inicio": 74, + "posicao_fim": 103, + "formato": "alfa" + }, + + "20.1": { + "nome": "mensagem_um", + "posicao_inicio": 104, + "posicao_fim": 143, + "formato": "alfa", + "default": "" + }, + + "21.1": { + "nome": "mensagem_dois", + "posicao_inicio": 144, + "posicao_fim": 183, + "formato": "alfa", + "default": "" + }, + + "22.1": { + "nome": "controlecob_numero_remret", + "posicao_inicio": 184, + "posicao_fim": 191, + "formato": "num" + }, + + "23.1": { + "nome": "controlecob_data_gravacao", + "posicao_inicio": 192, + "posicao_fim": 199, + "formato": "num" + }, + + "23.1": { + "nome": "data_credito", + "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num", + "default": 0 + }, + + "24.1": { + "nome": "vazio9", + "posicao_inicio": 208, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicoob/specs/segment_p.json b/cnab240/bancos/sicoob/specs/segment_p.json index e69de29..2654a03 100644 --- a/cnab240/bancos/sicoob/specs/segment_p.json +++ b/cnab240/bancos/sicoob/specs/segment_p.json @@ -0,0 +1,330 @@ +{ + "nome": "SegmentoP", + "campos": { + "01.3P": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.3P": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3P": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3P": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3P": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "P" + }, + + "06.3P": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3P": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3P": { + "nome": "cedente_agencia", + "posicao_inicio": 18, + "posicao_fim": 22, + "formato": "num", + "default": 3069 + }, + + "09.3P": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "alfa", + "default": "" + }, + + "10.3P": { + "nome": "cedente_conta", + "posicao_inicio": 24, + "posicao_fim": 35, + "formato": "num", + "default": 0 + }, + + "11.3P": { + "nome": "cedente_conta_dv", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "alfa" + }, + + "12.3P": { + "nome": "vazio2", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "alfa", + "default": "" + }, + + "13.3P": { + "nome": "nosso_numero", + "posicao_inicio": 38, + "posicao_fim": 57, + "formato": "num" + }, + + "14.3P": { + "nome": "carteira_numero", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num", + "default": 1 + }, + + "15.3P": { + "nome": "cadastramento", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "num", + "default": 0 + }, + + "16.3P": { + "nome": "vazio3", + "posicao_inicio": 60, + "posicao_fim": 60, + "formato": "alfa", + "default": "" + }, + + "17.3P": { + "nome": "emissao_boleto", + "posicao_inicio": 61, + "posicao_fim": 61, + "formato": "num", + "default": 2 + }, + + "18.3P": { + "nome": "distribuicao_boleto", + "posicao_inicio": 62, + "posicao_fim": 62, + "formato": "alfa", + "default": "2" + }, + + "19.3P": { + "nome": "numero_documento", + "posicao_inicio": 63, + "posicao_fim": 77, + "formato": "alfa", + }, + + "20.3P": { + "nome": "vencimento_titulo", + "posicao_inicio": 78, + "posicao_fim": 85, + "formato": "num" + }, + + "21.3P": { + "nome": "valor_titulo", + "posicao_inicio": 86, + "posicao_fim": 100, + "formato": "num", + "decimais": 2 + }, + + "22.3P": { + "nome": "agencia_cobradora", + "posicao_inicio": 101, + "posicao_fim": 105, + "formato": "num", + "default": 0 + }, + + "23.3P": { + "nome": "agencia_cobradora_dv", + "posicao_inicio": 106, + "posicao_fim": 106, + "formato": "num", + "default": 0 + }, + + "24.3P": { + "nome": "especie_titulo", + "posicao_inicio": 107, + "posicao_fim": 108, + "formato": "num" + }, + + "25.3P": { + "nome": "aceite_titulo", + "posicao_inicio": 109, + "posicao_fim": 109, + "formato": "alfa" + }, + + "26.3P": { + "nome": "data_emissao_titulo", + "posicao_inicio": 110, + "posicao_fim": 117, + "formato": "num" + }, + + "27.3P": { + "nome": "codigo_juros", + "posicao_inicio": 118, + "posicao_fim": 118, + "formato": "num", + "default": 0 + }, + + "28.3P": { + "nome": "juros_mora_data", + "posicao_inicio": 119, + "posicao_fim": 126, + "formato": "num", + "default": 0 + }, + + "29.3P": { + "nome": "juros_mora_taxa_dia", + "posicao_inicio": 127, + "posicao_fim": 141, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "30.3P": { + "nome": "codigo_desconto", + "posicao_inicio": 142, + "posicao_fim": 142, + "formato": "num", + "default": 0 + }, + + "31.3P": { + "nome": "desconto1_data", + "posicao_inicio": 143, + "posicao_fim": 150, + "formato": "num", + "default": 0 + }, + + "32.3P": { + "nome": "desconto1_percentual", + "posicao_inicio": 151, + "posicao_fim": 165, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "33.3P": { + "nome": "valor_iof", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "34.3P": { + "nome": "valor_abatimento", + "posicao_inicio": 181, + "posicao_fim": 195, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "35.3P": { + "nome": "identificacao_titulo", + "posicao_inicio": 196, + "posicao_fim": 220, + "formato": "alfa" + }, + + "36.3P": { + "nome": "codigo_protesto", + "posicao_inicio": 221, + "posicao_fim": 221, + "formato": "num", + "default": 0 + }, + + "37.3P": { + "nome": "prazo_protesto", + "posicao_inicio": 222, + "posicao_fim": 223, + "formato": "num", + "default": 0 + }, + + "28.3P": { + "nome": "codigo_baixa", + "posicao_inicio": 224, + "posicao_fim": 224, + "formato": "num", + "default": 0 + }, + + "39.3P": { + "nome": "prazo_baixa", + "posicao_inicio": 225, + "posicao_fim": 227, + "formato": "alfa", + }, + + "40.3P": { + "nome": "codigo_moeda", + "posicao_inicio": 228, + "posicao_fim": 229, + "formato": "num", + "default": 9 + }, + + "41.3P": { + "nome": "vazio4", + "posicao_inicio": 230, + "posicao_fim": 239, + "formato": "num", + }, + + "42.3P": { + "nome": "vazio5", + "posicao_inicio": 240, + "posicao_fim": 240, + "formato": "alfa", + } + } +} diff --git a/cnab240/bancos/sicoob/specs/segment_q.json b/cnab240/bancos/sicoob/specs/segment_q.json index e69de29..0c011f9 100644 --- a/cnab240/bancos/sicoob/specs/segment_q.json +++ b/cnab240/bancos/sicoob/specs/segment_q.json @@ -0,0 +1,171 @@ +{ + "nome": "SegmentoQ", + "campos": { + "01.3Q": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.3Q": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 1 + }, + + "03.3Q": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3Q": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3Q": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "Q" + }, + + "06.3Q": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3Q": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num", + "default": 1 + }, + + "08.3Q": { + "nome": "sacado_inscricao_tipo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "09.3Q": { + "nome": "sacado_inscricao_numero", + "posicao_inicio": 19, + "posicao_fim": 33, + "formato": "num" + }, + + "10.3Q": { + "nome": "sacado_nome", + "posicao_inicio": 34, + "posicao_fim": 73, + "formato": "alfa" + }, + + "11.3Q": { + "nome": "sacado_endereco", + "posicao_inicio": 74, + "posicao_fim": 113, + "formato": "alfa" + }, + + "12.3Q": { + "nome": "sacado_bairro", + "posicao_inicio": 114, + "posicao_fim": 128, + "formato": "alfa" + }, + + "13.3Q": { + "nome": "sacado_cep", + "posicao_inicio": 129, + "posicao_fim": 133, + "formato": "num" + }, + + "14.3Q": { + "nome": "sacado_cep_sufixo", + "posicao_inicio": 134, + "posicao_fim": 136, + "formato": "num" + }, + + "15.3Q": { + "nome": "sacado_cidade", + "posicao_inicio": 137, + "posicao_fim": 151, + "formato": "alfa" + }, + + "16.3Q": { + "nome": "sacado_uf", + "posicao_inicio": 152, + "posicao_fim": 153, + "formato": "alfa" + }, + + "17.3Q": { + "nome": "sacador_inscricao_tipo", + "posicao_inicio": 154, + "posicao_fim": 154, + "formato": "num", + "default": 0 + }, + + "18.3Q": { + "nome": "sacador_inscricao_numero", + "posicao_inicio": 155, + "posicao_fim": 169, + "formato": "num", + "default": 0 + }, + + "19.3Q": { + "nome": "sacador_nome", + "posicao_inicio": 170, + "posicao_fim": 209, + "formato": "alfa", + "default": "" + }, + + "20.3Q": { + "nome": "vazio2", + "posicao_inicio": 210, + "posicao_fim": 212, + "formato": "num", + "default": 0 + }, + + "21.3Q": { + "nome": "vazio3", + "posicao_inicio": 213, + "posicao_fim": 232, + "formato": "alfa", + "default": "" + }, + + "22.3Q": { + "nome": "vazio4", + "posicao_inicio": 233, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicoob/specs/segmento_r.json b/cnab240/bancos/sicoob/specs/segmento_r.json index e69de29..e0c50a2 100644 --- a/cnab240/bancos/sicoob/specs/segmento_r.json +++ b/cnab240/bancos/sicoob/specs/segmento_r.json @@ -0,0 +1,236 @@ +{ + "nome": "SegmentoR", + "campos": { + "01.3R": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.3R": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 1 + }, + + "03.3R": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3R": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3R": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "R" + }, + + "06.3R": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3R": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num", + "default": 1 + }, + + "08.3R": { + "nome": "desc2_codigo", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num", + "default": 0 + }, + + "09.3R": { + "nome": "desc2_data", + "posicao_inicio": 19, + "posicao_fim": 26, + "formato": "num", + "default": 0 + }, + + "10.3R": { + "nome": "desc2_percentual", + "posicao_inicio": 27, + "posicao_fim": 41, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "11.3R": { + "nome": "desc3_codigo", + "posicao_inicio": 42, + "posicao_fim": 42, + "formato": "num", + "default": 0 + }, + + "12.3R": { + "nome": "desc3_data", + "posicao_inicio": 43, + "posicao_fim": 50, + "formato": "num", + "default": 0 + }, + + "13.3R": { + "nome": "desc3_percentual", + "posicao_inicio": 51, + "posicao_fim": 65, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "14.3R": { + "nome": "codigo_multa", + "posicao_inicio": 66, + "posicao_fim": 66, + "formato": "alfa", + "default": "2" + }, + + "15.3R": { + "nome": "data_multa", + "posicao_inicio": 67, + "posicao_fim": 74, + "formato": "num" + }, + + "16.3R": { + "nome": "valor_multa", + "posicao_inicio": 75, + "posicao_fim": 89, + "formato": "num" + }, + + "17.3R": { + "nome": "vazio2", + "posicao_inicio": 90, + "posicao_fim": 99, + "formato": "alfa", + "default": "" + }, + + "18.3R": { + "nome": "informacao3", + "posicao_inicio": 100, + "posicao_fim": 139, + "formato": "alfa", + "default": "" + }, + + "19.3R": { + "nome": "informacao4", + "posicao_inicio": 140, + "posicao_fim": 179, + "formato": "alfa", + "default": "" + }, + + "20.3R": { + "nome": "vazio3", + "posicao_inicio": 180, + "posicao_fim": 199, + "formato": "alfa", + "default": "" + }, + + "21.3R": { + "nome": "codigo_ocorrencia_sacado", + "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num", + "default": 0 + }, + + "22.3R": { + "nome": "vazio4", + "posicao_inicio": 208, + "posicao_fim": 210, + "formato": "num", + "default": 0 + }, + + "23.3R": { + "nome": "vazio5", + "posicao_inicio": 211, + "posicao_fim": 215, + "formato": "num", + "default": + }, + + "24.3R": { + "nome": "vazio6", + "posicao_inicio": 216, + "posicao_fim": 216, + "formato": "alfa", + "default": "" + }, + + "25.3R": { + "nome": "vazio7", + "posicao_inicio": 217, + "posicao_fim": 228, + "formato": "num", + "default": 0 + }, + + "26.3R": { + "nome": "vazio8", + "posicao_inicio": 229, + "posicao_fim": 229, + "formato": "alfa", + "default": "" + }, + + "27.3R": { + "nome": "vazio9", + "posicao_inicio": 230, + "posicao_fim": 230, + "formato": "alfa", + "default": "" + }, + + "28.3R": { + "nome": "vazio10", + "posicao_inicio": 231, + "posicao_fim": 231, + "formato": "num", + "default": 0 + }, + + "29.3R": { + "nome": "vazio11", + "posicao_inicio": 232, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicoob/specs/segmento_s.json b/cnab240/bancos/sicoob/specs/segmento_s.json index e69de29..42a7a15 100644 --- a/cnab240/bancos/sicoob/specs/segmento_s.json +++ b/cnab240/bancos/sicoob/specs/segmento_s.json @@ -0,0 +1,110 @@ +{ + "nome": "SegmentoS", + "campos": { + "01.3S": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.3S": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 1 + }, + + "03.3S": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3S": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num", + }, + + "05.3S": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "S" + }, + + "06.3S": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3S": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num", + "default": 1 + }, + + "08.3S": { + "nome": "tipo_impressao", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num", + "default": 3 + }, + + "09.3S": { + "nome": "informacao5", + "posicao_inicio": 19, + "posicao_fim": 58, + "formato": "alfa", + }, + + "10.3S": { + "nome": "informacao6", + "posicao_inicio": 59, + "posicao_fim": 98, + "formato": "alfa", + }, + + "11.3S": { + "nome": "informacao7", + "posicao_inicio": 99, + "posicao_fim": 138, + "formato": "alfa", + }, + + "12.3S": { + "nome": "informacao8", + "posicao_inicio": 139, + "posicao_fim": 178, + "formato": "alfa", + }, + + "13.3S": { + "nome": "informacao9", + "posicao_inicio": 179, + "posicao_fim": 218, + "formato": "alfa", + }, + + "14.3S": { + "nome": "controle_banco", + "posicao_inicio": 219, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + }, + } +} diff --git a/cnab240/bancos/sicoob/specs/trailer_arquivo.json b/cnab240/bancos/sicoob/specs/trailer_arquivo.json index e69de29..a873dac 100644 --- a/cnab240/bancos/sicoob/specs/trailer_arquivo.json +++ b/cnab240/bancos/sicoob/specs/trailer_arquivo.json @@ -0,0 +1,67 @@ +{ + "nome": "TrailerArquivo", + "campos": { + "01.9": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.9": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num", + "default": 9999 + }, + + "03.9": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 9 + }, + + "04.9": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.9": { + "nome": "totais_quantidade_lotes", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num", + "default": 1 + }, + + "06.9": { + "nome": "totais_quantidade_registros", + "posicao_inicio": 24, + "posicao_fim": 29, + "formato": "num" + }, + + "07.9": { + "nome": "vazio2", + "posicao_inicio": 30, + "posicao_fim": 35, + "formato": "num", + "default": 0 + }, + + "08.9": { + "nome": "vazio3", + "posicao_inicio": 36, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json b/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json index e69de29..68e71bd 100644 --- a/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json +++ b/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json @@ -0,0 +1,127 @@ +{ + "nome": "TrailerLoteCobranca", + "campos": { + "01.5": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.5": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.5": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 5 + }, + + "04.5": { + "nome": "vazio1", + "posicao_inicio": 9, + "posicao_fim": 17, + "formato": "alfa", + "default": "" + }, + + "05.5": { + "nome": "quantidade_registros", + "posicao_inicio": 18, + "posicao_fim": 23, + "formato": "num" + }, + + "06.5": { + "nome": "cobrancasimples_quantidade_titulos", + "posicao_inicio": 24, + "posicao_fim": 29, + "formato": "num", + "default": 0 + }, + + "07.5": { + "nome": "cobrancasimples_valor_titulos", + "posicao_inicio": 30, + "posicao_fim": 46, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "08.5": { + "nome": "cobrancavinculada_quantidade_titulos", + "posicao_inicio": 47, + "posicao_fim": 52, + "formato": "num", + "default": 0 + }, + + "09.5": { + "nome": "cobrancavinculada_valor_titulos", + "posicao_inicio": 53, + "posicao_fim": 69, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "10.5": { + "nome": "cobrancacaucionada_quantidade_titulos", + "posicao_inicio": 70, + "posicao_fim": 75, + "formato": "num", + "default": 0 + }, + + "11.5": { + "nome": "cobrancacaucionada_valor_titulos", + "posicao_inicio": 76, + "posicao_fim": 92, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "12.5": { + "nome": "cobrancadescontada_quantidade_titulos", + "posicao_inicio": 93, + "posicao_fim": 98, + "formato": "num", + "default": 0 + }, + + "13.5": { + "nome": "cobrancadescontada_valor_titulos", + "posicao_inicio": 99, + "posicao_fim": 115, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "14.5": { + "nome": "numero_aviso", + "posicao_inicio": 116, + "posicao_fim": 123, + "formato": "alfa", + "default": "" + }, + + "12.5": { + "nome": "vazio3", + "posicao_inicio": 124, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} From 2268c3bc396e2a10da57686e2b7166379b33c18b Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 2 May 2016 21:01:58 -0300 Subject: [PATCH 74/81] =?UTF-8?q?Corre=C3=A7=C3=B5es=20layout=20sicoob?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bancos/sicoob/specs/header_arquivo.json | 15 +++++------ .../sicoob/specs/header_lote_cobranca.json | 26 ++++--------------- cnab240/bancos/sicoob/specs/segment_p.json | 11 ++++---- cnab240/bancos/sicoob/specs/segmento_r.json | 2 +- cnab240/bancos/sicoob/specs/segmento_s.json | 14 +++++----- 5 files changed, 26 insertions(+), 42 deletions(-) diff --git a/cnab240/bancos/sicoob/specs/header_arquivo.json b/cnab240/bancos/sicoob/specs/header_arquivo.json index eb7d18a..96c6974 100644 --- a/cnab240/bancos/sicoob/specs/header_arquivo.json +++ b/cnab240/bancos/sicoob/specs/header_arquivo.json @@ -51,8 +51,8 @@ "nome": "vazio2", "posicao_inicio": 33, "posicao_fim": 52, - "formato": "alfa", - "default": "" + "formato": "num", + "default": 0 }, "08.0": { @@ -67,15 +67,14 @@ "nome": "cedente_agencia_dv", "posicao_inicio": 58, "posicao_fim": 58, - "formato": "alfa", + "formato": "alfa" }, "10.0": { "nome": "cedente_conta", "posicao_inicio": 59, "posicao_fim": 70, - "formato": "alfa", - "default": "" + "formato": "num" }, "11.0": { @@ -151,15 +150,15 @@ "posicao_inicio": 164, "posicao_fim": 166, "formato": "alfa", - "default": "081" + "default": "087" }, "21.0": { "nome": "vazio5", "posicao_inicio": 167, "posicao_fim": 171, - "formato": "alfa", - "default": "0000" + "formato": "num", + "default": 0 }, "22.0": { diff --git a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json index 7d69f1b..a2b366d 100644 --- a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json +++ b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json @@ -54,7 +54,7 @@ "posicao_inicio": 14, "posicao_fim": 16, "formato": "num", - "default": 40 + "default": 45 }, "08.1": { @@ -106,14 +106,14 @@ "nome": "cedente_conta", "posicao_inicio": 60, "posicao_fim": 71, - "formato": "num", + "formato": "num" }, "15.1": { "nome": "cedente_conta_dv", "posicao_inicio": 72, "posicao_fim": 72, - "formato": "alfa", + "formato": "alfa" }, "16.1": { @@ -124,21 +124,6 @@ "default": "" }, - "17.1": { - "nome": "cedente_nome", - "posicao_inicio": 74, - "posicao_fim": 103, - "formato": "alfa", - "default": "" - }, - - "18.1": { - "nome": "cedente_agencia_conta_dv", - "posicao_inicio": 73, - "posicao_fim": 73, - "formato": "num" - }, - "19.1": { "nome": "cedente_nome", "posicao_inicio": 74, @@ -163,7 +148,7 @@ }, "22.1": { - "nome": "controlecob_numero_remret", + "nome": "controlecob_numero", "posicao_inicio": 184, "posicao_fim": 191, "formato": "num" @@ -177,7 +162,7 @@ }, "23.1": { - "nome": "data_credito", + "nome": "vazio8", "posicao_inicio": 200, "posicao_fim": 207, "formato": "num", @@ -191,6 +176,5 @@ "formato": "alfa", "default": "" } - } } diff --git a/cnab240/bancos/sicoob/specs/segment_p.json b/cnab240/bancos/sicoob/specs/segment_p.json index 2654a03..d8b7bee 100644 --- a/cnab240/bancos/sicoob/specs/segment_p.json +++ b/cnab240/bancos/sicoob/specs/segment_p.json @@ -74,8 +74,7 @@ "nome": "cedente_conta", "posicao_inicio": 24, "posicao_fim": 35, - "formato": "num", - "default": 0 + "formato": "num" }, "11.3P": { @@ -144,7 +143,7 @@ "nome": "numero_documento", "posicao_inicio": 63, "posicao_fim": 77, - "formato": "alfa", + "formato": "alfa" }, "20.3P": { @@ -303,6 +302,8 @@ "posicao_inicio": 225, "posicao_fim": 227, "formato": "alfa", + "default": "" + }, "40.3P": { @@ -317,14 +318,14 @@ "nome": "vazio4", "posicao_inicio": 230, "posicao_fim": 239, - "formato": "num", + "formato": "num" }, "42.3P": { "nome": "vazio5", "posicao_inicio": 240, "posicao_fim": 240, - "formato": "alfa", + "formato": "alfa" } } } diff --git a/cnab240/bancos/sicoob/specs/segmento_r.json b/cnab240/bancos/sicoob/specs/segmento_r.json index e0c50a2..06f1725 100644 --- a/cnab240/bancos/sicoob/specs/segmento_r.json +++ b/cnab240/bancos/sicoob/specs/segmento_r.json @@ -181,7 +181,7 @@ "posicao_inicio": 211, "posicao_fim": 215, "formato": "num", - "default": + "default": 0 }, "24.3R": { diff --git a/cnab240/bancos/sicoob/specs/segmento_s.json b/cnab240/bancos/sicoob/specs/segmento_s.json index 42a7a15..ea01309 100644 --- a/cnab240/bancos/sicoob/specs/segmento_s.json +++ b/cnab240/bancos/sicoob/specs/segmento_s.json @@ -29,7 +29,7 @@ "nome": "servico_numero_registro", "posicao_inicio": 9, "posicao_fim": 13, - "formato": "num", + "formato": "num" }, "05.3S": { @@ -68,35 +68,35 @@ "nome": "informacao5", "posicao_inicio": 19, "posicao_fim": 58, - "formato": "alfa", + "formato": "alfa" }, "10.3S": { "nome": "informacao6", "posicao_inicio": 59, "posicao_fim": 98, - "formato": "alfa", + "formato": "alfa" }, "11.3S": { "nome": "informacao7", "posicao_inicio": 99, "posicao_fim": 138, - "formato": "alfa", + "formato": "alfa" }, "12.3S": { "nome": "informacao8", "posicao_inicio": 139, "posicao_fim": 178, - "formato": "alfa", + "formato": "alfa" }, "13.3S": { "nome": "informacao9", "posicao_inicio": 179, "posicao_fim": 218, - "formato": "alfa", + "formato": "alfa" }, "14.3S": { @@ -105,6 +105,6 @@ "posicao_fim": 240, "formato": "alfa", "default": "" - }, + } } } From c467500066819f05ee186c8e0530c1a6b52965af Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 3 May 2016 11:45:16 -0300 Subject: [PATCH 75/81] =?UTF-8?q?Valida=C3=A7=C3=A3o=20do=20arquivo=20cnab?= =?UTF-8?q?=20ok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sicoob/specs/header_lote_cobranca.json | 18 +++++++++--------- cnab240/bancos/sicoob/specs/segment_p.json | 8 ++++---- .../sicoob/specs/trailer_lote_cobranca.json | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json index a2b366d..c928547 100644 --- a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json +++ b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json @@ -45,8 +45,8 @@ "nome": "vazio1", "posicao_inicio": 12, "posicao_fim": 13, - "formato": "num", - "default": 0 + "formato": "alfa", + "default": "" }, "07.1": { @@ -124,14 +124,14 @@ "default": "" }, - "19.1": { + "17.1": { "nome": "cedente_nome", "posicao_inicio": 74, "posicao_fim": 103, "formato": "alfa" }, - "20.1": { + "18.1": { "nome": "mensagem_um", "posicao_inicio": 104, "posicao_fim": 143, @@ -139,7 +139,7 @@ "default": "" }, - "21.1": { + "19.1": { "nome": "mensagem_dois", "posicao_inicio": 144, "posicao_fim": 183, @@ -147,21 +147,21 @@ "default": "" }, - "22.1": { + "20.1": { "nome": "controlecob_numero", "posicao_inicio": 184, "posicao_fim": 191, "formato": "num" }, - "23.1": { + "21.1": { "nome": "controlecob_data_gravacao", "posicao_inicio": 192, "posicao_fim": 199, "formato": "num" }, - "23.1": { + "22.1": { "nome": "vazio8", "posicao_inicio": 200, "posicao_fim": 207, @@ -169,7 +169,7 @@ "default": 0 }, - "24.1": { + "23.1": { "nome": "vazio9", "posicao_inicio": 208, "posicao_fim": 240, diff --git a/cnab240/bancos/sicoob/specs/segment_p.json b/cnab240/bancos/sicoob/specs/segment_p.json index d8b7bee..da0abf3 100644 --- a/cnab240/bancos/sicoob/specs/segment_p.json +++ b/cnab240/bancos/sicoob/specs/segment_p.json @@ -96,7 +96,7 @@ "nome": "nosso_numero", "posicao_inicio": 38, "posicao_fim": 57, - "formato": "num" + "formato": "alfa" }, "14.3P": { @@ -173,8 +173,8 @@ "nome": "agencia_cobradora_dv", "posicao_inicio": 106, "posicao_fim": 106, - "formato": "num", - "default": 0 + "formato": "alfa", + "default": "" }, "24.3P": { @@ -289,7 +289,7 @@ "default": 0 }, - "28.3P": { + "38.3P": { "nome": "codigo_baixa", "posicao_inicio": 224, "posicao_fim": 224, diff --git a/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json b/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json index 68e71bd..66b0c62 100644 --- a/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json +++ b/cnab240/bancos/sicoob/specs/trailer_lote_cobranca.json @@ -115,7 +115,7 @@ "default": "" }, - "12.5": { + "15.5": { "nome": "vazio3", "posicao_inicio": 124, "posicao_fim": 240, From 94ac80f1a2b788de5f0f2bf6c2d431ae39632389 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Wed, 4 May 2016 15:59:22 -0300 Subject: [PATCH 76/81] Campos de juros e multa - passando corretamente o header para a cobranca --- cnab240/bancos/sicoob/specs/header_arquivo.json | 3 +-- cnab240/bancos/sicoob/specs/header_lote_cobranca.json | 2 +- cnab240/bancos/sicoob/specs/segment_p.json | 2 +- cnab240/bancos/sicoob/specs/segmento_r.json | 5 +++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cnab240/bancos/sicoob/specs/header_arquivo.json b/cnab240/bancos/sicoob/specs/header_arquivo.json index 96c6974..3551bda 100644 --- a/cnab240/bancos/sicoob/specs/header_arquivo.json +++ b/cnab240/bancos/sicoob/specs/header_arquivo.json @@ -51,8 +51,7 @@ "nome": "vazio2", "posicao_inicio": 33, "posicao_fim": 52, - "formato": "num", - "default": 0 + "formato": "alfa" }, "08.0": { diff --git a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json index c928547..ffb892b 100644 --- a/cnab240/bancos/sicoob/specs/header_lote_cobranca.json +++ b/cnab240/bancos/sicoob/specs/header_lote_cobranca.json @@ -54,7 +54,7 @@ "posicao_inicio": 14, "posicao_fim": 16, "formato": "num", - "default": 45 + "default": 40 }, "08.1": { diff --git a/cnab240/bancos/sicoob/specs/segment_p.json b/cnab240/bancos/sicoob/specs/segment_p.json index da0abf3..2861040 100644 --- a/cnab240/bancos/sicoob/specs/segment_p.json +++ b/cnab240/bancos/sicoob/specs/segment_p.json @@ -215,7 +215,7 @@ }, "29.3P": { - "nome": "juros_mora_taxa_dia", + "nome": "juros_mora_taxa", "posicao_inicio": 127, "posicao_fim": 141, "formato": "num", diff --git a/cnab240/bancos/sicoob/specs/segmento_r.json b/cnab240/bancos/sicoob/specs/segmento_r.json index 06f1725..e806408 100644 --- a/cnab240/bancos/sicoob/specs/segmento_r.json +++ b/cnab240/bancos/sicoob/specs/segmento_r.json @@ -122,10 +122,11 @@ }, "16.3R": { - "nome": "valor_multa", + "nome": "juros_multa", "posicao_inicio": 75, "posicao_fim": 89, - "formato": "num" + "formato": "num", + "decimais": 2 }, "17.3R": { From 03ce65f3786cbc5aafa3d7a29d513ee29d1bf80c Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 23 May 2016 17:40:08 -0300 Subject: [PATCH 77/81] [WIP] Segmentos T e U de retorno --- cnab240/bancos/sicoob/specs/segmento_t.json | 273 ++++++++++++++++++++ cnab240/bancos/sicoob/specs/segmento_u.json | 175 +++++++++++++ 2 files changed, 448 insertions(+) create mode 100644 cnab240/bancos/sicoob/specs/segmento_t.json create mode 100644 cnab240/bancos/sicoob/specs/segmento_u.json diff --git a/cnab240/bancos/sicoob/specs/segmento_t.json b/cnab240/bancos/sicoob/specs/segmento_t.json new file mode 100644 index 0000000..bc66298 --- /dev/null +++ b/cnab240/bancos/sicoob/specs/segmento_t.json @@ -0,0 +1,273 @@ +{ + "nome": "SegmentoT", + "campos": { + "01.3T": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 756 + }, + + "02.3T": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3T": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3T": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3T": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "T" + }, + + "06.3T": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa" + }, + + "07.3T": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3T": { + "nome": "vazio1", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num", + "default": 0 + }, + + "09.3T": { + "nome": "cedente_agencia", + "posicao_inicio": 19, + "posicao_fim": 22, + "formato": "num" + }, + + "10.3T": { + "nome": "vazio2", + "posicao_inicio": 23, + "posicao_fim": 30, + "formato": "num", + "default": 0 + }, + + "11.3T": { + "nome": "cedente_conta", + "posicao_inicio": 31, + "posicao_fim": 35, + "formato": "num" + }, + + "12.3T": { + "nome": "vazio3", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "alfa", + "default": "" + }, + + "13.3T": { + "nome": "cedente_agencia_conta_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "num" + }, + + "14.3T": { + "nome": "cobranca_carteira", + "posicao_inicio": 38, + "posicao_fim": 40, + "formato": "num" + }, + + "15.3T": { + "nome": "nosso_numero", + "posicao_inicio": 41, + "posicao_fim": 48, + "formato": "num" + }, + + "16.3T": { + "nome": "nosso_numero_dv", + "posicao_inicio": 49, + "posicao_fim": 49, + "formato": "num" + }, + + "17.3T": { + "nome": "vazio4", + "posicao_inicio": 50, + "posicao_fim": 57, + "formato": "alfa", + "default": "" + }, + + "18.3T": { + "nome": "vazio5", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num", + "default": 0 + }, + + "19.3T": { + "nome": "numero_documento", + "posicao_inicio": 59, + "posicao_fim": 68, + "formato": "alfa" + }, + + "20.3T": { + "nome": "vazio6", + "posicao_inicio": 69, + "posicao_fim": 73, + "formato": "alfa", + "default": "" + }, + + "21.3T": { + "nome": "vencimento_titulo", + "posicao_inicio": 74, + "posicao_fim": 81, + "formato": "num" + }, + + "22.3T": { + "nome": "valor_titulo", + "posicao_inicio": 82, + "posicao_fim": 96, + "formato": "num", + "decimais": 2 + }, + + "23.3T": { + "nome": "vazio7", + "posicao_inicio": 97, + "posicao_fim": 99, + "formato": "num", + "default": 0 + }, + + "24.3T": { + "nome": "agencia_cobradora", + "posicao_inicio": 100, + "posicao_fim": 104, + "formato": "num" + }, + + "25.3T": { + "nome": "agencia_cobradora_dv", + "posicao_inicio": 105, + "posicao_fim": 105, + "formato": "num" + }, + + "26.3T": { + "nome": "identificacao_titulo", + "posicao_inicio": 106, + "posicao_fim": 130, + "formato": "alfa" + }, + + "27.3T": { + "nome": "vazio8", + "posicao_inicio": 131, + "posicao_fim": 132, + "formato": "num", + "default": 0 + }, + + "28.3T": { + "nome": "sacado_inscricao_tipo", + "posicao_inicio": 133, + "posicao_fim": 133, + "formato": "num" + }, + + "29.3T": { + "nome": "sacado_inscricao_numero", + "posicao_inicio": 134, + "posicao_fim": 148, + "formato": "num" + }, + + "30.3T": { + "nome": "sacado_nome", + "posicao_inicio": 149, + "posicao_fim": 178, + "formato": "alfa" + }, + + "31.3T": { + "nome": "vazio9", + "posicao_inicio": 179, + "posicao_fim": 188, + "formato": "alfa", + "default": "" + }, + + "32.3T": { + "nome": "vazio10", + "posicao_inicio": 189, + "posicao_fim": 198, + "formato": "num", + "default": 0 + }, + + "33.3T": { + "nome": "valor_tarifas", + "posicao_inicio": 199, + "posicao_fim": 213, + "formato": "num", + "decimais": 2 + }, + + "34.3T": { + "nome": "motivo_ocorrencia", + "posicao_inicio": 214, + "posicao_fim": 221, + "formato": "alfa" + }, + + "35.3T": { + "nome": "codigo_liquidacao", + "posicao_inicio": 222, + "posicao_fim": 223, + "formato": "alfa" + }, + + "36.3T": { + "nome": "vazio11", + "posicao_inicio": 224, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicoob/specs/segmento_u.json b/cnab240/bancos/sicoob/specs/segmento_u.json new file mode 100644 index 0000000..362c6d5 --- /dev/null +++ b/cnab240/bancos/sicoob/specs/segmento_u.json @@ -0,0 +1,175 @@ + +{ + "nome": "SegmentoU", + "campos": { + "01.3U": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 341 + }, + + "02.3U": { + "nome": "controle_lote", + "posicao_inicio": 4, + "posicao_fim": 7, + "formato": "num" + }, + + "03.3U": { + "nome": "controle_registro", + "posicao_inicio": 8, + "posicao_fim": 8, + "formato": "num", + "default": 3 + }, + + "04.3U": { + "nome": "servico_numero_registro", + "posicao_inicio": 9, + "posicao_fim": 13, + "formato": "num" + }, + + "05.3U": { + "nome": "servico_segmento", + "posicao_inicio": 14, + "posicao_fim": 14, + "formato": "alfa", + "default": "U" + }, + + "06.3U": { + "nome": "vazio1", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3U": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3U": { + "nome": "titulo_acrescimos", + "posicao_inicio": 18, + "posicao_fim": 32, + "formato": "num", + "decimais": 2 + }, + + "09.3U": { + "nome": "titulo_desconto", + "posicao_inicio": 33, + "posicao_fim": 47, + "formato": "num", + "decimais": 2 + }, + + "10.3U": { + "nome": "titulo_abatimento", + "posicao_inicio": 48, + "posicao_fim": 62, + "formato": "num", + "decimais": 2 + }, + + "11.3U": { + "nome": "titulo_iof", + "posicao_inicio": 63, + "posicao_fim": 77, + "formato": "num", + "decimais": 2 + }, + + "12.3U": { + "nome": "titulo_pago", + "posicao_inicio": 78, + "posicao_fim": 92, + "formato": "num", + "decimais": 2 + }, + + "13.3U": { + "nome": "titulo_liquido", + "posicao_inicio": 93, + "posicao_fim": 107, + "formato": "num", + "decimais": 2 + }, + + "14.3U": { + "nome": "vazio2", + "posicao_inicio": 108, + "posicao_fim": 137, + "formato": "num", + "default": 0 + }, + + "15.3U": { + "nome": "data_ocorrencia", + "posicao_inicio": 138, + "posicao_fim": 145, + "formato": "num" + }, + + "16.3U": { + "nome": "data_credito", + "posicao_inicio": 146, + "posicao_fim": 153, + "formato": "num" + }, + + "17.3U": { + "nome": "ocorrencia_codigo", + "posicao_inicio": 154, + "posicao_fim": 157, + "formato": "num" + }, + + "18.3U": { + "nome": "ocorrencia_data", + "posicao_inicio": 158, + "posicao_fim": 165, + "formato": "num" + }, + + "19.3U": { + "nome": "ocorrencia_valor", + "posicao_inicio": 166, + "posicao_fim": 180, + "formato": "num", + "decimais": 2 + }, + + "20.3U": { + "nome": "vazio3", + "posicao_inicio": 181, + "posicao_fim": 210, + "formato": "alfa", + "default": "" + }, + + "21.3U": { + "nome": "vazio4", + "posicao_inicio": 211, + "posicao_fim": 233, + "formato": "num", + "default": 0 + }, + + "22.3U": { + "nome": "vazio5", + "posicao_inicio": 234, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} From 12eccc5644ef07cf380dd0bb864d1ef701ddd86a Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 24 May 2016 09:25:40 -0300 Subject: [PATCH 78/81] WIP - Segmento T --- cnab240/bancos/sicoob/specs/segmento_t.json | 134 ++++++-------------- 1 file changed, 38 insertions(+), 96 deletions(-) diff --git a/cnab240/bancos/sicoob/specs/segmento_t.json b/cnab240/bancos/sicoob/specs/segmento_t.json index bc66298..89af30d 100644 --- a/cnab240/bancos/sicoob/specs/segmento_t.json +++ b/cnab240/bancos/sicoob/specs/segmento_t.json @@ -54,110 +54,69 @@ }, "08.3T": { - "nome": "vazio1", - "posicao_inicio": 18, - "posicao_fim": 18, - "formato": "num", - "default": 0 - }, - - "09.3T": { "nome": "cedente_agencia", - "posicao_inicio": 19, + "posicao_inicio": 18, "posicao_fim": 22, "formato": "num" }, - "10.3T": { - "nome": "vazio2", + "09.3T": { + "nome": "cedente_agencia_dv", "posicao_inicio": 23, - "posicao_fim": 30, - "formato": "num", - "default": 0 + "posicao_fim": 23, + "formato": "num" }, - "11.3T": { + "10.3T": { "nome": "cedente_conta", - "posicao_inicio": 31, + "posicao_inicio": 24, "posicao_fim": 35, "formato": "num" }, - "12.3T": { - "nome": "vazio3", + "11.3T": { + "nome": "cedente_conta_dv", "posicao_inicio": 36, "posicao_fim": 36, - "formato": "alfa", - "default": "" + "formato": "num" }, - "13.3T": { + "12.3T": { "nome": "cedente_agencia_conta_dv", "posicao_inicio": 37, "posicao_fim": 37, "formato": "num" }, - "14.3T": { - "nome": "cobranca_carteira", - "posicao_inicio": 38, - "posicao_fim": 40, - "formato": "num" - }, - - "15.3T": { + "13.3T": { "nome": "nosso_numero", - "posicao_inicio": 41, - "posicao_fim": 48, - "formato": "num" - }, - - "16.3T": { - "nome": "nosso_numero_dv", - "posicao_inicio": 49, - "posicao_fim": 49, - "formato": "num" - }, - - "17.3T": { - "nome": "vazio4", - "posicao_inicio": 50, + "posicao_inicio": 38, "posicao_fim": 57, - "formato": "alfa", - "default": "" + "formato": "alfa" }, - "18.3T": { - "nome": "vazio5", + "14.3T": { + "nome": "cobranca_carteira", "posicao_inicio": 58, "posicao_fim": 58, - "formato": "num", - "default": 0 + "formato": "num" }, - "19.3T": { + "15.3T": { "nome": "numero_documento", "posicao_inicio": 59, - "posicao_fim": 68, - "formato": "alfa" - }, - - "20.3T": { - "nome": "vazio6", - "posicao_inicio": 69, "posicao_fim": 73, - "formato": "alfa", - "default": "" + "formato": "alfa" }, - "21.3T": { + "16.3T": { "nome": "vencimento_titulo", "posicao_inicio": 74, "posicao_fim": 81, "formato": "num" }, - "22.3T": { + "17.3T": { "nome": "valor_titulo", "posicao_inicio": 82, "posicao_fim": 96, @@ -165,81 +124,71 @@ "decimais": 2 }, - "23.3T": { - "nome": "vazio7", + "18.3T": { + "nome": "banco_cobrador", "posicao_inicio": 97, "posicao_fim": 99, "formato": "num", "default": 0 }, - "24.3T": { + "19.3T": { "nome": "agencia_cobradora", "posicao_inicio": 100, "posicao_fim": 104, "formato": "num" }, - "25.3T": { + "20.3T": { "nome": "agencia_cobradora_dv", "posicao_inicio": 105, "posicao_fim": 105, "formato": "num" }, - "26.3T": { + "21.3T": { "nome": "identificacao_titulo", "posicao_inicio": 106, "posicao_fim": 130, "formato": "alfa" }, - "27.3T": { - "nome": "vazio8", + "22.3T": { + "nome": "codigo_moeda", "posicao_inicio": 131, "posicao_fim": 132, - "formato": "num", - "default": 0 + "formato": "num" }, - "28.3T": { + "23.3T": { "nome": "sacado_inscricao_tipo", "posicao_inicio": 133, "posicao_fim": 133, "formato": "num" }, - "29.3T": { + "24.3T": { "nome": "sacado_inscricao_numero", "posicao_inicio": 134, "posicao_fim": 148, "formato": "num" }, - "30.3T": { + "25.3T": { "nome": "sacado_nome", "posicao_inicio": 149, - "posicao_fim": 178, + "posicao_fim": 188, "formato": "alfa" }, - "31.3T": { + "26.3T": { "nome": "vazio9", - "posicao_inicio": 179, - "posicao_fim": 188, - "formato": "alfa", - "default": "" - }, - - "32.3T": { - "nome": "vazio10", "posicao_inicio": 189, "posicao_fim": 198, - "formato": "num", - "default": 0 + "formato": "num" }, - "33.3T": { + "27.3T": { "nome": "valor_tarifas", "posicao_inicio": 199, "posicao_fim": 213, @@ -247,21 +196,14 @@ "decimais": 2 }, - "34.3T": { + "28.3T": { "nome": "motivo_ocorrencia", "posicao_inicio": 214, - "posicao_fim": 221, - "formato": "alfa" - }, - - "35.3T": { - "nome": "codigo_liquidacao", - "posicao_inicio": 222, "posicao_fim": 223, "formato": "alfa" }, - "36.3T": { + "29.3T": { "nome": "vazio11", "posicao_inicio": 224, "posicao_fim": 240, From b936646488aa8b72acefc1df17b07da1781775d6 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 24 May 2016 09:56:06 -0300 Subject: [PATCH 79/81] WIP - Segmento U sicoob --- cnab240/bancos/sicoob/specs/segmento_u.json | 43 ++++++++++++++------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/cnab240/bancos/sicoob/specs/segmento_u.json b/cnab240/bancos/sicoob/specs/segmento_u.json index 362c6d5..aa499ec 100644 --- a/cnab240/bancos/sicoob/specs/segmento_u.json +++ b/cnab240/bancos/sicoob/specs/segmento_u.json @@ -7,7 +7,7 @@ "posicao_inicio": 1, "posicao_fim": 3, "formato": "num", - "default": 341 + "default": 756 }, "02.3U": { @@ -104,42 +104,50 @@ }, "14.3U": { - "nome": "vazio2", + "nome": "outras_despesas", "posicao_inicio": 108, - "posicao_fim": 137, + "posicao_fim": 122, "formato": "num", - "default": 0 + "decimais": 2 }, "15.3U": { + "nome": "outros_creditos", + "posicao_inicio": 123, + "posicao_fim": 137, + "formato": "num", + "decimais": 2 + }, + + "16.3U": { "nome": "data_ocorrencia", "posicao_inicio": 138, "posicao_fim": 145, "formato": "num" }, - "16.3U": { + "17.3U": { "nome": "data_credito", "posicao_inicio": 146, "posicao_fim": 153, "formato": "num" }, - "17.3U": { + "18.3U": { "nome": "ocorrencia_codigo", "posicao_inicio": 154, "posicao_fim": 157, - "formato": "num" + "formato": "alfa" }, - "18.3U": { + "19.3U": { "nome": "ocorrencia_data", "posicao_inicio": 158, "posicao_fim": 165, - "formato": "num" + "formato": "alfa" }, - "19.3U": { + "20.3U": { "nome": "ocorrencia_valor", "posicao_inicio": 166, "posicao_fim": 180, @@ -147,7 +155,7 @@ "decimais": 2 }, - "20.3U": { + "21.3U": { "nome": "vazio3", "posicao_inicio": 181, "posicao_fim": 210, @@ -155,15 +163,22 @@ "default": "" }, - "21.3U": { + "22.3U": { "nome": "vazio4", "posicao_inicio": 211, - "posicao_fim": 233, + "posicao_fim": 213, "formato": "num", "default": 0 }, - "22.3U": { + "23.3U": { + "nome": "vazio4", + "posicao_inicio": 214, + "posicao_fim": 233, + "formato": "num" + }, + + "24.3U": { "nome": "vazio5", "posicao_inicio": 234, "posicao_fim": 240, From 8379b974b3f59ec6083608e1071ee7c342fda3db Mon Sep 17 00:00:00 2001 From: Deepak Vashist Date: Sun, 30 Jul 2017 23:29:32 -0300 Subject: [PATCH 80/81] fix bancodobrasil header_lote_cobranca --- .../specs/header_lote_cobranca.json | 35 +++---------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json index 62c97c0..8dacbd2 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json @@ -77,39 +77,12 @@ "formato": "num" }, - "11.1BB1": { + "11.1": { "nome": "cedente_convenio", "posicao_inicio": 34, - "posicao_fim": 42, - "formato": "num" - }, - - "11.1BB2": { - "nome": "cedente_cobranca", - "posicao_inicio": 43, - "posicao_fim": 46, - "formato": "num" - }, - - "11.1BB3": { - "nome": "cedente_carteira", - "posicao_inicio": 47, - "posicao_fim": 48, - "formato": "num" - }, - - "11.1BB4": { - "nome": "cedente_variacao_carteira", - "posicao_inicio": 49, - "posicao_fim": 51, - "formato": "num" - }, - - "11.1BB5": { - "nome": "cedente_identifica_remessa", - "posicao_inicio": 52, "posicao_fim": 53, - "formato": "alfa" + "formato": "alfa", + "default": "" }, "12.1": { @@ -120,7 +93,7 @@ }, "13.1": { - "nome": "cedente_agencia_DV", + "nome": "cedente_agencia_dv", "posicao_inicio": 59, "posicao_fim": 59, "formato": "alfa" From f8ada211eee654cd979c6cb3b470d842b3e2e8cf Mon Sep 17 00:00:00 2001 From: Deepak Vashist Date: Sun, 30 Jul 2017 23:36:56 -0300 Subject: [PATCH 81/81] add default value on header_lote_cobranca bancodobrasil controle_banco --- cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json index 8dacbd2..45d1f36 100644 --- a/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json @@ -5,7 +5,8 @@ "nome": "controle_banco", "posicao_inicio": 1, "posicao_fim": 3, - "formato": "num" + "formato": "num", + "default": 1 }, "02.1": {