pycobranca 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pycobranca-1.0.0/LICENSE +29 -0
- pycobranca-1.0.0/PKG-INFO +500 -0
- pycobranca-1.0.0/README.md +469 -0
- pycobranca-1.0.0/pycobranca/__init__.py +54 -0
- pycobranca-1.0.0/pycobranca/bancos/__init__.py +76 -0
- pycobranca-1.0.0/pycobranca/bancos/ailos.py +38 -0
- pycobranca-1.0.0/pycobranca/bancos/banco_do_brasil.py +65 -0
- pycobranca-1.0.0/pycobranca/bancos/banco_nordeste.py +45 -0
- pycobranca-1.0.0/pycobranca/bancos/banestes.py +45 -0
- pycobranca-1.0.0/pycobranca/bancos/banrisul.py +37 -0
- pycobranca-1.0.0/pycobranca/bancos/base.py +235 -0
- pycobranca-1.0.0/pycobranca/bancos/bradesco.py +71 -0
- pycobranca-1.0.0/pycobranca/bancos/brb.py +44 -0
- pycobranca-1.0.0/pycobranca/bancos/c6.py +45 -0
- pycobranca-1.0.0/pycobranca/bancos/caixa.py +86 -0
- pycobranca-1.0.0/pycobranca/bancos/citibank.py +43 -0
- pycobranca-1.0.0/pycobranca/bancos/credisis.py +43 -0
- pycobranca-1.0.0/pycobranca/bancos/hsbc.py +45 -0
- pycobranca-1.0.0/pycobranca/bancos/itau.py +79 -0
- pycobranca-1.0.0/pycobranca/bancos/safra.py +47 -0
- pycobranca-1.0.0/pycobranca/bancos/santander.py +58 -0
- pycobranca-1.0.0/pycobranca/bancos/sicoob.py +53 -0
- pycobranca-1.0.0/pycobranca/bancos/sicredi.py +61 -0
- pycobranca-1.0.0/pycobranca/bancos/unicred.py +39 -0
- pycobranca-1.0.0/pycobranca/boleto/__init__.py +6 -0
- pycobranca-1.0.0/pycobranca/boleto/codigo_barras.py +50 -0
- pycobranca-1.0.0/pycobranca/boleto/linha_digitavel.py +42 -0
- pycobranca-1.0.0/pycobranca/cnab/__init__.py +87 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/__init__.py +19 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/ailos.py +95 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/banco_brasil.py +142 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/base.py +391 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/caixa.py +99 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/pix.py +63 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/santander.py +202 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/sicoob.py +142 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/sicredi.py +113 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab240/unicred.py +17 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/__init__.py +29 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/banco_brasil.py +108 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/banco_brasilia.py +120 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/banco_c6.py +129 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/banco_nordeste.py +111 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/banrisul.py +119 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/base.py +105 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/bradesco.py +111 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/citibank.py +84 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/credisis.py +90 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/itau.py +95 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/pix.py +69 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/santander.py +122 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/sicoob.py +122 -0
- pycobranca-1.0.0/pycobranca/cnab/cnab400/unicred.py +110 -0
- pycobranca-1.0.0/pycobranca/cnab/formatacao.py +30 -0
- pycobranca-1.0.0/pycobranca/cnab/pagamento.py +211 -0
- pycobranca-1.0.0/pycobranca/cnab/retorno/__init__.py +71 -0
- pycobranca-1.0.0/pycobranca/cnab/retorno/base.py +146 -0
- pycobranca-1.0.0/pycobranca/cnab/retorno/cnab240.py +217 -0
- pycobranca-1.0.0/pycobranca/cnab/retorno/cnab400.py +268 -0
- pycobranca-1.0.0/pycobranca/cnab/retorno/ocorrencias.py +87 -0
- pycobranca-1.0.0/pycobranca/contracts/__init__.py +28 -0
- pycobranca-1.0.0/pycobranca/contracts/contrato_rest.json +158 -0
- pycobranca-1.0.0/pycobranca/contracts/contrato_rest.py +304 -0
- pycobranca-1.0.0/pycobranca/core/__init__.py +15 -0
- pycobranca-1.0.0/pycobranca/core/datas.py +48 -0
- pycobranca-1.0.0/pycobranca/core/documentos.py +58 -0
- pycobranca-1.0.0/pycobranca/core/dv.py +124 -0
- pycobranca-1.0.0/pycobranca/exceptions.py +17 -0
- pycobranca-1.0.0/pycobranca/ofx/__init__.py +24 -0
- pycobranca-1.0.0/pycobranca/ofx/conciliacao.py +86 -0
- pycobranca-1.0.0/pycobranca/ofx/nosso_numero.py +39 -0
- pycobranca-1.0.0/pycobranca/ofx/parser.py +214 -0
- pycobranca-1.0.0/pycobranca/pix/__init__.py +6 -0
- pycobranca-1.0.0/pycobranca/pix/payload.py +109 -0
- pycobranca-1.0.0/pycobranca/pix/qr.py +54 -0
- pycobranca-1.0.0/pycobranca/render/__init__.py +29 -0
- pycobranca-1.0.0/pycobranca/render/barcode.py +82 -0
- pycobranca-1.0.0/pycobranca/render/logos/001.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/004.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/021.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/033.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/041.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/070.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/085.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/097.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/104.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/136.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/237.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/336.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/341.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/399.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/422.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/748.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/756.png +0 -0
- pycobranca-1.0.0/pycobranca/render/logos/NOTICE.md +55 -0
- pycobranca-1.0.0/pycobranca/render/marcas.py +53 -0
- pycobranca-1.0.0/pycobranca/render/reportlab.py +1183 -0
- pycobranca-1.0.0/pycobranca.egg-info/PKG-INFO +500 -0
- pycobranca-1.0.0/pycobranca.egg-info/SOURCES.txt +122 -0
- pycobranca-1.0.0/pycobranca.egg-info/dependency_links.txt +1 -0
- pycobranca-1.0.0/pycobranca.egg-info/requires.txt +8 -0
- pycobranca-1.0.0/pycobranca.egg-info/top_level.txt +1 -0
- pycobranca-1.0.0/pyproject.toml +107 -0
- pycobranca-1.0.0/setup.cfg +4 -0
- pycobranca-1.0.0/tests/test_bancos_itau.py +133 -0
- pycobranca-1.0.0/tests/test_bancos_p1.py +158 -0
- pycobranca-1.0.0/tests/test_boleto_externo.py +58 -0
- pycobranca-1.0.0/tests/test_boletos_todos.py +54 -0
- pycobranca-1.0.0/tests/test_cnab_encargos.py +228 -0
- pycobranca-1.0.0/tests/test_cnab_encargos_externo.py +243 -0
- pycobranca-1.0.0/tests/test_cnab_estrutura.py +136 -0
- pycobranca-1.0.0/tests/test_cnab_remessa.py +306 -0
- pycobranca-1.0.0/tests/test_cnab_remessa_pix.py +197 -0
- pycobranca-1.0.0/tests/test_cnab_retorno.py +101 -0
- pycobranca-1.0.0/tests/test_contrato_rest.py +153 -0
- pycobranca-1.0.0/tests/test_core.py +79 -0
- pycobranca-1.0.0/tests/test_ofx.py +126 -0
- pycobranca-1.0.0/tests/test_pix.py +148 -0
- pycobranca-1.0.0/tests/test_render.py +291 -0
- pycobranca-1.0.0/tests/test_retorno_estrutura.py +104 -0
- pycobranca-1.0.0/tests/test_retorno_externos.py +70 -0
- pycobranca-1.0.0/tests/test_smoke.py +43 -0
- pycobranca-1.0.0/tests/test_validacao_cruzada.py +24 -0
- pycobranca-1.0.0/tests/test_validacao_externa.py +113 -0
pycobranca-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 M&S DO BRASIL LTDA — PyCobrança
|
|
4
|
+
All rights reserved.
|
|
5
|
+
|
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
|
8
|
+
|
|
9
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
17
|
+
contributors may be used to endorse or promote products derived from
|
|
18
|
+
this software without specific prior written permission.
|
|
19
|
+
|
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
23
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
26
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
27
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
28
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pycobranca
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Plataforma de cobrança bancária brasileira em Python: boletos, CNAB 240/400 e PIX/Bolepix.
|
|
5
|
+
Author-email: M&S DO BRASIL LTDA <maxwbh@gmail.com>
|
|
6
|
+
Maintainer-email: maxwbh <maxwbh@gmail.com>
|
|
7
|
+
License: BSD-3-Clause
|
|
8
|
+
Project-URL: Homepage, https://github.com/Maxwbh/pycobranca
|
|
9
|
+
Project-URL: Mantenedor, https://msbrasil.inf.br
|
|
10
|
+
Project-URL: Documentation, https://github.com/Maxwbh/pycobranca/tree/main/docs
|
|
11
|
+
Project-URL: Repository, https://github.com/Maxwbh/pycobranca
|
|
12
|
+
Keywords: boleto,boleto-bancario,cobranca,cnab,cnab240,cnab400,remessa,retorno,pix,bolepix,qrcode,linha-digitavel,codigo-de-barras,banco,brasil,febraban
|
|
13
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
16
|
+
Classifier: Natural Language :: Portuguese (Brazilian)
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
20
|
+
Requires-Python: >=3.14
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: reportlab>=4.0
|
|
24
|
+
Requires-Dist: qrcode>=7.4
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
27
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
28
|
+
Requires-Dist: ruff==0.16.0; extra == "dev"
|
|
29
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
<div align="center">
|
|
33
|
+
|
|
34
|
+
<img src="docs/images/pycobranca-banner.svg" alt="PyCobrança — boletos, CNAB e PIX em Python puro" width="820">
|
|
35
|
+
|
|
36
|
+
# A plataforma Open Source mais completa para cobrança bancária em Python
|
|
37
|
+
|
|
38
|
+
**Boletos, CNAB 240/400 e PIX para 18 bancos — com uma única biblioteca, em Python puro.**
|
|
39
|
+
|
|
40
|
+
[](CHANGELOG.md)
|
|
41
|
+
[](https://www.python.org/)
|
|
42
|
+
[](LICENSE)
|
|
43
|
+
[](pyproject.toml)
|
|
44
|
+
[](docs/07-pix.md)
|
|
45
|
+
[](https://github.com/Maxwbh/pycobranca/stargazers)
|
|
46
|
+
|
|
47
|
+
⭐ **18 bancos** · 📄 **CNAB 240/400** · 💳 **PIX / Bolepix** · ⚡ **Python puro** · 📦 **Um único `pip install`** · 🔓 **BSD-3**
|
|
48
|
+
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
**PyCobrança** é a plataforma Open Source de **cobrança bancária brasileira** em Python. Uma única
|
|
52
|
+
biblioteca cobre todo o ciclo: emite boletos (código de barras, linha digitável e PDF), gera e lê
|
|
53
|
+
arquivos **CNAB** (remessa e retorno 240/400) e produz **PIX/Bolepix** (QR Code e segmento PIX no
|
|
54
|
+
CNAB) — para **18 bancos**, com uma API limpa e **sem dependências de sistema** (tudo em Python
|
|
55
|
+
puro, instalado com um `pip install`).
|
|
56
|
+
|
|
57
|
+
Projetada para ser o **motor de cobrança** de sistemas Python — do script pontual à emissão em
|
|
58
|
+
lote de milhares de boletos — com identidade e arquitetura próprias.
|
|
59
|
+
|
|
60
|
+
<div align="center">
|
|
61
|
+
|
|
62
|
+
<img src="docs/images/demo.gif" alt="Do pip install ao boleto, PIX e remessa CNAB em segundos" width="720">
|
|
63
|
+
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 🏗️ Arquitetura
|
|
69
|
+
|
|
70
|
+
A PyCobrança é a **camada única** que emite os artefatos de cobrança. A sua aplicação (ERP, API,
|
|
71
|
+
back-end) chama a biblioteca; ela cuida de boletos, CNAB, PIX e PDF.
|
|
72
|
+
|
|
73
|
+
<div align="center">
|
|
74
|
+
|
|
75
|
+
<img src="docs/images/pycobranca-arquitetura.svg" alt="Arquitetura: ERPs e frameworks consomem a PyCobrança, que emite boletos, CNAB, PIX e PDF" width="820">
|
|
76
|
+
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 💡 Por que a PyCobrança?
|
|
82
|
+
|
|
83
|
+
A cobrança bancária brasileira mudou. O **PIX** e o **Bolepix** entraram no dia a dia, o **Python
|
|
84
|
+
moderno** consolidou-se como base de back-ends e integrações, e as **APIs REST** tornaram-se o
|
|
85
|
+
padrão para conectar sistemas de emissão a ERPs e plataformas de pagamento.
|
|
86
|
+
|
|
87
|
+
A PyCobrança nasceu para atender esse cenário com uma **plataforma única e coesa** — pensada desde
|
|
88
|
+
o início para PIX, CNAB 240/400, PDF em Python puro e consumo via API. Em vez de juntar
|
|
89
|
+
peças soltas, oferece uma API consistente, testada banco a banco e pronta para produção.
|
|
90
|
+
|
|
91
|
+
## ✨ Destaques
|
|
92
|
+
|
|
93
|
+
- 🏦 **18 bancos** com emissão de boleto ponta a ponta (código de barras de 44 posições, linha
|
|
94
|
+
digitável com DVs e regras de carteira/nosso número por banco).
|
|
95
|
+
- 📄 **PDF em Python puro** via ReportLab — dois modelos visuais (*clássico* e *moderno*), **carnê**
|
|
96
|
+
(3 parcelas por A4) e **tema** (marca da empresa, cor, marca d'água, rodapé).
|
|
97
|
+
- 🖼️ **Logo no cabeçalho** (opt-in): use o seu próprio arquivo (`banco.logo`) ou os **logos de 17
|
|
98
|
+
bancos já empacotados** (`logo_do_banco`), em alta resolução com transparência.
|
|
99
|
+
- 🧾 **Remessa CNAB** 400 (12 bancos) e 240 (7 bancos), com agrupamento por convênio/carteira e
|
|
100
|
+
**juros, multa e desconto** (1º/2º/3º, IOF e abatimento).
|
|
101
|
+
- 📥 **Retorno CNAB** 400/240 com parsing por banco e tradução dos códigos de ocorrência.
|
|
102
|
+
- 🧮 **Extrato OFX** (v1/v2) com extração de nosso número e **conciliação** contra os boletos
|
|
103
|
+
emitidos — fecha o ciclo emissão → retorno → extrato.
|
|
104
|
+
- 🟢 **PIX / Bolepix**: BR Code (EMV) copia-e-cola com CRC16, QR Code embutido no PDF e **segmento
|
|
105
|
+
PIX na remessa** (registro tipo 8 no CNAB 400; segmento Y-03 no CNAB 240).
|
|
106
|
+
- 🔌 **Pronto para API REST** (OpenAPI 3.0): serializadores JSON dos artefatos para consumo HTTP.
|
|
107
|
+
- ⚡ **Instalação única**: boleto, CNAB, PIX, PDF e QR num só `pip install` — tudo Python puro,
|
|
108
|
+
sem bibliotecas de sistema (nada de cairo, Pango ou wkhtmltopdf).
|
|
109
|
+
|
|
110
|
+
## 🖼️ Exemplos reais
|
|
111
|
+
|
|
112
|
+
PDFs gerados pela própria PyCobrança (dados fictícios, saída real do backend ReportLab):
|
|
113
|
+
|
|
114
|
+
<div align="center">
|
|
115
|
+
|
|
116
|
+
| Boleto (modelo moderno) | Boleto com PIX (Bolepix) |
|
|
117
|
+
|:---:|:---:|
|
|
118
|
+
| <img src="docs/images/screenshots/boleto-moderno.png" alt="Boleto no modelo moderno gerado pela PyCobrança" width="330"> | <img src="docs/images/screenshots/boleto-pix.png" alt="Boleto híbrido com QR Code PIX" width="330"> |
|
|
119
|
+
| Recibo do Pagador + ficha, código de barras nativo | QR Code Bolepix embutido, célula PIX teal |
|
|
120
|
+
| **Boleto com logo do banco** | **Carnê (3 por A4)** |
|
|
121
|
+
| <img src="docs/images/screenshots/boleto-logo.png" alt="Boleto com o logo do banco no cabeçalho (recibo e ficha)" width="330"> | <img src="docs/images/screenshots/carne.png" alt="Carnê com 3 parcelas por página A4" width="330"> |
|
|
122
|
+
| Logo no cabeçalho do recibo e da ficha (`logo_do_banco`) | Canhoto à esquerda, uma A4 a cada 3 parcelas |
|
|
123
|
+
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
## 📦 Instalação
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
pip install pycobranca # tudo: boleto, CNAB, PIX, PDF e QR Code (Bolepix)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Uma única instalação entrega o que um sistema de cobrança precisa — código de barras, linha
|
|
133
|
+
digitável, remessa/retorno **CNAB**, **PIX** (copia-e-cola e QR) e **PDF**. Sem extras a decorar e
|
|
134
|
+
**sem bibliotecas de sistema**: ReportLab e qrcode são Python puro, resolvidos pelo próprio `pip`.
|
|
135
|
+
|
|
136
|
+
Requer **Python 3.14+**.
|
|
137
|
+
|
|
138
|
+
## 🚀 Início rápido
|
|
139
|
+
|
|
140
|
+
### Emitir um boleto (PDF)
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
from datetime import date
|
|
144
|
+
from pycobranca.bancos import Bancos
|
|
145
|
+
from pycobranca.render import render_boleto_pdf
|
|
146
|
+
|
|
147
|
+
Banco = Bancos.find("341") # Itaú (descoberta pelo código FEBRABAN)
|
|
148
|
+
boleto = Banco(
|
|
149
|
+
valor="127.50",
|
|
150
|
+
cedente="Empresa Exemplo LTDA",
|
|
151
|
+
cedente_documento="11.222.333/0001-81",
|
|
152
|
+
agencia="0057",
|
|
153
|
+
conta="12345",
|
|
154
|
+
carteira="109",
|
|
155
|
+
nosso_numero="12345678",
|
|
156
|
+
data_vencimento=date(2026, 8, 15),
|
|
157
|
+
sacado="Cliente Final da Silva",
|
|
158
|
+
sacado_documento="529.982.247-25",
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
boleto.validar()
|
|
162
|
+
print(boleto.linha_digitavel) # 34191.09123 ... com DVs
|
|
163
|
+
print(boleto.codigo_barras) # 44 posições (DV geral módulo 11)
|
|
164
|
+
|
|
165
|
+
pdf = render_boleto_pdf(boleto.contexto_render(), modelo="moderno")
|
|
166
|
+
open("boleto.pdf", "wb").write(pdf)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Para exibir um logo no cabeçalho, use o seu arquivo ou um logo empacotado:
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
from pycobranca.render import logo_do_banco
|
|
173
|
+
|
|
174
|
+
boleto = Banco(..., logo=logo_do_banco("341")) # ou logo=b"...bytes PNG/JPEG..." / "caminho.png"
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Gerar uma remessa CNAB
|
|
178
|
+
|
|
179
|
+
```python
|
|
180
|
+
from datetime import date
|
|
181
|
+
from pycobranca.cnab import Pagamento, RemessaItau400
|
|
182
|
+
|
|
183
|
+
remessa = RemessaItau400(
|
|
184
|
+
empresa_mae="Empresa Exemplo LTDA",
|
|
185
|
+
documento_cedente="11222333000181",
|
|
186
|
+
agencia="0057",
|
|
187
|
+
conta_corrente="12345",
|
|
188
|
+
digito_conta="7",
|
|
189
|
+
carteira="109",
|
|
190
|
+
pagamentos=[
|
|
191
|
+
Pagamento(
|
|
192
|
+
nosso_numero="12345678",
|
|
193
|
+
valor=199.90,
|
|
194
|
+
data_vencimento=date(2026, 8, 15),
|
|
195
|
+
documento_sacado="52998224725",
|
|
196
|
+
nome_sacado="Cliente Final da Silva",
|
|
197
|
+
endereco_sacado="Rua das Flores, 100",
|
|
198
|
+
bairro_sacado="Centro",
|
|
199
|
+
cep_sacado="30110000",
|
|
200
|
+
cidade_sacado="Belo Horizonte",
|
|
201
|
+
uf_sacado="MG",
|
|
202
|
+
),
|
|
203
|
+
],
|
|
204
|
+
)
|
|
205
|
+
open("CB.REM", "w", newline="").write(remessa.gera_arquivo())
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Juros, multa e desconto na remessa
|
|
209
|
+
|
|
210
|
+
Cada encargo é opcional e informado direto no `Pagamento`. Com os defaults, o boleto sai sem
|
|
211
|
+
encargos (o caixa preenche na hora do recebimento); ao informá-los, eles entram na remessa nas
|
|
212
|
+
posições do padrão FEBRABAN.
|
|
213
|
+
|
|
214
|
+
```python
|
|
215
|
+
from datetime import date
|
|
216
|
+
from pycobranca.cnab import Pagamento
|
|
217
|
+
|
|
218
|
+
Pagamento(
|
|
219
|
+
nosso_numero="12345678",
|
|
220
|
+
valor=199.90,
|
|
221
|
+
data_vencimento=date(2026, 8, 15),
|
|
222
|
+
# ... dados do sacado ...
|
|
223
|
+
# Juros de mora: por dia (tipo_mora="1") ou taxa mensal % (tipo_mora="2")
|
|
224
|
+
tipo_mora="1",
|
|
225
|
+
valor_mora=1.53, # R$ 1,53 ao dia
|
|
226
|
+
# tipo_mora="2", percentual_mora=1.00, # 1% ao mês
|
|
227
|
+
# Multa por atraso (percentual)
|
|
228
|
+
codigo_multa="2",
|
|
229
|
+
percentual_multa=2.00, # 2%
|
|
230
|
+
data_multa=date(2026, 8, 16), # opcional; padrão = vencimento
|
|
231
|
+
# Descontos (até 3) — código, valor e data por faixa
|
|
232
|
+
cod_desconto="1",
|
|
233
|
+
valor_desconto=10.00,
|
|
234
|
+
data_desconto=date(2026, 8, 1),
|
|
235
|
+
cod_segundo_desconto="1",
|
|
236
|
+
valor_segundo_desconto=5.00,
|
|
237
|
+
data_segundo_desconto=date(2026, 8, 10),
|
|
238
|
+
valor_abatimento=0.0,
|
|
239
|
+
valor_iof=0.0,
|
|
240
|
+
)
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
| Encargo | Código/tipo | Valor | Data |
|
|
244
|
+
|---|---|---|---|
|
|
245
|
+
| **Multa** | `codigo_multa` (`0` isento · `1` valor · `2` %) | `percentual_multa` (%) | `data_multa` |
|
|
246
|
+
| **Juros/Mora** | `tipo_mora` (`1` valor/dia · `2` taxa mensal % · `3` isento) | `valor_mora` · `percentual_mora` | `data_mora` |
|
|
247
|
+
| **Desconto 1º/2º/3º** | `cod_desconto` / `cod_segundo_desconto` / `cod_terceiro_desconto` | `valor_desconto` / `valor_segundo_desconto` / `valor_terceiro_desconto` | `data_desconto` / `data_segundo_desconto` / `data_terceiro_desconto` |
|
|
248
|
+
| **IOF** · **Abatimento** | — | `valor_iof` · `valor_abatimento` | — |
|
|
249
|
+
|
|
250
|
+
**Suporte por banco.** O `Pagamento` sempre aceita os campos; eles entram no arquivo onde o layout
|
|
251
|
+
tem posição.
|
|
252
|
+
|
|
253
|
+
**CNAB 240** — suporte **completo e uniforme** (segmentos P/R):
|
|
254
|
+
|
|
255
|
+
| Banco (CNAB 240) | Mora (valor/%) | Multa | Desc. 1º | Desc. 2º | Desc. 3º | IOF | Abat. |
|
|
256
|
+
|---|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
|
|
257
|
+
| Banco do Brasil (001) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
258
|
+
| Caixa (104) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
259
|
+
| Santander (033) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
260
|
+
| Sicoob (756) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
261
|
+
| Sicredi (748) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
262
|
+
| Unicred (136) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
263
|
+
| Ailos (085) | ✅ | ✅⁴ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
264
|
+
|
|
265
|
+
**CNAB 400** — varia por layout do banco:
|
|
266
|
+
|
|
267
|
+
| Banco (CNAB 400) | Mora | Multa | Desc. 1º | Desc. 2º | IOF | Abat. |
|
|
268
|
+
|---|:--:|:--:|:--:|:--:|:--:|:--:|
|
|
269
|
+
| Santander (033) | ✅ | ✅ | ✅ | 📅² | ✅ | ✅ |
|
|
270
|
+
| Bradesco (237) | ✅ | ✅ | ✅ | — | ✅ | ✅ |
|
|
271
|
+
| Sicoob (756) | ✅ | ✅ | ✅ | — | ✅ | ✅ |
|
|
272
|
+
| Banrisul (041) | ✅ | ✅ | ✅ | — | ✅ | ✅ |
|
|
273
|
+
| Banco do Nordeste (004) | ✅ | ✅ | ✅ | — | ✅ | ✅ |
|
|
274
|
+
| C6 (336) | ✅ | ✅ | ✅ | — | — | ✅ |
|
|
275
|
+
| Unicred (136) | ✅ | ✅ | ✅ | — | — | ✅ |
|
|
276
|
+
| CrediSIS (097) | ✅ | ✅ | ✅³ | — | — | — |
|
|
277
|
+
| Itaú (341) | ✅ | 📝¹ | ✅ | — | ✅ | ✅ |
|
|
278
|
+
| Banco do Brasil (001) | ✅ | 📝¹ | ✅ | — | ✅ | ✅ |
|
|
279
|
+
| Citibank (745) | ✅ | — | ✅ | ✅ | ✅ | ✅ |
|
|
280
|
+
| BRB/Brasília (070) | ✅ | — | ✅ | — | — | ✅ |
|
|
281
|
+
|
|
282
|
+
<sub>✅ campo posicional na remessa · — sem campo no layout · **Desc. 3º**: apenas CNAB 240.
|
|
283
|
+
📝¹ Itaú/BB (400): multa vai por **instrução** (código), não como percentual posicional.
|
|
284
|
+
📅² Santander (400): 2º desconto só a **data**. ³ CrediSIS: 1º desconto **sem** campo de data.
|
|
285
|
+
⁴ Ailos (240): segmento R (multa + 2º/3º desconto) emitido só quando há multa.
|
|
286
|
+
Banestes (021), HSBC (399) e Safra (422) só emitem boleto (sem remessa CNAB).</sub>
|
|
287
|
+
|
|
288
|
+
> Detalhes por layout (posições 240/400, valor × percentual por banco) em
|
|
289
|
+
> [`docs/06-cnab.md`](docs/06-cnab.md); via API REST, o objeto `encargos` em
|
|
290
|
+
> [`docs/04-api-rest.md`](docs/04-api-rest.md).
|
|
291
|
+
|
|
292
|
+
### Ler um retorno CNAB
|
|
293
|
+
|
|
294
|
+
```python
|
|
295
|
+
from pycobranca.cnab.retorno import Retorno
|
|
296
|
+
|
|
297
|
+
retorno = Retorno.ler("CB.RET") # layout (240/400) e banco detectados pelo arquivo
|
|
298
|
+
for r in retorno.registros:
|
|
299
|
+
print(r.nosso_numero, r.codigo_ocorrencia, retorno.descricao_ocorrencia(r), r.valor_recebido)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Ler um extrato OFX e conciliar
|
|
303
|
+
|
|
304
|
+
Lê o extrato bancário (OFX v1/v2), extrai o **nosso número** do memo de cada transação e **concilia**
|
|
305
|
+
contra os boletos emitidos — fechando o ciclo emissão → retorno → extrato.
|
|
306
|
+
|
|
307
|
+
```python
|
|
308
|
+
from pycobranca.ofx import Extrato, concilia
|
|
309
|
+
|
|
310
|
+
extrato = Extrato.ler("extrato.ofx") # OFX v1 (SGML) ou v2 (XML), encoding Latin-1/UTF-8
|
|
311
|
+
print(extrato.org, extrato.saldo_valor)
|
|
312
|
+
for t in extrato.creditos:
|
|
313
|
+
print(t.data, t.valor, t.nosso_numero_extraido, t.memo)
|
|
314
|
+
|
|
315
|
+
# Conciliação contra os nossos números emitidos
|
|
316
|
+
resultado = concilia(extrato, ["12345678", "87654321"])
|
|
317
|
+
print(len(resultado.conciliadas), "casadas ·", resultado.pendentes, "pendentes")
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
<div align="center">
|
|
321
|
+
|
|
322
|
+
<img src="docs/images/pycobranca-ciclo.svg" alt="Ciclo de cobrança: emissão → remessa CNAB → retorno CNAB → extrato OFX, conciliados pelo nosso número" width="820">
|
|
323
|
+
|
|
324
|
+
</div>
|
|
325
|
+
|
|
326
|
+
### Boleto híbrido com PIX (Bolepix)
|
|
327
|
+
|
|
328
|
+
```python
|
|
329
|
+
Banco = Bancos.find("237") # Bradesco
|
|
330
|
+
boleto = Banco(
|
|
331
|
+
valor="127.50",
|
|
332
|
+
cedente="Empresa Exemplo LTDA",
|
|
333
|
+
cedente_documento="11222333000181",
|
|
334
|
+
agencia="1234",
|
|
335
|
+
conta="56789",
|
|
336
|
+
carteira="09",
|
|
337
|
+
nosso_numero="12345678",
|
|
338
|
+
data_vencimento=date(2026, 8, 15),
|
|
339
|
+
sacado="Cliente Final",
|
|
340
|
+
sacado_documento="52998224725",
|
|
341
|
+
cedente_cidade="SAO PAULO",
|
|
342
|
+
pix_chave="11222333000181",
|
|
343
|
+
pix_txid="TX2026080100001",
|
|
344
|
+
)
|
|
345
|
+
pdf = render_boleto_pdf(boleto.contexto_render(), modelo="moderno") # QR embutido
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## 🏦 Bancos suportados
|
|
349
|
+
|
|
350
|
+
Funcionalidade por banco (✅ = disponível/validado):
|
|
351
|
+
|
|
352
|
+
| Cód. | Banco | Boleto | Rem. 400 | Rem. 240 | Retorno | PIX | Logo |
|
|
353
|
+
|:----:|-------|:------:|:--------:|:--------:|:-------:|:---:|:----:|
|
|
354
|
+
| 001 | Banco do Brasil | ✅ | ✅ | ✅ | | ✅ | ✅ |
|
|
355
|
+
| 004 | Banco do Nordeste | ✅ | ✅ | | ✅ | | ✅ |
|
|
356
|
+
| 021 | Banestes | ✅ | | | | | ✅ |
|
|
357
|
+
| 033 | Santander | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
358
|
+
| 041 | Banrisul | ✅ | ✅ | | ✅ | | ✅ |
|
|
359
|
+
| 070 | BRB | ✅ | ✅¹ | | ✅ | | ✅ |
|
|
360
|
+
| 085 | Ailos | ✅ | | ✅ | ✅ | | ✅ |
|
|
361
|
+
| 097 | CrediSIS | ✅ | ✅ | | ✅ | | ✅ |
|
|
362
|
+
| 104 | Caixa | ✅ | | ✅ | ✅ | ✅ | ✅ |
|
|
363
|
+
| 136 | Unicred | ✅ | ✅ | ✅ | ✅ | | ✅ |
|
|
364
|
+
| 237 | Bradesco | ✅ | ✅ | | ✅ | ✅ | ✅ |
|
|
365
|
+
| 336 | C6 Bank | ✅ | ✅ | | | ✅ | ✅ |
|
|
366
|
+
| 341 | Itaú | ✅ | ✅ | | ✅ | ✅ | ✅ |
|
|
367
|
+
| 399 | HSBC | ✅ | | | ✅ | | ✅ |
|
|
368
|
+
| 422 | Safra | ✅ | | | | | ✅ |
|
|
369
|
+
| 745 | Citibank | ✅ | ✅ | | | | |
|
|
370
|
+
| 748 | Sicredi | ✅ | | ✅ | ✅ | | ✅ |
|
|
371
|
+
| 756 | Sicoob | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
372
|
+
| **Σ 18** | | **18** | **12** | **7** | **13** | **7** | **17** |
|
|
373
|
+
|
|
374
|
+
- **Boleto** — código de barras (44 pos.), linha digitável e PDF.
|
|
375
|
+
- **Rem. 400 / Rem. 240** — remessa CNAB validada **byte a byte** contra vetores de referência.
|
|
376
|
+
- **Retorno** — parser validado contra arquivo `.RET` **real**; o leitor auto-detecta 240/400 pelo
|
|
377
|
+
cabeçalho e também processa layouts compatíveis dos demais bancos.
|
|
378
|
+
- **PIX** — Bolepix (BR Code + QR no PDF + segmento PIX na remessa).
|
|
379
|
+
- **Logo** — logo empacotado via `logo_do_banco("NNN")`, em alta resolução com transparência
|
|
380
|
+
(17 dos 18 bancos; marca do banco, uso nominativo — origem e licença por arquivo em
|
|
381
|
+
[`render/logos/NOTICE.md`](pycobranca/render/logos/NOTICE.md)).
|
|
382
|
+
- ¹ BRB usa formato de remessa **DCB proprietário**.
|
|
383
|
+
|
|
384
|
+
Detalhes de carteiras, quirks e fixtures por banco na
|
|
385
|
+
[matriz de bancos](docs/05-bancos-suportados.md) e nos [documentos por banco](docs/bancos/README.md).
|
|
386
|
+
|
|
387
|
+
## 🧩 O que a PyCobrança faz
|
|
388
|
+
|
|
389
|
+
| Recurso | Descrição |
|
|
390
|
+
|---------|-----------|
|
|
391
|
+
| **Boleto** | Código de barras (44 pos.), linha digitável (DVs), fator de vencimento e regras por banco. |
|
|
392
|
+
| **PDF** | ReportLab (Python puro): modelos *clássico* e *moderno*, carnê e tema. |
|
|
393
|
+
| **Remessa CNAB** | 400 (12 bancos) e 240 (7 bancos), com `Pagamento`/`PagamentoPix`. |
|
|
394
|
+
| **Retorno CNAB** | Parsing 400/240 por banco + tradução de ocorrências. |
|
|
395
|
+
| **PIX/Bolepix** | BR Code (EMV) + CRC16, QR no PDF e segmento PIX na remessa. |
|
|
396
|
+
| **API REST** | Serialização JSON dos artefatos (OpenAPI 3.0), pronta para consumo HTTP. |
|
|
397
|
+
|
|
398
|
+
## ⚖️ Comparação
|
|
399
|
+
|
|
400
|
+
| Recurso | PyCobrança | PyBoleto | BrCobrança |
|
|
401
|
+
|---|:---:|:---:|:---:|
|
|
402
|
+
| Boleto (código de barras + linha digitável) | ✅ | ✅ | ✅ |
|
|
403
|
+
| CNAB 240/400 (remessa e retorno) | ✅ | ❌ | ✅ |
|
|
404
|
+
| PIX / Bolepix | ✅ | ❌ | ✅ |
|
|
405
|
+
| PDF do boleto | ✅ | ✅ | ✅ |
|
|
406
|
+
| Linguagem | Python 3.14+ | Python (legado) | Ruby |
|
|
407
|
+
| Instalação única (um `pip install`) | ✅ | ✅ | — |
|
|
408
|
+
| Contrato para API REST | ✅ | ❌ | ❌ |
|
|
409
|
+
| Situação | 🟢 Desenvolvimento ativo | Manutenção | Manutenção |
|
|
410
|
+
|
|
411
|
+
## 👥 Para quem é
|
|
412
|
+
|
|
413
|
+
Feita para quem precisa **emitir e conciliar cobrança bancária** dentro de um sistema Python:
|
|
414
|
+
|
|
415
|
+
**ERPs** · **sistemas financeiros** · **SaaS de cobrança** · **software de contabilidade** ·
|
|
416
|
+
**fintechs** · **marketplaces** · **e-commerce** · **prefeituras e órgãos públicos** ·
|
|
417
|
+
**universidades**.
|
|
418
|
+
|
|
419
|
+
Do script pontual à emissão em lote de milhares de boletos — a API é a mesma, sem serviço externo
|
|
420
|
+
nem dependências de sistema.
|
|
421
|
+
|
|
422
|
+
## 🔭 Visão
|
|
423
|
+
|
|
424
|
+
A PyCobrança é construída para ser a **base de longo prazo** do ecossistema de cobrança bancária
|
|
425
|
+
brasileira em Python. O rumo do projeto:
|
|
426
|
+
|
|
427
|
+
- **Emissão de boletos** para os principais bancos, com regras por carteira e nosso número.
|
|
428
|
+
- **CNAB 240 e 400** — remessa e retorno, cobrindo os layouts do mercado.
|
|
429
|
+
- **PIX e Bolepix** — BR Code (EMV), QR Code e o segmento PIX no CNAB.
|
|
430
|
+
- **APIs REST** — artefatos serializáveis em JSON, prontos para expor via HTTP.
|
|
431
|
+
- **OpenAPI** — contrato validável dos artefatos (OpenAPI 3.0).
|
|
432
|
+
- **Renderização em PDF** — em Python puro, sem dependências de sistema.
|
|
433
|
+
- **Integração com ERPs e frameworks Python** — API limpa, pronta para embutir.
|
|
434
|
+
- **Evolução contínua** conforme os padrões da **FEBRABAN** e a regulação de meios de pagamento.
|
|
435
|
+
|
|
436
|
+
## 🗺️ Roadmap
|
|
437
|
+
|
|
438
|
+
Entregue e em evolução:
|
|
439
|
+
|
|
440
|
+
- ✅ Emissão de boletos (18 bancos)
|
|
441
|
+
- ✅ CNAB 240 e 400 (remessa e retorno)
|
|
442
|
+
- ✅ PIX / Bolepix (BR Code, QR e segmento PIX na remessa)
|
|
443
|
+
- ✅ Renderização em PDF (boleto, carnê e tema)
|
|
444
|
+
- ✅ Serialização REST dos artefatos (OpenAPI 3.0)
|
|
445
|
+
- ✅ Validação FEBRABAN independente do boleto
|
|
446
|
+
- 🚧 DDA (Débito Direto Autorizado)
|
|
447
|
+
- 🚧 Open Finance
|
|
448
|
+
- 🚧 Integração direta com APIs bancárias
|
|
449
|
+
- 🚧 Novos bancos (mediante manual oficial com exemplo validável)
|
|
450
|
+
|
|
451
|
+
## 📚 Documentação
|
|
452
|
+
|
|
453
|
+
| Documento | Conteúdo |
|
|
454
|
+
|-----------|----------|
|
|
455
|
+
| [Visão Geral](docs/00-visao-geral.md) · [Arquitetura](docs/01-arquitetura.md) | Objetivo, escopo e camadas |
|
|
456
|
+
| [Bancos Suportados](docs/05-bancos-suportados.md) · [por banco](docs/bancos/README.md) | Matriz, carteiras e especificação |
|
|
457
|
+
| [CNAB](docs/06-cnab.md) | Remessa e retorno 240/400 |
|
|
458
|
+
| [OFX](docs/13-ofx.md) | Extrato bancário e conciliação |
|
|
459
|
+
| [PIX / Bolepix](docs/07-pix.md) | QR Code e segmento PIX no CNAB |
|
|
460
|
+
| [API REST](docs/04-api-rest.md) | Contrato de dados e consumo via HTTP |
|
|
461
|
+
| [Renderização](docs/11-renderizacao.md) | Backend de PDF (ReportLab) |
|
|
462
|
+
|
|
463
|
+
## 🤝 Contribuindo
|
|
464
|
+
|
|
465
|
+
Este é um projeto **novo** e contribuições são muito bem-vindas — desde relatar um comportamento
|
|
466
|
+
de banco divergente até adicionar um layout de CNAB. Comece pelo
|
|
467
|
+
[guia de contribuição](CONTRIBUTING.md). Em resumo:
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
git clone https://github.com/Maxwbh/pycobranca.git
|
|
471
|
+
cd pycobranca
|
|
472
|
+
pip install -e ".[dev]"
|
|
473
|
+
ruff check . && ruff format --check . # lint + formatação
|
|
474
|
+
pytest # suíte de testes
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
Boas primeiras contribuições: novos bancos (com exemplo oficial validável), casos de teste de
|
|
478
|
+
retorno reais (anonimizados) e melhorias de documentação. Abra uma _issue_ antes de mudanças
|
|
479
|
+
grandes para alinharmos o desenho.
|
|
480
|
+
|
|
481
|
+
## 📄 Licença
|
|
482
|
+
|
|
483
|
+
Distribuída sob a licença **[BSD-3-Clause](LICENSE)** — permissiva: permite uso comercial,
|
|
484
|
+
modificação e redistribuição, exigindo apenas a manutenção do aviso de copyright.
|
|
485
|
+
© 2026 **[M&S DO BRASIL LTDA](https://msbrasil.inf.br)**.
|
|
486
|
+
|
|
487
|
+
## 🙏 Créditos
|
|
488
|
+
|
|
489
|
+
Desenvolvida e mantida pela **[M&S DO BRASIL LTDA](https://msbrasil.inf.br)**. Projeto independente,
|
|
490
|
+
inspirado em soluções Open Source anteriores de cobrança bancária em Python e Ruby.
|
|
491
|
+
|
|
492
|
+
Feito com ☕ para o ecossistema de pagamentos brasileiro.
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
<sub>
|
|
497
|
+
<b>Palavras-chave:</b> boleto Python · CNAB Python · FEBRABAN · remessa CNAB · retorno CNAB ·
|
|
498
|
+
PIX QR Code · boleto PIX · Bolepix · boleto bancário Python · integração bancária ·
|
|
499
|
+
cobrança bancária · CNAB 240 · CNAB 400 · linha digitável · código de barras · boleto PDF.
|
|
500
|
+
</sub>
|