diff --git a/.gitignore b/.gitignore index fd4faff..e6522d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.py[co] +.idea/ # Packages *.egg diff --git a/.travis.yml b/.travis.yml index b002ef6..74e94d1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,12 +2,17 @@ language: python 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...\"" -script: ./run_tests.sh -notifications: - irc: - - "irc.freenode.org#tracy-web-tech" + - "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" + - "python -m unittest discover || unit2 discover" + +after_success: + coveralls \ No newline at end of file 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/eventos/__init__.py b/cnab240/bancos/bancodobrasil/__init__.py similarity index 100% rename from cnab240/eventos/__init__.py rename to cnab240/bancos/bancodobrasil/__init__.py diff --git a/cnab240/bancos/bancodobrasil/specs/header_arquivo.json b/cnab240/bancos/bancodobrasil/specs/header_arquivo.json new file mode 100644 index 0000000..a3ca864 --- /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_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num" + }, + + "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": "num" + }, + + "11.0": { + "nome": "cedente_conta_dv", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa" + }, + + "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", + "default": "" + }, + + "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": "alfa", + "default": "" + }, + + "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": "" + } + } +} 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..45d1f36 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/header_lote_cobranca.json @@ -0,0 +1,176 @@ +{ + "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": 42 + }, + + "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": "cedente_convenio", + "posicao_inicio": 34, + "posicao_fim": 53, + "formato": "alfa", + "default": "" + }, + + "12.1": { + "nome": "cedente_agencia", + "posicao_inicio": 54, + "posicao_fim": 58, + "formato": "num" + }, + + "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": "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": "mensagem1", + "posicao_inicio": 104, + "posicao_fim": 143, + "formato": "alfa", + "default": "" + }, + + "19.1": { + "nome": "mensagem2", + "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": "controlecob_data_credito", + "posicao_inicio": 200, + "posicao_fim": 207, + "formato": "num" + }, + + "23.1": { + "nome": "vazio5", + "posicao_inicio": 208, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} 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..c182de1 --- /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_agencia_conta_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": "alfa" + }, + + "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..7b16e43 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_a.json @@ -0,0 +1,220 @@ +{ + "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": "alfa" + }, + + "23.3A": { + "nome": "credito_valor_real", + "posicao_inicio": 163, + "posicao_fim": 177, + "formato": "alfa" + }, + + "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..db90de7 --- /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": "alfa" + }, + + "25.3B": { + "nome": "codigo_ug_centralizadora", + "posicao_inicio": 227, + "posicao_fim": 232, + "formato": "alfa" + }, + + "26.3": { + "nome": "codigo_ispb", + "posicao_inicio": 233, + "posicao_fim": 240, + "formato": "alfa" + } + + } +} 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" + } + + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_p.json b/cnab240/bancos/bancodobrasil/specs/segmento_p.json new file mode 100644 index 0000000..fcdc20e --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_p.json @@ -0,0 +1,326 @@ +{ + "nome": "SegmentoP", + "campos": { + "01.3P": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 1 + }, + + "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" + }, + + "09.3P": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "alfa" + }, + + "10.3P": { + "nome": "cedente_conta", + "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_agencia_conta_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "alfa", + "default": 0 + }, + + "13.3P": { + "nome": "cedente_identificacao", + "posicao_inicio": 38, + "posicao_fim": 57, + "formato": "alfa" + }, + + "14.3P": { + "nome": "cedente_carteira", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num" + }, + + "15.3P": { + "nome": "cedente_forma_cad", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "num" + }, + + "16.3P": { + "nome": "tipo_documento", + "posicao_inicio": 60, + "posicao_fim": 60, + "formato": "alfa" + }, + + "17.3P": { + "nome": "ident_emissao_bloqueto", + "posicao_inicio": 61, + "posicao_fim": 61, + "formato": "num" + }, + + "18.3P": { + "nome": "ident_distribuicao", + "posicao_inicio": 62, + "posicao_fim": 62, + "formato": "num" + }, + + "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", + "default": 0 + }, + + "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" + }, + + "23.3P": { + "nome": "agencia_beneficiario_dv", + "posicao_inicio": 106, + "posicao_fim": 106, + "formato": "alfa" + }, + + "24.3P": { + "nome": "especie_titulo", + "posicao_inicio": 107, + "posicao_fim": 108, + "formato": "num", + "default": 18 + }, + + "25.3P": { + "nome": "aceite_titulo", + "posicao_inicio": 109, + "posicao_fim": 109, + "formato": "alfa", + "default": "N" + }, + + "26.3P": { + "nome": "data_emissao_titulo", + "posicao_inicio": 110, + "posicao_fim": 117, + "formato": "num", + "default": 0 + }, + + "27.3P": { + "nome": "codigo_juros_mora", + "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 + }, + + "30.3P": { + "nome": "desconto1_codigo", + "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", + "default": "" + }, + + "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 + }, + + "38.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": "num", + "default": 0 + }, + + "40.3P": { + "nome": "codigo_moeda", + "posicao_inicio": 228, + "posicao_fim": 229, + "formato": "num", + "default": 0 + }, + + "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": "" + } + } +} diff --git a/cnab240/bancos/bancodobrasil/specs/segmento_q.json b/cnab240/bancos/bancodobrasil/specs/segmento_q.json new file mode 100644 index 0000000..db556fb --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_q.json @@ -0,0 +1,179 @@ +{ + "nome": "SegmentoQ", + "campos": { + "01.3Q": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 1 + }, + + "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": "codigo_compensacao", + "posicao_inicio": 210, + "posicao_fim": 212, + "formato": "num", + "default": 0 + }, + + "21.3Q": { + "nome": "nosso_numero", + "posicao_inicio": 213, + "posicao_fim": 232, + "formato": "alfa" + }, + + "22.3Q": { + "nome": "vazio2", + "posicao_inicio": 233, + "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..b991b17 --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/segmento_r.json @@ -0,0 +1,235 @@ +{ + "nome": "SegmentoR", + "campos": { + "01.3R": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 1 + }, + + "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": "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 + }, + + "14.3R": { + "nome": "multa_codigo", + "posicao_inicio": 66, + "posicao_fim": 66, + "formato": "num", + "default": 0 + }, + + "15.3R": { + "nome": "multa_data", + "posicao_inicio": 67, + "posicao_fim": 74, + "formato": "num", + "default": 0 + }, + + "16.3R": { + "nome": "multa_valor_percentual", + "posicao_inicio": 75, + "posicao_fim": 89, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "17.3R": { + "nome": "info_sacado", + "posicao_inicio": 90, + "posicao_fim": 99, + "formato": "alfa", + "default": "" + }, + + "18.3R": { + "nome": "mensagem3", + "posicao_inicio": 100, + "posicao_fim": 139, + "formato": "alfa", + "default": "" + }, + + "19.3R": { + "nome": "mensagem4", + "posicao_inicio": 140, + "posicao_fim": 179, + "formato": "alfa", + "default": "" + }, + + "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": "" + } + } +} 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..6c4becc --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/spec_to_doc.py @@ -0,0 +1,27 @@ +#!/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..99750cf --- /dev/null +++ b/cnab240/bancos/bancodobrasil/specs/trailer_arquivo.json @@ -0,0 +1,68 @@ +{ + "nome": "TrailerArquivo", + "campos": { + "01.9": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 1 + }, + + "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": "alfa", + "default": "" + }, + + "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": "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": "" + } + } +} 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..24b3fc0 --- /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": 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": "vazio2", + "posicao_inicio": 24, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} 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" + } + } +} diff --git a/cnab240/bancos/bradesco/__init__.py b/cnab240/bancos/bradesco/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/bancos/bradesco/specs/header_arquivo.json b/cnab240/bancos/bradesco/specs/header_arquivo.json new file mode 100644 index 0000000..403b689 --- /dev/null +++ b/cnab240/bancos/bradesco/specs/header_arquivo.json @@ -0,0 +1,180 @@ +{ + "nome": "HeaderArquivo", + "campos": { + "01.0": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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_agencia", + "posicao_inicio": 53, + "posicao_fim": 57, + "formato": "num" + }, + + "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": "num" + }, + + "11.0": { + "nome": "cedente_conta_dv", + "posicao_inicio": 71, + "posicao_fim": 71, + "formato": "alfa" + }, + + "12.0": { + "nome": "cedente_dv_ag_cc", + "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": "arquivo_codigo", + "posicao_inicio": 143, + "posicao_fim": 143, + "formato": "num" + }, + + "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": 84 + }, + + "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": "febraban_cnab24d0", + "posicao_inicio": 212, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/bradesco/specs/header_lote_cobranca.json b/cnab240/bancos/bradesco/specs/header_lote_cobranca.json new file mode 100644 index 0000000..33dc3a0 --- /dev/null +++ b/cnab240/bancos/bradesco/specs/header_lote_cobranca.json @@ -0,0 +1,173 @@ +{ + "nome": "HeaderLoteCobranca", + "campos": { + "01.1": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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": "febraban_cnab06d1", + "posicao_inicio": 12, + "posicao_fim": 13, + "formato": "alfa", + "default": "" + }, + + "07.1": { + "nome": "servico_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_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": "cedente_convenio", + "posicao_inicio": 34, + "posicao_fim": 53, + "formato": "alfa" + }, + + "12.1": { + "nome": "cedente_agencia", + "posicao_inicio": 54, + "posicao_fim": 58, + "formato": "num" + }, + + "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": "cedente_dv_ag_cc", + "posicao_inicio": 73, + "posicao_fim": 73, + "formato": "alfa" + }, + + "17.1": { + "nome": "cedente_nome", + "posicao_inicio": 74, + "posicao_fim": 103, + "formato": "alfa" + }, + + "18.1": { + "nome": "informacao1", + "posicao_inicio": 104, + "posicao_fim": 143, + "formato": "alfa" + }, + + "19.1": { + "nome": "informacao2", + "posicao_inicio": 144, + "posicao_fim": 183, + "formato": "alfa" + }, + + "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_hd_lote", + "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/cnab240/bancos/bradesco/specs/header_lote_extrato.json b/cnab240/bancos/bradesco/specs/header_lote_extrato.json new file mode 100644 index 0000000..cea8849 --- /dev/null +++ b/cnab240/bancos/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/cnab240/bancos/bradesco/specs/segmento_e.json b/cnab240/bancos/bradesco/specs/segmento_e.json new file mode 100644 index 0000000..d8c0ff1 --- /dev/null +++ b/cnab240/bancos/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/cnab240/bancos/bradesco/specs/segmento_p.json b/cnab240/bancos/bradesco/specs/segmento_p.json new file mode 100644 index 0000000..dda2d75 --- /dev/null +++ b/cnab240/bancos/bradesco/specs/segmento_p.json @@ -0,0 +1,309 @@ +{ + "nome": "SegmentoP", + "campos": { + "01.3P": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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" + }, + + "09.3P": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "alfa" + }, + + "10.3P": { + "nome": "cedente_conta", + "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_ag_cc", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "alfa" + }, + + "13.3P": { + "nome": "identificacao_titulo_banco", + "posicao_inicio": 38, + "posicao_fim": 57, + "formato": "num" + }, + + "14.3P": { + "nome": "cobranca_carteira", + "posicao_inicio": 58, + "posicao_fim": 58, + "formato": "num" + }, + + "15.3P": { + "nome": "cobranca_cadastramento", + "posicao_inicio": 59, + "posicao_fim": 59, + "formato": "num" + }, + + "16.3P": { + "nome": "cobranca_documentoTipo", + "posicao_inicio": 60, + "posicao_fim": 60, + "formato": "alfa" + }, + + "17.3P": { + "nome": "cobranca_emissaoBloqueto", + "posicao_inicio": 61, + "posicao_fim": 61, + "formato": "num" + }, + + "18.3P": { + "nome": "cobranca_distribuicaoBloqueto", + "posicao_inicio": 62, + "posicao_fim": 62, + "formato": "alfa" + }, + + "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" + }, + + "23.3P": { + "nome": "agencia_cobradora_dv", + "posicao_inicio": 106, + "posicao_fim": 106, + "formato": "alfa" + }, + + "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": "juros_cod_mora", + "posicao_inicio": 118, + "posicao_fim": 118, + "formato": "num" + }, + + "28.3P": { + "nome": "juros_mora_data", + "posicao_inicio": 119, + "posicao_fim": 126, + "formato": "num" + }, + + "29.3P": { + "nome": "juros_mora_taxa_dia", + "posicao_inicio": 127, + "posicao_fim": 141, + "formato": "num", + "decimais": 2 + }, + + "30.3P": { + "nome": "desconto1_cod", + "posicao_inicio": 142, + "posicao_fim": 142, + "formato": "num" + }, + + "31.3P": { + "nome": "desconto1_data", + "posicao_inicio": 143, + "posicao_fim": 150, + "formato": "num" + }, + + "32.3P": { + "nome": "desconto1_percentual", + "posicao_inicio": 151, + "posicao_fim": 165, + "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": "identificacao_titulo_empresa", + "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", + "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/cnab240/bancos/bradesco/specs/segmento_q.json b/cnab240/bancos/bradesco/specs/segmento_q.json new file mode 100644 index 0000000..4ddcb38 --- /dev/null +++ b/cnab240/bancos/bradesco/specs/segmento_q.json @@ -0,0 +1,163 @@ +{ + "nome": "SegmentoQ", + "campos": { + "01.3Q": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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": "servico_cnab_exclusivo", + "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": 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" + }, + + "18.3Q": { + "nome": "sacador_inscricao_numero", + "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_correspondente", + "posicao_inicio": 210, + "posicao_fim": 212, + "formato": "num" + }, + + "21.3Q": { + "nome": "numero_no_bancoCorrespondente", + "posicao_inicio": 213, + "posicao_fim": 232, + "formato": "alfa" + }, + + "22.3Q": { + "nome": "cnab_exclusivo_campo22dot3Q", + "posicao_inicio": 233, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + } +} diff --git a/cnab240/bancos/bradesco/specs/segmento_r.json b/cnab240/bancos/bradesco/specs/segmento_r.json new file mode 100644 index 0000000..8ba12cd --- /dev/null +++ b/cnab240/bancos/bradesco/specs/segmento_r.json @@ -0,0 +1,217 @@ +{ + "nome": "SegmentoR", + "campos": { + "01.3R": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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": "cnab_exclusivo_campo06dot3R", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3R": { + "nome": "servico_codigoMovimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "08.3R": { + "nome": "desconto2_cod", + "posicao_inicio": 18, + "posicao_fim": 18, + "formato": "num" + }, + + "09.3R": { + "nome": "desconto2_data", + "posicao_inicio": 19, + "posicao_fim": 26, + "formato": "num" + }, + + "10.3R": { + "nome": "desconto2_percentual", + "posicao_inicio": 27, + "posicao_fim": 41, + "formato": "num", + "decimais": 2 + }, + + "11.3R": { + "nome": "desconto3_codigo", + "posicao_inicio": 42, + "posicao_fim": 42, + "formato": "num" + }, + + "12.3R": { + "nome": "desconto3_data", + "posicao_inicio": 43, + "posicao_fim": 50, + "formato": "num" + }, + + "13.3R": { + "nome": "desconto3_percentual", + "posicao_inicio": 51, + "posicao_fim": 65, + "formato": "num", + "decimais": 2 + }, + + "14.3R": { + "nome": "multa_codigo", + "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_percentual", + "posicao_inicio": 75, + "posicao_fim": 89, + "formato": "num", + "decimais": 2 + }, + + "17.3R": { + "nome": "informacao_ao_sacado", + "posicao_inicio": 90, + "posicao_fim": 99, + "formato": "alfa" + }, + + "18.3R": { + "nome": "informacao_3", + "posicao_inicio": 100, + "posicao_fim": 139, + "formato": "alfa" + }, + + "19.3R": { + "nome": "informacao_4", + "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", + "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", + "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_ag_cc", + "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/cnab240/bancos/bradesco/specs/segmento_t.json b/cnab240/bancos/bradesco/specs/segmento_t.json new file mode 100644 index 0000000..f8c399d --- /dev/null +++ b/cnab240/bancos/bradesco/specs/segmento_t.json @@ -0,0 +1,215 @@ +{ + "nome": "SegmentoT", + "campos": { + "01.3T": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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": "cnab_exclusivo_campo06dot3T", + "posicao_inicio": 15, + "posicao_fim": 15, + "formato": "alfa", + "default": "" + }, + + "07.3T": { + "nome": "servico_codigo_movimento", + "posicao_inicio": 16, + "posicao_fim": 17, + "formato": "num" + }, + + "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": "num" + }, + + "10.3T": { + "nome": "cedente_conta", + "posicao_inicio": 24, + "posicao_fim": 35, + "formato": "num" + }, + + "11.3T": { + "nome": "cedente_conta_dv", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "num" + }, + + "12.3T": { + "nome": "cedente_dv_ag_cc", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "num" + }, + + "13.3T": { + "nome": "nosso_numero", + "posicao_inicio": 38, + "posicao_fim": 57, + "formato": "alfa" + }, + + "14.3T": { + "nome": "carteira_cod", + "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": "num" + }, + + "17.3T": { + "nome": "valor_titulo", + "posicao_inicio": 82, + "posicao_fim": 96, + "formato": "num", + "decimais": 2 + }, + + "18.3T": { + "nome": "banco_cobrador_recebedor", + "posicao_inicio": 97, + "posicao_fim": 99, + "formato": "num" + }, + + "19.3T": { + "nome": "agencia_cobradora_recebedora", + "posicao_inicio": 100, + "posicao_fim": 104, + "formato": "num" + }, + + "20.3T": { + "nome": "agencia_cobradora_recebedora_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": "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": "num_contrato", + "posicao_inicio": 189, + "posicao_fim": 198, + "formato": "num" + }, + + "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": "febraban_cnab29d3T", + "posicao_inicio": 224, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/bradesco/specs/segmento_u.json b/cnab240/bancos/bradesco/specs/segmento_u.json new file mode 100644 index 0000000..54b49b5 --- /dev/null +++ b/cnab240/bancos/bradesco/specs/segmento_u.json @@ -0,0 +1,187 @@ +{ + "nome": "SegmentoU", + "campos": { + "01.3U": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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": "febraban_cnab06d3U", + "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": "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_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": "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/cnab240/bancos/bradesco/specs/spec_to_doc.py b/cnab240/bancos/bradesco/specs/spec_to_doc.py new file mode 100644 index 0000000..74519b6 --- /dev/null +++ b/cnab240/bancos/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/cnab240/bancos/bradesco/specs/trailer_arquivo.json b/cnab240/bancos/bradesco/specs/trailer_arquivo.json new file mode 100644 index 0000000..17ce334 --- /dev/null +++ b/cnab240/bancos/bradesco/specs/trailer_arquivo.json @@ -0,0 +1,65 @@ +{ + "nome": "TrailerArquivo", + "campos": { + "01.9": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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/cnab240/bancos/bradesco/specs/trailer_lote_cobranca.json b/cnab240/bancos/bradesco/specs/trailer_lote_cobranca.json new file mode 100644 index 0000000..1124d66 --- /dev/null +++ b/cnab240/bancos/bradesco/specs/trailer_lote_cobranca.json @@ -0,0 +1,122 @@ +{ + "nome": "TrailerLoteCobranca", + "campos": { + "01.5": { + "nome": "controle_banco", + "posicao_inicio": 1, + "posicao_fim": 3, + "formato": "num", + "default": 231 + }, + + "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": "cobrancasimples_valor_titulos", + "posicao_inicio": 30, + "posicao_fim": 46, + "formato": "num", + "decimais": 2, + "default": 0 + }, + + "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, + "default": 0 + }, + + "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, + "default": 0 + }, + + "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, + "default": 0 + }, + + "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": "" + } + + } +} diff --git a/cnab240/bancos/bradesco/specs/trailer_lote_extrato.json b/cnab240/bancos/bradesco/specs/trailer_lote_extrato.json new file mode 100644 index 0000000..643a360 --- /dev/null +++ b/cnab240/bancos/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": "" + } + + + } +} 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/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/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", 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/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/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": { 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/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": "" 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..3551bda --- /dev/null +++ b/cnab240/bancos/sicoob/specs/header_arquivo.json @@ -0,0 +1,187 @@ +{ + "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" + }, + + "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": "num" + }, + + "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": "087" + }, + + "21.0": { + "nome": "vazio5", + "posicao_inicio": 167, + "posicao_fim": 171, + "formato": "num", + "default": 0 + }, + + "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..ffb892b --- /dev/null +++ b/cnab240/bancos/sicoob/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": 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": "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": "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" + }, + + "18.1": { + "nome": "mensagem_um", + "posicao_inicio": 104, + "posicao_fim": 143, + "formato": "alfa", + "default": "" + }, + + "19.1": { + "nome": "mensagem_dois", + "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": "vazio8", + "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/sicoob/specs/segment_p.json b/cnab240/bancos/sicoob/specs/segment_p.json new file mode 100644 index 0000000..2861040 --- /dev/null +++ b/cnab240/bancos/sicoob/specs/segment_p.json @@ -0,0 +1,331 @@ +{ + "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" + }, + + "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": "alfa" + }, + + "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": "alfa", + "default": "" + }, + + "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", + "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 + }, + + "38.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", + "default": "" + + }, + + "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 new file mode 100644 index 0000000..0c011f9 --- /dev/null +++ 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 new file mode 100644 index 0000000..e806408 --- /dev/null +++ b/cnab240/bancos/sicoob/specs/segmento_r.json @@ -0,0 +1,237 @@ +{ + "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": "juros_multa", + "posicao_inicio": 75, + "posicao_fim": 89, + "formato": "num", + "decimais": 2 + }, + + "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": 0 + }, + + "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 new file mode 100644 index 0000000..ea01309 --- /dev/null +++ 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/segmento_t.json b/cnab240/bancos/sicoob/specs/segmento_t.json new file mode 100644 index 0000000..89af30d --- /dev/null +++ b/cnab240/bancos/sicoob/specs/segmento_t.json @@ -0,0 +1,215 @@ +{ + "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": "cedente_agencia", + "posicao_inicio": 18, + "posicao_fim": 22, + "formato": "num" + }, + + "09.3T": { + "nome": "cedente_agencia_dv", + "posicao_inicio": 23, + "posicao_fim": 23, + "formato": "num" + }, + + "10.3T": { + "nome": "cedente_conta", + "posicao_inicio": 24, + "posicao_fim": 35, + "formato": "num" + }, + + "11.3T": { + "nome": "cedente_conta_dv", + "posicao_inicio": 36, + "posicao_fim": 36, + "formato": "num" + }, + + "12.3T": { + "nome": "cedente_agencia_conta_dv", + "posicao_inicio": 37, + "posicao_fim": 37, + "formato": "num" + }, + + "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": "num" + }, + + "17.3T": { + "nome": "valor_titulo", + "posicao_inicio": 82, + "posicao_fim": 96, + "formato": "num", + "decimais": 2 + }, + + "18.3T": { + "nome": "banco_cobrador", + "posicao_inicio": 97, + "posicao_fim": 99, + "formato": "num", + "default": 0 + }, + + "19.3T": { + "nome": "agencia_cobradora", + "posicao_inicio": 100, + "posicao_fim": 104, + "formato": "num" + }, + + "20.3T": { + "nome": "agencia_cobradora_dv", + "posicao_inicio": 105, + "posicao_fim": 105, + "formato": "num" + }, + + "21.3T": { + "nome": "identificacao_titulo", + "posicao_inicio": 106, + "posicao_fim": 130, + "formato": "alfa" + }, + + "22.3T": { + "nome": "codigo_moeda", + "posicao_inicio": 131, + "posicao_fim": 132, + "formato": "num" + }, + + "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" + }, + + "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/sicoob/specs/segmento_u.json b/cnab240/bancos/sicoob/specs/segmento_u.json new file mode 100644 index 0000000..aa499ec --- /dev/null +++ b/cnab240/bancos/sicoob/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": 756 + }, + + "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": "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_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": "vazio4", + "posicao_inicio": 214, + "posicao_fim": 233, + "formato": "num" + }, + + "24.3U": { + "nome": "vazio5", + "posicao_inicio": 234, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} diff --git a/cnab240/bancos/sicoob/specs/trailer_arquivo.json b/cnab240/bancos/sicoob/specs/trailer_arquivo.json new file mode 100644 index 0000000..a873dac --- /dev/null +++ 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 new file mode 100644 index 0000000..66b0c62 --- /dev/null +++ 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": "" + }, + + "15.5": { + "nome": "vazio3", + "posicao_inicio": 124, + "posicao_fim": 240, + "formato": "alfa", + "default": "" + } + + } +} 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": "" + } + + } +} diff --git a/cnab240/constantes.py b/cnab240/constantes.py new file mode 100644 index 0000000..5f00225 --- /dev/null +++ b/cnab240/constantes.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +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 = '5' +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' + + +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/errors.py b/cnab240/errors.py index 3f7c08c..1cca58a 100644 --- a/cnab240/errors.py +++ b/cnab240/errors.py @@ -1,33 +1,46 @@ # -*- coding: utf-8 -*- +from __future__ import division, print_function, unicode_literals + + 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__() + + 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, + 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, + 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 +53,7 @@ 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): return (u'Os seguintes kwargs sao obrigatorios e nao foram ' @@ -59,3 +72,5 @@ class CampoObrigatorioError(Cnab240Error): """Campo obrigatorio nao preenchido.""" +class ElementoNaoImplementado(Cnab240Error): + """Campo obrigatorio nao preenchido.""" diff --git a/cnab240/eventos/cobranca.py b/cnab240/eventos/cobranca.py deleted file mode 100644 index b988482..0000000 --- a/cnab240/eventos/cobranca.py +++ /dev/null @@ -1,19 +0,0 @@ - -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/lotes/cobranca.py b/cnab240/lotes/cobranca.py index 5cabc8d..43954ba 100644 --- a/cnab240/lotes/cobranca.py +++ b/cnab240/lotes/cobranca.py @@ -1,7 +1,10 @@ +# -*- coding: utf-8 -*- +from __future__ import division, print_function, unicode_literals from cnab240.tipos import LoteBase -class LoteCobranca(LoteBase): - HeaderCls = LoteCobranca.banco.registros.HeaderLoteCobranca - TrailerCls = LoteCobranca.banco.registros.TrailerLoteCobranca +class LoteCobranca(LoteBase): + pass + # HeaderCls = LoteCobranca.banco.registros.HeaderLoteCobranca + # TrailerCls = LoteCobranca.banco.registros.TrailerLoteCobranca diff --git a/cnab240/registro.py b/cnab240/registro.py index a6103a2..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 @@ -14,6 +17,7 @@ class CampoBase(object): + def __init__(self): self._valor = None @@ -25,41 +29,54 @@ def valor(self): def valor(self, valor): if self.formato == 'alfa': 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)) 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: valor = unicode(self.valor).replace('.', '') @@ -84,44 +101,44 @@ 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_') - if not eh_controle and campo.valor != None: + eh_controle = campo.nome.startswith( + 'controle_') or campo.nome.startswith('servico_') + if not eh_controle and campo.valor is not None: return True return False @@ -130,19 +147,20 @@ 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_'), + + 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): - setattr(self, key, value) + if hasattr(self, key) and not self.ignore_fields(key): + setattr(self, key, value) def carregar(self, registro_str): for campo in self._campos.values(): @@ -153,7 +171,7 @@ def carregar(self, registro_str): try: campo.valor = Decimal(dec) except InvalidOperation: - raise # raise custom? + raise # raise custom? elif campo.formato == 'num': try: @@ -168,6 +186,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), @@ -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 deleted file mode 100644 index 7c6cf33..0000000 --- a/cnab240/tipos.py +++ /dev/null @@ -1,265 +0,0 @@ -# -*- encoding: utf8 -*- - -import codecs -import importlib - -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 - self.header.controle_lote = valor - 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) - 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 = [] - result.append(unicode(self.header)) - result.extend(unicode(evento) for evento in self._eventos) - result.append(unicode(self.trailer)) - return '\r\n'.join(result) - - def __len__(self): - return self.trailer.quantidade_registros - - -class Arquivo(object): - - def __init__(self, banco, **kwargs): - """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.trailer = self.banco.registros.TrailerArquivo(**kwargs) - self.trailer.totais_quantidade_lotes = 0 - self.trailer.totais_quantidade_registros = 2 - - if self.header.arquivo_data_de_geracao is None: - now = datetime.now() - self.header.arquivo_data_de_geracao = int(now.strftime("%d%m%Y")) - - # necessario pois o santander nao tem hora de geracao - try: - 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")) - except AttributeError: - pass - - def carregar_retorno(self, arquivo): - - lote_aberto = None - evento_aberto = None - - for linha in arquivo: - tipo_registro = linha[7] - - if tipo_registro == '0': - self.header = self.banco.registros.HeaderArquivo() - self.header.carregar(linha) - - elif tipo_registro == '1': - codigo_servico = linha[9:11] - - if codigo_servico == '01': - 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': - tipo_segmento = linha[13] - codigo_evento = linha[15:17] - - if tipo_segmento == 'T': - seg_t = self.banco.registros.SegmentoT() - seg_t.carregar(linha) - - evento_aberto = Evento(self.banco, int(codigo_evento)) - lote_aberto._eventos.append(evento_aberto) - evento_aberto._segmentos.append(seg_t) - - elif tipo_segmento == 'U': - seg_u = self.banco.registros.SegmentoU() - seg_u.carregar(linha) - evento_aberto._segmentos.append(seg_u) - evento_aberto = None - - elif tipo_registro == '5': - if trailer_lote is not None: - lote_aberto.trailer.carregar(linha) - else: - raise Exception - - elif tipo_registro == '9': - self.trailer = self.banco.registros.TrailerArquivo() - self.trailer.carregar(linha) - - @property - def lotes(self): - return self._lotes - - def incluir_cobranca(self, **kwargs): - # 1 eh o codigo de cobranca - codigo_evento = 1 - 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()) - trailer = self.banco.registros.TrailerLoteCobranca() - lote_cobranca = Lote(self.banco, header, trailer) - self.adicionar_lote(lote_cobranca) - - if 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: - 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"') - - self._lotes.append(lote) - lote.codigo = len(self._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) - - def escrever(self, file_): - file_.write(unicode(self).encode('ascii')) - - 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) - result.append(unicode(self.trailer)) - # Adicionar elemento vazio para arquivo terminar com \r\n - result.append(u'') - return u'\r\n'.join(result) - diff --git a/cnab240/tipos/__init__.py b/cnab240/tipos/__init__.py new file mode 100644 index 0000000..ddb607b --- /dev/null +++ b/cnab240/tipos/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from .arquivo import Arquivo +from .evento import Evento +from .lote import Lote diff --git a/cnab240/tipos/arquivo.py b/cnab240/tipos/arquivo.py new file mode 100644 index 0000000..5e1a1ac --- /dev/null +++ b/cnab240/tipos/arquivo.py @@ -0,0 +1,234 @@ +# -*- coding: utf-8 -*- + +from __future__ import division, print_function, unicode_literals + +import codecs +from datetime import datetime + +from evento import Evento +from lote import Lote +from .. import errors +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_OPERACAO_LANCAMENTO_CREDITO, +) + + +class Arquivo(object): + + def __init__(self, banco, **kwargs): + """Arquivo Cnab240.""" + + 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_arquivo(arquivo) + + self.header = self.banco.registros.HeaderArquivo(**kwargs) + self.trailer = self.banco.registros.TrailerArquivo(**kwargs) + self.trailer.totais_quantidade_lotes = 0 + self.trailer.totais_quantidade_registros = 2 + + if self.header.arquivo_data_de_geracao is None: + now = datetime.now() + self.header.arquivo_data_de_geracao = int(now.strftime("%d%m%Y")) + + # necessario pois o santander nao tem hora de geracao + try: + 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")) + except AttributeError: + pass + + def _carrega_header_arquivo(self, linha): + self.arquivo_remessa_retorno = linha[142] + self.header = self.banco.registros.HeaderArquivo() + self.header.carregar(linha) + + def _carrega_header_lote(self, linha): + # self.lote_aberto = None + self.lote_aberto = Lote(self.banco, linha=linha) + self._lotes.append(self.lote_aberto) + + def _carrega_registros_iniciais_lote(self): + raise NotImplementedError + + def _carrega_registro_detalhe(self, linha): + # 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 abertura: + self.evento_aberto = Evento(self.banco, int(codigo_evento)) + 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 + + def _carrega_trailer_lote(self, linha): + # TODO: Verificar oque fazer com um arquivo com mais de um lote + self.lote_aberto.trailer.carregar(linha) + + def _carega_trailer_arquivo(self, linha): + self.trailer = self.banco.registros.TrailerArquivo() + self.trailer.carregar(linha) + + def carregar_arquivo(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._carega_trailer_arquivo(linha) + + @property + def lotes(self): + return self._lotes + + def incluir_cobranca(self, **kwargs): + # 1 eh o codigo de cobranca + codigo_evento = 1 + 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() + ) + trailer = self.banco.registros.TrailerLoteCobranca() + lote_cobranca = Lote(self.banco, header, trailer) + + self.adicionar_lote(lote_cobranca) + + if 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: + 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 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: + return lote + + def adicionar_lote(self, lote): + if not isinstance(lote, Lote): + raise TypeError('Objeto deve ser instancia de "Lote"') + + self._lotes.append(lote) + lote.codigo = len(self._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) + + def escrever(self, file_): + file_.write(unicode(self).encode('ascii')) + + 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) + result.append(unicode(self.trailer)) + # Adicionar elemento vazio para arquivo terminar com \r\n + result.append(u'') + return u'\r\n'.join(result) diff --git a/cnab240/tipos/evento.py b/cnab240/tipos/evento.py new file mode 100644 index 0000000..58589b7 --- /dev/null +++ b/cnab240/tipos/evento.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +from __future__ import division, print_function, unicode_literals + + +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/eventos/__init__.py b/cnab240/tipos/eventos/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cnab240/tipos/eventos/cobranca.py b/cnab240/tipos/eventos/cobranca.py new file mode 100644 index 0000000..a884ae8 --- /dev/null +++ b/cnab240/tipos/eventos/cobranca.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +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() + # + # Retorno de cobrança + # + 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..b708153 --- /dev/null +++ b/cnab240/tipos/eventos/pagamento.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +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 new file mode 100644 index 0000000..986f5d4 --- /dev/null +++ b/cnab240/tipos/lote.py @@ -0,0 +1,139 @@ +# -*- 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, +) + + +class Lote(object): + + def __init__(self, banco, header=None, trailer=None, linha=None): + + self.banco = banco + self.header = header + self.trailer = trailer + self._codigo = None + self.classe_evento = 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] + 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() + 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 + + @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) 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 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 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 diff --git a/setup.py b/setup.py index b954d3c..51ccc59 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', @@ -11,14 +11,14 @@ package_data={ 'cnab240': ['bancos/*/*/*.json'] }, - zip_safe=False, + zip_safe=True, install_requires=[], provides=[ 'cnab240' ], 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=[], diff --git a/tests/arquivos/pagamento_dict.banco_brasil.rem b/tests/arquivos/pagamento_dict.banco_brasil.rem new file mode 100644 index 0000000..56e77a0 --- /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 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/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/data.py b/tests/data_itau.py similarity index 90% rename from tests/data.py rename to tests/data_itau.py index 68aa632..99bfec2 100644 --- a/tests/data.py +++ b/tests/data_itau.py @@ -8,10 +8,12 @@ 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 +51,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 +59,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 +111,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..4309616 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 @@ -10,29 +10,29 @@ 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, \ - ARQS_DIRPATH +from tests.data_itau import get_itau_data_from_dict, get_itau_file_remessa, \ + 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() 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) diff --git a/tests/test_banco_brasil_pagamento.py b/tests/test_banco_brasil_pagamento.py new file mode 100644 index 0000000..f06fc4a --- /dev/null +++ b/tests/test_banco_brasil_pagamento.py @@ -0,0 +1,56 @@ + +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_banco_do_brasil_pagamento(self): + + for evento in self.data['pagamento']: + self.arquivo.incluir_debito_pagamento( + **evento + ) + 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) + + # 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() diff --git a/tests/test_evento.py b/tests/test_evento.py index e6dacc7..5dd88ba 100644 --- a/tests/test_evento.py +++ b/tests/test_evento.py @@ -6,12 +6,13 @@ from cnab240.bancos import itau 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 +24,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..6745a9c 100644 --- a/tests/test_lote.py +++ b/tests/test_lote.py @@ -1,55 +1,51 @@ -try: +try: import unittest2 as unittest -except ImportError: +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): 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 +55,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..2dd652e 100644 --- a/tests/test_registro.py +++ b/tests/test_registro.py @@ -1,17 +1,17 @@ -try: +try: import unittest2 as unittest -except ImportError: +except ImportError: import unittest 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): - + 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() -