nflogic
O que é
Este software permite processar os dados de muitos arquivos de notas fiscais eletrônicas e transformá-los em um conjunto de dados prontos para ser analisado por um analista de dados ou incorporado em uma aplicação para empresas.
Este projeto ainda está em fase experimental e deve ser usado com cautela, embora haja um esforço para tal, ainda não é possível validar os dados coletados com total clareza.
Abaixo você pode encontrar instruções para instalar e algumas
instruções rápidas de uso, para ver a documentação de todos os
recursos implementados no NF-Logic, acesse as páginas dedicadas para cada submódulo
(api e cli) indicados na barra lateral.
Instalando
A maneira recomendada de instalar o nflogic como uma API é através do
PyPI usando o console do seu computador:
pip install nflogic
Caso queira usar como uma linha de comando, a maneira recomendada é primeiramente
instalar o pipx seguindo
estas instruções,
e depois usá-lo para instalar o nflogic:
pipx install nflogic
Instruções rápidas
Aqui estão alguns exemplos simples para aproveitar as principais funcionalidades do
nflogic rapidamente.
Processando arquivos dentro de uma pasta
A principal funcionalidade do nflogic está em processar documentos XML de notas fiscais
eletrônicas, para isso:
API
import nflogic.api nflogic.parse_dir(dir_path="/full/path/to/directory", buy=False)CLI
nflogic parse --ParseTo=seller "/full/path/to/directory"
Estes comandos são equivalentes, e vão registrar os dados obtidos no diretório informado como vendas realizadas pelo vendedor que estiver informado no próprio documento. Caso existam múltiplos vendedores, uma tabela será construída para cada um que for encontrado.
Os dados são armazenados em um banco de dados que fica junto ao local de instalação do
nflogic. A maneira recomendada para obter o local onde o banco de dados está é
pela API:
import nflogic.api
print(nflogic.DB_PATH)
Caso não queira usar a API, você pode encontrar o banco de dados usando este comando,
caso tenha instalado com pip:
pip show nflogic
ou este, caso tenha instalado com pipx:
pipx runpip nflogic show nflogic
Procure pela linha que começa com "Location:" entre no diretóiro informado, e a partir
de lá, o banco de dados será encontrado em "nflogic/database/db.sqlite".
Verificando erros
Depois de processar muitos dados em massa, é possível que o nflogic encontre falhas em
alguns arquivos, dependendo da quantidade de notas fiscais processadas, você pode ter
muitos arquivos para analisar. O nflogic permite ver um resumo das falhas de
processamento dos arquivos, indicando as mensagens de erro emitidas junto com a etapa do
processamento em que a falha ocorreu.
O nflogic faz o melhor possível para identificar o nome do vendedor ou comprador da
nota, salva os erros em caches separados por nome. Quando não é possível, o erro é
registrado em um arquivo comum para todos os documentos em que o nome não pode ser
identificado, para listar os nomes dos arquivos de cache:
API
import nflogic.api # obtenha uma lista com o nome dos arquivos de cache cachenames = nflogic.cache.get_cachenames() # se algum erro ja tiver sido registrado, mostre na tela (stdout) o nome do cache # e o resumo dos erros obtidos for cn in cachenames: error_df = nflogic.rebuild_errors(cachename=cn) summary = nflogic.summary_err_types(err_df=error_df) print(f"{cn}\n----", summary.to_string(), "\n", sep="\n")NoteExplicando um pouco o código acima:
- A função
rebuild_errors()vai tentar repetir o procedimento que falhou anteriormente, registrando todas as informações pertinentes de falhas em umpandas.DataFrame; - A função
summary_err_typesagrupa os erros similares por tipo, retornando umpandas.DataFramemais conciso.
- A função
CLI
Veja os nomes de cache disponíveis com:
nflogic cachenamesDepois veja o resumo dos erros, substituindo
[CACHENAME]por um dos nomes listados anteriormente:nflogic errors --summary [CACHENAME]
Usar a flag --summary faz com que retorne a tabela resumida dos erros agregados por
tipo, omití-la retornaria o conjunto de dados completo.
Corrigindo erros ou atualizando o NF-Logic
Os problemas de parsing podem ser corrigidos localmente usando um editor de texto para
modificar o código fonte do nflogic. Por se tratar de um programa interpretado, e não
compilado, alterações no código são refletidas diretamente no comportamento da CLI
localmente.
Você pode ajudar a melhorar a qualidade dos parsers oferecendo alguma contribuição para o desenvolvimento deste projeto, caso isso não seja possível, mantenha sua instalação do NF-Logic atualizada, o problema que você enfrenta pode ser corrigido em alguma atualização futura. Para atualizar a sua instalação:
Pelo
pippip install --upgrade nflogicPelo
pipxpipx upgrade nflogic
Leia as últimas linhas do resultado retornado para saber se alguma nova versão foi instalada, ou se você já está na versão mais recente.
Processando arquivos que já falharam
Como já sabemos como verificar erros, podemos pular para a parte em
que vemos como podemos fazer com que o nflogic tente processar novamente os arquivos que
já deram erro no passado:
API
import nflogic.api nflogic.parse_cache(cachename="SOME_CACHE_NAME", full_parse=True)
Neste caso, cachename deve ser um dos nomes de cache retornados por
nflogic.cache.get_cachenames(), e full_parse indica se devem ser extraídos apenas os
metadados da nota fiscal, ou também as informações transacionais, como nomes dos produtos
ou valores unitários.
CLI
nflogic parse-cache [CACHENAME]
A versão de CLI atualmente sempre processa os dados dos documentos em cache usando
full_parse=True.
Como contribuir
Caso você tenha capacidade para entender o problema encontrado, e tenha uma sugestão para alterar o código fonte do NF-Logic, considere abrir uma issue para informar sobre a existência do problema. Se você também se sente capaz de resolver o problema encontrado, sinta-se livre para propor uma pull request para que esta mudança afete os demais usuários na próxima versão do NF-Logic.
1r""" 2# O que é 3 4Este software permite processar os dados de muitos arquivos de notas fiscais eletrônicas 5e transformá-los em um conjunto de dados prontos para ser analisado por um analista de 6dados ou incorporado em uma aplicação para empresas. 7 8> [!WARNING] 9> Este projeto ainda está em fase experimental e deve ser usado com cautela, embora haja 10> um esforço para tal, ainda não é possível validar os dados coletados com total clareza. 11 12Abaixo você pode encontrar instruções para [instalar](#instalando) e algumas 13[instruções rápidas](#instrucoes-rapidas) de uso, para ver a documentação de todos os 14recursos implementados no NF-Logic, acesse as páginas dedicadas para cada submódulo 15([`api`](/nflogic/api.html) e [`cli`](/nflogic/cli.html)) indicados na barra lateral. 16 17# Instalando 18 19A maneira recomendada de instalar o `nflogic` como uma API é através do 20[`PyPI`](https://pypi.org/project/nflogic/) usando o console do seu computador: 21 22```bash 23pip install nflogic 24``` 25 26Caso queira usar como uma linha de comando, a maneira recomendada é primeiramente 27instalar o `pipx` seguindo 28[estas instruções](https://packaging.python.org/pt-br/latest/guides/installing-stand-alone-command-line-tools/), 29e depois usá-lo para instalar o `nflogic`: 30 31```bash 32pipx install nflogic 33``` 34 35# Instruções rápidas 36 37Aqui estão alguns exemplos simples para aproveitar as principais funcionalidades do 38`nflogic` rapidamente. 39 40## Processando arquivos dentro de uma pasta 41 42A principal funcionalidade do `nflogic` está em processar documentos XML de notas fiscais 43eletrônicas, para isso: 44 45- **API** 46 47 ```python 48 import nflogic.api 49 nflogic.parse_dir(dir_path="/full/path/to/directory", buy=False) 50 ``` 51 52- **CLI** 53 54 ```bash 55 nflogic parse --ParseTo=seller "/full/path/to/directory" 56 ``` 57 58Estes comandos são equivalentes, e vão registrar os dados obtidos no diretório informado 59como vendas realizadas pelo vendedor que estiver informado no próprio documento. Caso 60existam múltiplos vendedores, uma tabela será construída para cada um que for encontrado. 61 62Os dados são armazenados em um banco de dados que fica junto ao local de instalação do 63`nflogic`. A maneira recomendada para obter o local onde o banco de dados está é 64pela API: 65 66```python 67import nflogic.api 68print(nflogic.DB_PATH) 69``` 70 71Caso não queira usar a API, você pode encontrar o banco de dados usando este comando, 72caso tenha instalado com `pip`: 73 74```bash 75pip show nflogic 76``` 77 78ou este, caso tenha instalado com `pipx`: 79 80```bash 81pipx runpip nflogic show nflogic 82``` 83 84Procure pela linha que começa com "Location:" entre no diretóiro informado, e a partir 85de lá, o banco de dados será encontrado em "`nflogic/database/db.sqlite`". 86 87## Verificando erros 88 89Depois de processar muitos dados em massa, é possível que o `nflogic` encontre falhas em 90alguns arquivos, dependendo da quantidade de notas fiscais processadas, você pode ter 91muitos arquivos para analisar. O `nflogic` permite ver um resumo das falhas de 92processamento dos arquivos, indicando as mensagens de erro emitidas junto com a etapa do 93processamento em que a falha ocorreu. 94 95O `nflogic` faz o melhor possível para identificar o nome do vendedor ou comprador da 96nota, salva os erros em *caches* separados por nome. Quando não é possível, o erro é 97registrado em um arquivo comum para todos os documentos em que o nome não pode ser 98identificado, para listar os nomes dos arquivos de cache: 99 100- **API** 101 102 ```python 103 import nflogic.api 104 # obtenha uma lista com o nome dos arquivos de cache 105 cachenames = nflogic.cache.get_cachenames() 106 # se algum erro ja tiver sido registrado, mostre na tela (stdout) o nome do cache 107 # e o resumo dos erros obtidos 108 for cn in cachenames: 109 error_df = nflogic.rebuild_errors(cachename=cn) 110 summary = nflogic.summary_err_types(err_df=error_df) 111 print(f"{cn}\n----", summary.to_string(), "\n", sep="\n") 112 ``` 113 114 > [!NOTE] 115 > Explicando um pouco o código acima: 116 > 1. A função `rebuild_errors()` vai tentar repetir o procedimento que falhou 117 > anteriormente, registrando todas as informações pertinentes de falhas em um 118 > [`pandas.DataFrame`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html); 119 > 2. A função `summary_err_types` agrupa os erros similares por tipo, retornando um 120 > `pandas.DataFrame` mais conciso. 121 122- **CLI** 123 124 Veja os nomes de cache disponíveis com: 125 126 ```bash 127 nflogic cachenames 128 ``` 129 130 Depois veja o resumo dos erros, substituindo `[CACHENAME]` por um dos nomes listados 131 anteriormente: 132 133 ```bash 134 nflogic errors --summary [CACHENAME] 135 ``` 136 137Usar a flag `--summary` faz com que retorne a tabela resumida dos erros agregados por 138tipo, omití-la retornaria o conjunto de dados completo. 139 140## Corrigindo erros ou atualizando o NF-Logic 141 142Os problemas de *parsing* podem ser corrigidos localmente usando um editor de texto para 143modificar o código fonte do `nflogic`. Por se tratar de um programa interpretado, e não 144compilado, alterações no código são refletidas diretamente no comportamento da CLI 145localmente. 146 147Você pode ajudar a melhorar a qualidade dos *parsers* oferecendo alguma 148[contribuição](#como-contribuir) para o desenvolvimento deste projeto, caso isso não 149seja possível, mantenha sua instalação do NF-Logic atualizada, o problema que você 150enfrenta pode ser corrigido em alguma atualização futura. Para atualizar a sua 151instalação: 152 153- **Pelo `pip`** 154 155 ```bash 156 pip install --upgrade nflogic 157 ``` 158 159- **Pelo `pipx`** 160 161 ```bash 162 pipx upgrade nflogic 163 ``` 164 165Leia as últimas linhas do resultado retornado para saber se alguma nova versão foi 166instalada, ou se você já está na versão mais recente. 167 168## Processando arquivos que já falharam 169 170Como já sabemos como [verificar erros](#verificando-erros), podemos pular para a parte em 171que vemos como podemos fazer com que o `nflogic` tente processar novamente os arquivos que 172já deram erro no passado: 173 174- **API** 175 176 ```python 177 import nflogic.api 178 nflogic.parse_cache(cachename="SOME_CACHE_NAME", full_parse=True) 179 ``` 180 181Neste caso, `cachename` deve ser um dos nomes de cache retornados por 182`nflogic.cache.get_cachenames()`, e `full_parse` indica se devem ser extraídos apenas os 183metadados da nota fiscal, ou também as informações transacionais, como nomes dos produtos 184ou valores unitários. 185 186- **CLI** 187 188 ```bash 189 nflogic parse-cache [CACHENAME] 190 ``` 191 192A versão de CLI atualmente sempre processa os dados dos documentos em cache usando 193`full_parse=True`. 194 195# Como contribuir 196 197Caso você tenha capacidade para entender o problema encontrado, e tenha uma sugestão para 198alterar o código fonte do *NF-Logic*, considere abrir uma 199[*issue*](https://github.com/VFLins/nflogic/issues) para informar sobre a existência do 200problema. Se você também se sente capaz de resolver o problema encontrado, sinta-se livre 201para propor uma [*pull request*](https://github.com/VFLins/nflogic/pulls) para que esta 202mudança afete os demais usuários na próxima versão do *NF-Logic*. 203""" 204 205from nflogic.api import ( 206 db, 207 cache, 208 parse, 209 CACHE_DIR, 210 rebuild_errors, 211 summary_err_types, 212 xml_files_in_dir, 213 parse_dir, 214 parse_cache, 215)