https://github.com/nathaliacosim/importar-xml-nfce
Importação e processamento de NFC-e (Nota Fiscal de Consumidor Eletrônica) em arquivos XML para banco de dados PostgreSQL.
https://github.com/nathaliacosim/importar-xml-nfce
csharp-code csharp-console csharp-xml migration-tool nfce pis-cofins read-xml
Last synced: 2 months ago
JSON representation
Importação e processamento de NFC-e (Nota Fiscal de Consumidor Eletrônica) em arquivos XML para banco de dados PostgreSQL.
- Host: GitHub
- URL: https://github.com/nathaliacosim/importar-xml-nfce
- Owner: nathaliacosim
- License: mit
- Created: 2025-03-10T15:53:59.000Z (2 months ago)
- Default Branch: master
- Last Pushed: 2025-03-10T20:42:38.000Z (2 months ago)
- Last Synced: 2025-03-10T21:27:29.941Z (2 months ago)
- Topics: csharp-code, csharp-console, csharp-xml, migration-tool, nfce, pis-cofins, read-xml
- Language: C#
- Homepage:
- Size: 16.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# 📥 Importação de NFC-e (Nota Fiscal de Consumidor Eletrônica)
Este projeto realiza a importação de arquivos XML de NFC-e (Nota Fiscal de Consumidor Eletrônica) para um banco de dados PostgreSQL 📊. A solução lê os arquivos XML de um diretório, processa e insere os dados relevantes nas tabelas do banco de dados, como informações sobre a NFC-e, emitente, produtos, tributos e pagamentos.
---
## 🚀 Tecnologias Utilizadas
- 🖥 **.NET Framework** (C#)
- 🗄 **PostgreSQL** (Banco de dados)
- 🔌 **Npgsql** (Biblioteca para comunicação com PostgreSQL)
- 📄 **XML** (Formato de dados para as NFC-e)
- 🔍 **LINQ to XML** (Para manipulação dos dados XML)---
## ⚡ Funcionalidades
- 📂 Leitura de arquivos XML de NFC-e.
- 📊 Extração e inserção dos dados em um banco de dados PostgreSQL.
- 🛑 Verificação da existência de NFC-e e emitente antes da inserção para evitar duplicidades.
- ⚙ Processamento assíncrono de múltiplos arquivos XML em paralelo.
- 🔄 Controle de concorrência através de semáforos para limitar o número de tarefas simultâneas.---
## 🗃 Estrutura do Banco de Dados
O banco de dados utilizado é o **PostgreSQL**, com as seguintes tabelas:
- **nfce** 🧾: Armazena informações sobre a NFC-e, como chave de acesso, número, série, data de emissão e total.
- **emitente** 🏢: Contém os dados do emitente da NFC-e, como CNPJ, nome e endereço.
- **produto** 📦: Armazena informações dos produtos presentes na NFC-e, como código, descrição, quantidade, valor unitário e total.
- **impostos_detalhados** 💰: Armazena os tributos relacionados à NFC-e, como PIS e COFINS.
- **pagamento** 💳: Registra os detalhes do pagamento da NFC-e, como forma de pagamento e valor pago.---
## 📌 Pré-requisitos
- **.NET Framework** 4.7.2 ou superior.
- **PostgreSQL**.
- **Npgsql** instalado via NuGet.
- Arquivos XML de NFC-e válidos.---
## 📥 Instalação
### 1️⃣ Clone o repositório
```bash
git clone https://github.com/username/importar-xml-nfce.git
cd importar-xml-nfce
```### 2️⃣ Configure o banco de dados
Crie as tabelas no seu banco de dados PostgreSQL. Utilize o Postgres 13 de preferência. Você pode usar os scripts SQL a seguir para criar a estrutura do banco:
```sql
CREATE TABLE nfce (
id SERIAL PRIMARY KEY,
chave_acesso VARCHAR(44) UNIQUE NOT NULL,
numero_nota INTEGER NOT NULL,
serie INTEGER NOT NULL,
data_emissao TIMESTAMP NOT NULL,
total DECIMAL(10,2) NOT NULL
);CREATE TABLE emitente (
id SERIAL PRIMARY KEY,
cnpj VARCHAR(14) UNIQUE NOT NULL,
nome VARCHAR(255) NOT NULL,
endereco TEXT NOT NULL
);CREATE TABLE produto (
id SERIAL PRIMARY KEY,
id_nfce INTEGER REFERENCES nfce(id) ON DELETE CASCADE,
codigo VARCHAR(50) NOT NULL,
descricao VARCHAR(255) NOT NULL,
quantidade DECIMAL(10,2) NOT NULL,
valor_unitario DECIMAL(10,2) NOT NULL,
valor_total DECIMAL(10,2) NOT NULL
);CREATE TABLE impostos_detalhados (
id SERIAL PRIMARY KEY,
id_produto INTEGER REFERENCES produto(id) ON DELETE CASCADE,
tipo VARCHAR(50) NOT NULL,
cst VARCHAR(10) NOT NULL,
base_calculo DECIMAL(10,2),
aliquota DECIMAL(10,4),
valor DECIMAL(10,2) NOT NULL
);CREATE TABLE pagamento (
id SERIAL PRIMARY KEY,
id_nfce INTEGER REFERENCES nfce(id) ON DELETE CASCADE,
forma_pagamento VARCHAR(50) NOT NULL,
valor_pago DECIMAL(10,2) NOT NULL
);
```### 3️⃣ Configure o arquivo de conexão
Vá até o diretório `bin/debug/` e crie um arquivo chamado **appsettings.json**, contendo:
```json
{
"Postgres": {
"Host": "localhost",
"Port": "porta_banco",
"Database": "nome_banco",
"Username": "usuario_postgres",
"Password": "senha_postgres"
}
}
```Preencha com os dados do seu banco de dados PostgreSQL.
### 4️⃣ Adicione seus arquivos XML na pasta `XMLFiles`
No diretório `bin/debug/`, crie uma pasta chamada **XMLFiles** e coloque seus arquivos XML de NFC-e dentro dela. Somente arquivos `.xml` serão processados.
---
## 🎯 Uso
1️⃣ **Execute o programa**:
Após configurar o banco de dados e os arquivos XML, execute:
```bash
dotnet run
```2️⃣ **Processamento de arquivos**:
O sistema processará automaticamente todos os arquivos XML de NFC-e encontrados na pasta `XMLFiles`. Para cada arquivo, ele fará a inserção dos dados no banco de dados.
---
## 🤝 Contribuindo
1. Faça o fork do repositório.
2. Crie uma nova branch (`git checkout -b feature-nova-funcionalidade`).
3. Faça suas alterações e commit (`git commit -am 'Adiciona nova funcionalidade'`).
4. Faça o push para a branch (`git push origin feature-nova-funcionalidade`).
5. Abra um Pull Request.---
## 📜 Licença
Este projeto está licenciado sob a [MIT License](LICENSE).