Pular para conteúdo

Documentação Funcional — ecosif-automations

Público-alvo: Clientes / Negócio / Operação
Módulo: ecosif-automations


1. Objetivo do Módulo

O ecosif-automations automatiza a importação de lançamentos contábeis a partir de ficheiros .IPL e do ficheiro mestre CT32.LD: valida formato e dados (empresa e filial), resolve o mapeamento do fundo via CT32, envia os lançamentos para fila de processamento e organiza os ficheiros em pastas de sucesso ou erro. Em produção (AWS), o fluxo é acionado pelo upload para S3 e processado em fila (SQS); localmente, pode ser testado com scripts e pasta local.

Em linguagem de negócio:

  • O que é: O “motor” que recebe ficheiros de importação gerados por sistemas externos (ou enviados manualmente), valida e grava os lançamentos no eCosif.
  • Para que serve: Reduzir trabalho manual e erros na carga de lançamentos e manter rasto de ficheiros processados e com falha.
  • Quem se beneficia: Contabilidade, back-office e sistemas que alimentam o eCosif com ficheiros padrão IPL/CT32.

2. Tipos de Ficheiros e Layouts Suportados

2.1 Ficheiro .IPL (Lançamentos)

  • Extensão: .IPL (maiúscula ou minúscula).
  • Nome esperado: NNNNNN_YYYYMMDD.IPL
  • Exemplo: 123456_20240101.IPL
  • NNNNNN = código do fundo (6 dígitos).
  • YYYYMMDD = data de referência do ficheiro (8 dígitos).
  • Formato: Ficheiro de texto, uma linha por lançamento, cada linha com exatamente 156 caracteres (incluindo espaços). Linhas em branco ou que pareçam cabeçalho (contendo "dt", "lot", "lanc", "code", "desc", "valor") são ignoradas.

Layout por posição (156 caracteres):

Posições Conteúdo Exemplo / Observação
0–6 Data (YYMMDD) 240101 = 2024-01-01
6–12 Lote 000001
12–17 Número do lançamento 00001
17 Tipo (1=crédito, 2=débito) 1 ou 2
18 Espaço
19–26 Conta contábil 8 caracteres
26–30 Código do histórico 4 caracteres
30–80 Descrição do histórico 50 caracteres
80–87 Conta contrapartida 8 caracteres
87–91 Código histórico contrapartida 4 caracteres
91–140 Descrição histórico contrapartida 49 caracteres
140–157 Valor (numérico, vírgula ou ponto decimal) 17 caracteres

Qualquer linha com comprimento diferente de 156 ou com tipo diferente de 1/2 é considerada erro de parse; se houver erros, o ficheiro inteiro falha e é movido para a pasta de erro com CSV de diagnóstico.

2.2 Ficheiro .CT32.LD (Mestre de mapeamento)

  • Nome esperado: chave fixa no bucket/pasta, configurada por CT32_MASTER_KEY (default: CT32.LD).
  • Papel: ficheiro mestre e permanente no diretório de importação. Pode ter muitas linhas (milhares).
  • Formato: CSV com múltiplas linhas de dados (além de eventual cabeçalho).
  • Campos (5 colunas, separador vírgula):
    source_name, company_code, branch_code, fund_code, description
Ordem Campo Descrição
1 source_name Nome da base/ambiente (ex.: ecosif_prod)
2 company_code Código da empresa
3 branch_code Código da filial
4 fund_code Código do fundo (deve coincidir com o prefixo do IPL)
5 description Descrição (ex.: do ficheiro ou período)

O CT32.LD é usado para resolver empresa + filial a partir do fundo do nome do IPL:

  1. o sistema extrai NNNNNN de NNNNNN_YYYYMMDD.IPL;
  2. procura no CT32 linha com fund_code = NNNNNN;
  3. usa company_code e branch_code dessa linha para validação no masterdata e para o processamento seguinte.

Se o CT32 não existir, estiver inválido, tiver duplicidade de fund_code ou não contiver o fundo do IPL, a importação falha.

2.3 Resumo

Tipo Nome Formato Uso
.IPL NNNNNN_YYYYMMDD.IPL Texto, linhas fixas de 156 caracteres Lançamentos contábeis (data, lote, conta, histórico, valor, tipo crédito/débito).
.CT32.LD CT32.LD (ou chave em CT32_MASTER_KEY) CSV, 5 campos, multi-linha Mapeamento fundo → empresa/filial para validação e contexto.

Não são suportados outros formatos (ex.: Excel, XML) nem outros layouts de .IPL no código atual.


3. O Que Fazer Quando uma Importação Falha

3.1 Confirmar que falhou

  • S3: Verificar se o .IPL foi movido para a pasta importError/ e se existe um ficheiro ERRO_<nome_do_ipl>.csv (ex.: ERRO_123456_20240101.csv).
  • Local: Ver a pasta local_data/importError/ e os ERRO_*.csv.
  • Logs: Consultar os logs do Lambda (CloudWatch) ou a saída do script local; a mensagem de erro é registada e, no CSV de erro, aparece na terceira coluna (separador ;).

3.2 Ler o CSV de erro

O CSV de erro tem o formato (exemplo):

timestamp;nome_do_ficheiro;mensagem_de_erro;estado_do_ct32;ERROR

  • timestamp: Data/hora do erro.
  • nome_do_ficheiro: Nome do .IPL.
  • mensagem_de_erro: Motivo da falha (ex.: "Company not found: XXX", "Invalid IPL filename format", "CT32.LD file not found", "IPL file has N validation errors").
  • estado_do_ct32: Indica se o CT32 foi verificado ou não (ex.: "CT32.LD FILE NOT FOUND", "CT32.LD FILE OK").

3.3 Ações por tipo de erro

Mensagem típica Causa provável O que fazer
Invalid IPL filename format Nome do ficheiro não segue NNNNNN_YYYYMMDD.IPL Renomear o ficheiro para o padrão (6 dígitos + _ + 8 dígitos + .IPL).
CT32.LD file not found Não existe o ficheiro mestre na chave configurada Criar/enviar o CT32 na chave definida em CT32_MASTER_KEY (default CT32.LD).
Company not found: <code> Código de empresa do CT32 não existe no masterdata Cadastrar a empresa no eCosif (ecosif-masterdata) ou corrigir o campo company_code no .CT32.LD.
Branch not found: <company>/<branch> Filial não existe no masterdata Cadastrar a filial para essa empresa no eCosif ou corrigir branch_code no .CT32.LD.
Fund code not found in CT32: <code> Fundo do nome do IPL não existe no CT32 mestre Incluir/corrigir linha no CT32 com esse fund_code.
CT32 has duplicate fund code mappings Mesmo fundo aparece em duas linhas do CT32 Corrigir o CT32 para manter um único mapeamento por fund_code.
IPL file has N validation errors Linhas com tamanho diferente de 156 ou tipo inválido (não 1/2) Revisar o ficheiro .IPL: garantir 156 caracteres por linha e tipo 1 ou 2 na posição 17. Corrigir o ficheiro na origem ou manualmente e reenviar.
Failed to parse CT32 file CSV do CT32 com menos de 5 campos ou formato inválido Garantir que o CT32 tem linhas com 5 campos (source_name,company_code,branch_code,fund_code,description).

3.4 Depois de corrigir

  • S3: Colocar os ficheiros corrigidos novamente no bucket (no prefixo de “entrada” que está configurado para disparar o Lambda). O processamento será acionado de novo pelo evento S3.
  • Local: Colocar os ficheiros em local_data/input/ e executar de novo o script de import (ex.: python scripts/test_local_import.py local_data/input/123456_20240101.IPL).

Não é necessário apagar manualmente o ficheiro da pasta de erro; o sistema apenas move os que falham para importError/. Os relatórios de sucesso ficam em imported/reports/ (S3) ou local_data/imported/reports/ (local).


4. Glossário

Termo Significado
.IPL Ficheiro de importação de lançamentos contábeis (layout fixo 156 caracteres por linha).
.CT32.LD Ficheiro mestre de mapeamento fundo → empresa/filial em formato CSV.
Importação Processo de validação do .IPL, resolução de empresa/filial no CT32, validação no masterdata e envio para fila de processamento.
Pasta de erro / importError Pasta onde são movidos os .IPL (e CSV de erro) quando a validação ou o parse falham.
Pasta importada / imported Pasta onde são movidos os ficheiros processados com sucesso após a API de import responder.
Relatório de processamento Ficheiro CSV (ex.: <fileName>.report.csv) com total de lançamentos e quantidade importada, gerado após sucesso na API.

Para detalhes técnicos dos fluxos e da integração com moviments/masterdata, ver architecture/arquitetura.md. Para variáveis de ambiente, pastas e monitorização, ver deploy/operacao.md.