Git Product home page Git Product logo

correiosdneimport's Introduction

Importação do e-DNE dos Correios

Programa console em .NET Core para ler os arquivos da base e-DNE dos Correios e importá-los em banco de dados com integridade referencial.

O objetivo é permitir a fácil atualização da base ao somente adicionar os arquivos delta à medida que eles são liberados. Quando um arquivo master for adicionado o banco é reiniciado.

Modo de uso

Obtenha o programa:

git clone https://github.com/vmassuchetto/CorreiosDneImport

Coloque os arquivos do e-DNE sem alterar os nomes originais na pasta Data:

eDNE_Delta_Master_1611.zip
eDNE_Delta_Master_1612.zip
eDNE_Delta_Master_1701.zip
eDNE_Delta_Master_1702.zip
eDNE_Delta_Master_1703.zip
eDNE_Delta_Master_1704.zip
eDNE_Master_1611.zip

Execute o programa informando a conexão com o banco de dados:

dotnet run "Server=Servidor;Database=Banco;User Id=Usuario;Password=Senha;"

Funcionamento

A importação é incremental usando arquivos Master -- completos e liberados anualmente, e Delta -- parciais e liberados mensalmente. Arquivos Delta possuem um indicador de operação para cada registro (INS, UPD e DEL).

Arquivos importados são registrados em uma tabela de controle para não serem lidos novamente. A descompactação do ZIP é feita em um diretório temporário do sistema que é apagado após a importação.

Independente da quantidade de arquivos na pasta Data, o programa irá construir a ordem correta a partir da última importação Master ali presente ou que já foi importada anteriormente.

Arquivos que não estejam em sequência não serão importados. Registros já importados são ignorados.

As tabelas são mapeadas da seguinte forma:

LOG_LOGRADOURO -> CorreiosLogradouro
LOG_LOCALIDADE -> CorreiosLocalidade
LOG_FAIXA_CPC  -> CorreiosFaixaCpc

Os campos são convertidos para CamelCase:

LOC_NU         -> LocNu
UFE_SG         -> UfeSg
LOG_NO_ABREV   -> LogNoAbrev_

Execução:

Indicação de progresso da importação

Precauções

A integridade referencial dos dados é desligada durante o processo de importação. Execute o programa a importação em ambiente de testes para ter certeza que a sequência de deltas liberada pelos Correios não invalida a integridade referencial. Estes casos podem acontecer e lançam esta exceção ao final da importação:

Unhandled Exception: System.Data.SqlClient.SqlException:
    The ALTER TABLE statement conflicted with the
        FOREIGN KEY constraint "FK_CorreiosVarLoc_CorreiosLocalidade".
    [...], table "dbo.CorreiosLocalidade", column 'LocNu'

No caso acima, algum valor do campo LocNu em CorreiosVarLoc não consta em CorreiosLocalidade. Para encontrar este valor:

SELECT vl.LocNu, l.LocNu
FROM CorreiosVarLoc vl
LEFT JOIN CorreiosLocalidade l ON l.LocNu = vl.LocNu
WHERE l.LocNu IS NULL

Resultado:

LocNu	LocNu
7261	NULL
7261	NULL
7261	NULL
7261	NULL
7261	NULL
7261	NULL

Para corrigir:

DELETE FROM CorreiosVarLoc WHERE LocNu = 7261

correiosdneimport's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

correiosdneimport's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.