This project prints receipts for fiscal electronic documents called "CF-e". Those documents are created through a system called SAT-CF-e which is a system for autorization and transmission of fiscal documents, developed by Finance Secretary of state of São Paulo, Brazil. The entire project, including variables, methods and class names, as well as documentation, are written in brazilian portuguese.
Este projeto realiza a impressão dos Extratos do CF-e-SAT em impressoras ESC/POS® e são normalmente impressos em mini-impressoras de cupons, térmicas ou de impacto, mas não limitado à elas. As impressoras, marcas e modelos suportados dependem dos modelos suportados no projeto PyESCPOS.
Para autorizar e transmitir documentos eletrônicos através da tecnologia SAT-CF-e é preciso comunicar-se com os equipamentos SAT. Para isso, dê uma olhada no Projeto SATCFe. Este projeto lida apenas com a impressão do extrato de documentos CF-e.
Há dois tipos de documentos CF-e-SAT: documentos de venda e documentos de cancelamento de uma venda anteriormente autorizada.
Para emitir um extrato de um CF-e-SAT de venda, você irá precisar do arquivo XML do CF-e-SAT de venda, que é o próprio documento fiscal, e de uma impressora que seja suportada pelo projeto PyESCPOS:
from escpos import SerialConnection
from escpos.impl.epson import TMT20
from satextrato import ExtratoCFeVenda
conn = SerialConnection.create('COM1:9600,8,1,N')
impressora = TMT20(conn)
impressora.init()
with open(r'C:\CFe351702.xml', 'r') as fp:
extrato = ExtratoCFeVenda(fp, impressora)
extrato.imprimir()
Veja as implementações ESC/POS® disponíveis no projeto PyESCPOS
Para emitir um extrato de um CF-e-SAT de cancelamento você irá precisar de dois arquivos XML: o documento de venda e o documento de cancelamento. Seguindo a mesma linha do exemplo anterior:
cfe_venda = r'C:\CFe_venda.xml'
cfe_canc = r'C:\CFe_cancelamento.xml'
with open(cfe_venda, 'r') as fvenda, open(cfe_canc, 'r') as fcanc:
extrato = ExtratoCFeCancelamento(fvenda, fcanc, impressora)
extrato.imprimir()
Visite o Wiki do projeto para saber como configurar as várias partes do extrato ou então para encontrar outros exemplos e mais informações.
Primeiro, configure seu ambiente de desenvolvimento e execute os testes:
$ git clone git@github.com:base4sistemas/satextrato.git
$ cd satextrato
$ python -m venv .env
$ source .env/bin/activate
(.env) $ pip install --upgrade pip
(.env) $ pip install -r requirements/dev.txt
(.env) $ tox
Simplesmente execute pytest
ou então tox
para executar os testes
contra várias versões de Python. Por padrão, as impressões dos extratos de
testes serão enviadas para uma interface que realmente não faz nada
(dummy printer).
Você pode mudar isso, realizando testes contra uma impressora ESC/POS real
conectada ao seu computador, usando as opções customizadas.
Use pytest --help
e procure pela seção custom options. Por exemplo,
para imprimir em uma Bematech MP-2800 TH conectada à porta serial COM1
:
pytest \
--escpos-impl=escpos.impl.bematech.MP2800TH \
--escpos-if=serial \
--escpos-if-settings=COM1:9600,8,1,N,RTSCTS \
--config-file=/home/user/satextrato.ini
Ou via tox
, em uma impressora com interface ETH (ethernet):
tox -e py39 -- \
--escpos-impl=escpos.impl.controlid.PrintIdTouch \
--escpos-if=network \
--escpos-if-settings=192.168.1.200:9100 \
--config-file=/home/user/satextrato.ini
Note que executar os testes de ambientes relacionados à interfaces de conexão
específicos (eg. py39-serial
), só faz sentido se você especificar também
as configurações da interface via --escpos-if-*
que irá configurar a
interface onde provavelmente terá uma impressora real conectada ou, no mínimo,
um emulador ou um null modem.
Por favor, leia atentamente:
A Base4 Sistemas e os desenvolvedores envolvidos neste projeto, NÃO ASSUMEM NEM TEM QUALQUER RESPONSABILIDADE sobre os "Extratos do CF-e-SAT" gerados por esta biblioteca de código, seja diretamente ou através de uma APLICAÇÃO USUÁRIA. Use por sua própria conta e risco.