DNATech :: 🔧 **AUTOMAÇÃO DE PROCESSOS NO TOTVS PROTHEUS – Parte 1: Importação de Dados do DATASUL via Arquivos CSV**

_Créditos da imagem: ChatGPT

🗂️ Tema: Automação na Migração de Dados

🔹 Antes de entrar nos detalhes técnicos, é fundamental compreender o que significa automação de processos no contexto de migração de dados entre ERPs.

🧠 O que é Automação de Processos?
Automação de processos, nesse cenário, refere-se à criação de rotinas programadas que executam tarefas repetitivas e críticas de forma autônoma, com mínima ou nenhuma intervenção manual. No caso da migração de dados, isso significa ler, interpretar, transformar, validar e importar grandes volumes de informações oriundas de outro sistema – neste caso, o DATASUL – diretamente para o banco de dados do TOTVS Microsiga Protheus.

---

📥 Caso Real: Importação de Dados do DATASUL para o Protheus
Para viabilizar a automação da migração, a equipe do projeto gerou diversos arquivos CSV (sem cabeçalhos) contendo os dados exportados do DATASUL. Esses arquivos foram organizados e tratados com base em definições de estrutura extraídas de um arquivo central de metadados:

📁 [tablesdefinition/fulltablesdefinition.txt](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus/blob/main/datasul2Protheus/tablesdefinition/fulltablesdefinition.txt)

Este arquivo contem os metadados para mapeamento das tabelas e campos dos arquivos .csv com os dados reais.

```
Table: funcionario

Field Name                  Data Type  Flg Format
--------------------------- ---------- --- --------------------------------
cdn_empresa                 char       im  x(3)
cdn_estab                   char       im  x(5)
cdn_categ_sal               inte       im  99
cdn_funcionario             inte       im  zzzzzzz9
num_digito_verfdor_func     inte       m   9
nom_abrev_pessoa_fisic      char       i   x(30)
dat_admis_func              date       im  99/99/9999
dat_admis_transf_func       date           99/99/9999
dat_desligto_func           date       i   99/99/9999
num_reg_func                inte       im  zzzzzzz9
cod_unid_federac_rh         char       im  x(04)
cod_pis                     char       im  x(11)
idi_tip_docto_milit         inte       m   99
cdn_regiao_milit            inte       m   z9
cdn_circuns_milit           inte       m   zz9
cod_docto_milit             char       m   x(15)
cod_ser_docto_milit         char       m   x(02)
...        
```


📁 Arquivos CSV: [tables/tables.csv](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus/blob/main/datasul2Protheus/tablesdefinition/tables.csv) e outros por tabela

- Este arquivo contem a lista de tabelas a serem importadas

```
bco_hrs_compens_func 
benefic_func
beneficio
bnfciar_palim 
cargo
cargo_basic 
cta_mdo_efp 
depend_func 
det_rescis
event_fp
funcionario
habilit_calc_fp 
habilit_ferias
histor_sal_func
jorn_trab
movto_calcul_func 
movto_ferias_calcul
period_aqst_ferias
period_escal_turno_trab
prestdor_serv
ptoelet_marcac
reg_det_ferias
rh_agenc_bcia
rh_bco
rh_ccusto
rh_estab
rh_pais 
rh_pessoa_fisic
rh_unid_federac 
sindicato
sit_afast
sit_afast_func
sped_participan
sped_rh_estab
sped_sit_afast
sped_sit_afast_func
turno_trab
unid_lotac

```

📁 [Mapeamentos via .ini](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus/tree/main/datasul2Protheus/ini):

Ini centralizador do processo: * [datasul2protheus.ini](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus/blob/main/datasul2Protheus/ini/datasul2protheus.ini)

```ini
##########################################################################
[General]
CompanyCode=02
IncProcStep=10
IncProcFastMode=1
IncProcPercentage=0
TablesEncodeUTF8=1

[Menu]
Register=SRJ,SR6,SPJ,RCE,SQB,SRV
Employee=SRA,SRB,SRQ
Employee Transaction History=SR3,SRF,SR8,SRD
Employee Benefits=RI1,SM7,RHK,RHL
Employee Punch Marking=SP8

##########################################################################
[Tables]
TablesData=\tables\
TablesDataSplit=\tablessplit\
TablesDefinition=\tablesdefinition\fulltablesdefinition.txt

##########################################################################
[SplitFiles]
SRD=movto_calcul_func
SP8=marcac_ptoelet

##########################################################################
[TablesImport]
SRJ=cargo_basic
SQ3=cargo_basic
SR6=turno_trab
SPJ=period_escal_turno_trab
SPJORNTRAB=jorn_trab
SRA=funcionario
SRA_RHPF=rh_pessoa_fisic
SRA_SPED=sped_participan
SRB=depend_func
SRD=movto_calcul_func
SRF=period_aqst_ferias
SRQ=bnfciar_palim
SR3=histor_sal_func
SR7=histor_sal_func
SR8=sit_afast_func
SRV=event_fp
RCE=sindicato
SP8=marcac_ptoelet
SQB=unid_lotac
SP0=relogio_pto
RI1_SEGVDA=benef_seg_vida_func
SM7=benefic_func
RHK=benefic_func
RHL=benefic_func

##########################################################################
[SRA]
IncProcStep=100
IndexKey=RA_FILIAL+RA_MAT
AddIndex=RA_FILIAL,RA_MAT
AskUpdate=1
ChkFilial=1
ChkEncode=1
bAfterUpdateRecNo={|cAlias,nRecNo|if(empty((cAlias)->RA_CODUNIC).and.FindFunction("fRACodUnic"),(cAlias)->RA_CODUNIC:=fRACodUnic(),nil)}
UpdateEmptyValue=0
TCSQLUpdateTable=1

#...

##########################################################################
[funcionario]
cdn_empresa=cdn_empresa
RA_FILIAL=cdn_estab
RA_CATFUNC=cdn_categ_sal
RA_MAT=cdn_funcionario
#__UNDEFINED__=num_digito_verfdor_func
RA_APELIDO=nom_abrev_pessoa_fisic
RA_ADMISSA=dat_admis_func
#__UNDEFINED__=dat_admis_transf_func
RA_DEMISSA=dat_desligto_func
RA_SITFOLH=dat_desligto_func
RA_REGISTR=num_reg_func
RA_NATURAL=cod_unid_federac_rh
RA_PIS=cod_pis
#__UNDEFINED__=idi_tip_docto_milit
#__UNDEFINED__=cdn_regiao_milit
#__UNDEFINED__=cdn_circuns_milit
RA_RESERVI=cod_docto_milit+cod_ser_docto_milit
#__UNDEFINED__=cod_ser_docto_milit
#__UNDEFINED__=cod_unid_federac_tit_eletra
RA_ZONASEC=num_zona_tit_eletral
RA_SECAO=num_secao_tit_eletral
RA_TITULOE=cod_tit_eletral
#__UNDEFINED__=nom_cidad_emit_tit_eletral
RA_UFCP=cod_unid_federac_cart_trab
#__UNDEFINED__=idi_model_cart_trab
RA_SERCP=cod_ser_cart_trab
RA_NUMCP=cod_cart_trab
#...    

```

[TabelaAfastaMentoVerbasR8_PD](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus/blob/main/datasul2Protheus/ini/TabelaAfastaMentoVerbasR8_PD.ini)

```ini
[TabelaAfastaMentoVerbasR8_PD]
__DFV__=
5=052  #01#Afastado por Acidente#Acidente/Doença do trabalho
6=051  #03#Disp. Tratamento M‚dico#Acidente/Doença não relacionada ao trabalho
10=051 #03#Afastado por Doenca#Acidente/Doença não relacionada ao trabalho
11=051 #03#Afast.por inap. rec. exame m‚d#Acidente/Doença não relacionada ao trabalho
12=051 #03#Disp.Aguard.Consultas Medicas#Acidente/Doença não relacionada ao trabalho
13=051 #03#Disp.Aguard.Exames Medicos#Acidente/Doença não relacionada ao trabalho
14=051 #03#Disp.Aguard.Exames Medicos#Acidente/Doença não relacionada ao trabalho
TabelaCategoriaFuncionarioRA_CATFUNC.ini (auxiliar)
```

[TabelaCategoriaFuncionarioRA_CATFUNC](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus/blob/main/datasul2Protheus/ini/TabelaCategoriaFuncionarioRA_CATFUNC.ini)

```ini
[TabelaCategoriaFuncionarioRA_CATFUNC]
__DFV__=M
1=Mensalista
2=Horista
3=Semanalista
4=Quinzenalista
5=Tarefeiro
6=Diarista      

```
...

Esses arquivos [.ini](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus/tree/main/datasul2Protheus/ini) definem:

- Quais campos devem ser importados e em qual ordem

- Qual a chave de indexação

- Se o dado deve ser atualizado ou inserido

- Regras especiais de validação e pré-carregamento de dados

- Processos específicos por tabela (ex.: SR8, SRD, SRA, SRF, RCE etc.)

- Tabelas auxiliares de/para


🔄 Principais Etapas da Automação

1. Mapeamento das tabelas e campos entre DATASUL e Protheus

2. Criação de definidores de estrutura (.ini) por tabela

3. Implementação de funções de conversão, normalização e validação de dados

4. Execução da importação automatizada via programas escritos em (TL++)


🚀 Resultado

Com esse processo automatizado:

- A carga de dados se tornou *rápida e segura**

- As regras do sistema de destino foram respeitadas integralmente

- O processo de migração ganhou *rastreabilidade e consistência**

---
🗂️ O Projeto no GitHub
[naldodj-DataSul2TotvsProtheus](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus)

🔒🗂️Quer acesso a todos os códigos fontes? Apoie! 💖 ! 
[Torne-se um Sponsor](https://github.com/sponsors/naldodj) e tenha acesso a repositórios privados e exclusivos!

---

Na próxima publicação, irei detalhar como foi feito o mapeamento entre campos DATASUL x Protheus, e como os arquivos .ini e as funções personalizadas facilitaram este processo.

Se você atua com Protheus e quer saber mais sobre "Automação de Processos" acompanhe a série!

---

\#TOTVS #Protheus #DNATech #Datasul #Automação #MigraçãoDeDados #ERP #TechTalk

Torne-se um Sponsor: 🥊(дави)={0.5x[(Налдо)+(Алине)]}🥊

Comentários

Postagens mais visitadas