Pular para conteúdo

Documentação Operacional — ecosif-automations

Público-alvo: DevOps / SRE
Módulo: ecosif-automations (importação e ETL)


1. Agendamentos e Gatilhos (Sem Cron)

O módulo não utiliza cron jobs no código. O processamento é event-driven:

Gatilho Onde O que dispara
S3 ObjectCreated Bucket de import (.IPL) Lambda import — regista janela ou processa imediato (IMPORT_DEFER_ENABLED).
SQS import-defer …-automations-import-defer Mensagens FLUSHLambda import-dispatcher → fila entries FIFO.
SQS entries FIFO …-automations-entries.fifo Lambda entries (MessageGroupId = fundo).
SQS consolidation-defer …-automations-consolidation-defer FLUSH com debounce → Lambda consolidation-scheduler.
SQS consolidation FIFO …-automations-consolidation.fifo Lambda consolidation (MessageGroupId = empresa|filial).

Em modo local (ECOSIF_LOCAL_MODE=true), não há filas; os scripts em scripts/ chamam os serviços diretamente (ex.: test_local_import.py, test_local_full.py).


2. Pastas de Entrada e Saída

2.1 Em AWS (S3)

Pasta (prefixo no bucket) Variável Descrição
Entrada Qualquer prefixo; o evento S3 contém a key do .IPL. O ficheiro mestre CT32.LD deve existir na chave definida em CT32_MASTER_KEY.
importError/files/ AWS_S3_ERROR_FILES_FOLDER (default: importError/files/) .IPL com falha de validação/import/consolidação.
importError/ (raiz) AWS_S3_ERROR_FOLDER CSV ERRO_<nome_ipl>.csv (mensagem de erro).
imported/files/ AWS_S3_IMPORTED_FILES_FOLDER (default: imported/files/) .IPL processados com sucesso.
imported/reports/ AWS_S3_REPORTS_FOLDER Resumo mensal {FUNDO}_{YYYYMM}_report.csv e {nome}.CHANGES.csv.
imported/reports/details/ AWS_S3_REPORTS_DETAILS_FOLDER Relatório linha a linha {nome}.IPL.REPORT.csv.
Raiz do bucket Apenas CT32.LD (mestre) e .IPL à espera de processamento.

2.2 Em Modo Local

Com ECOSIF_LOCAL_MODE=true e ECOSIF_LOCAL_BASE_DIR (default: ./local_data):

Pasta Uso
local_data/input/ Colocar .IPL para processamento e garantir CT32.LD na chave configurada por CT32_MASTER_KEY.
local_data/imported/ Ficheiros processados com sucesso.
local_data/importError/ Ficheiros com erro.
local_data/imported/reports/ Relatórios de processamento.

3. Variáveis de Ambiente Principais

Variável Obrigatória Descrição
ECOSIF_LOCAL_MODE Local: sim true = usa sistema de ficheiros; false = usa S3/SQS.
ECOSIF_LOCAL_BASE_DIR Não Base para pastas locais (default: ./local_data).
AWS_S3_BUCKET_NAME / AWS_S3_BUCKET AWS: sim Nome do bucket S3.
AWS_S3_ERROR_FOLDER Não Prefixo para erros (default: importError/).
AWS_S3_IMPORTED_FOLDER Não Prefixo para importados (default: imported/).
AWS_S3_REPORTS_FOLDER Não Prefixo para relatórios (default: imported/reports/).
CT32_MASTER_KEY Não Chave S3 (ou path local relativo) do ficheiro mestre CT32 (default: CT32.LD).
AWS_SQS_ENTRIES_QUEUE_URL AWS (import / dispatcher) URL da fila FIFO entries.
AWS_SQS_IMPORT_DEFER_QUEUE_URL AWS (import) Fila de agendamento da janela de importação por fundo.
IMPORT_DEFER_ENABLED Não true = janela por fundo (default produção CFN).
IMPORT_WINDOW_TABLE Se defer DynamoDB …-import-window.
IMPORT_DEBOUNCE_SEC / IMPORT_MAX_WAIT_SEC Se defer 30 / 300 (defaults CFN).
AWS_SQS_CONSOLIDATION_QUEUE_URL AWS (entries) URL da fila FIFO de consolidação (nome termina em .fifo). MessageGroupId = empresa\|filial.
Republicar consolidação (IPL na raiz) Ops python scripts/republish-root-consolidation.py (ver script; requer entries já gravados).
CONSOLIDATION_DEFER_ENABLED Não true = janela debounce antes de consolidar (fase 4); false = envio imediato após entries.
CONSOLIDATION_DEBOUNCE_SEC Se defer Segundos de calma após o último IPL (default 120).
CONSOLIDATION_MAX_WAIT_SEC Se defer Teto desde o primeiro IPL da janela (default 600).
CONSOLIDATION_WINDOW_TABLE Se defer Tabela DynamoDB da janela por período.
CONSOLIDATION_LOCK_TABLE Se defer Tabela DynamoDB de lock por empresa\|filial.
AWS_REGION AWS Região (ex.: us-east-1).
ECOSIF_API_BASE_URL Sim (validação/import) Base das APIs (ex.: http://localhost ou https://api.ecosif.com).
ECOSIF_AUTH_PORT, ECOSIF_AUTOMATIONS_SERVICE_SECRET AWS (import) Sign-in ecosif-auth (8081 default).
ECOSIF_MASTERDATA_PORT, ECOSIF_MASTERDATA_CONTEXT_PATH Sim Masterdata (8082 default).
ECOSIF_MOVIMENTS_PORT, ECOSIF_MOVIMENTS_CONTEXT_PATH Sim Moviments (8083 default).
ECOSIF_API_URL_MODE Não alb (default) ou gateway.

Credenciais AWS: IAM role (Lambda) ou variáveis AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY (conforme ambiente).


4. Como Monitorar se uma Importação Falhou

4.1 Ficheiros e Pastas

  • S3: Verificar a pasta importError/ no bucket. Se existir um ficheiro .IPL e um ERRO_<nome>.csv com o mesmo nome base, a importação desse ficheiro falhou. O conteúdo do CSV inclui: timestamp, nome do ficheiro, mensagem de erro e estado do CT32 (ex.: "CT32.LD FILE NOT FOUND").
  • Local: Ver local_data/importError/ e os ficheiros ERRO_*.csv no mesmo diretório.

4.2 Logs

  • AWS Lambda: Consultar CloudWatch Logs do grupo de log de cada Lambda (import e entries). Em falha, o handler regista exceções com logger.error(..., exc_info=True). Mensagens de erro também são adicionadas à lista errors e devolvidas no body da resposta (status 207 em caso de erros parciais).
  • Local: Saída no stdout/stderr do script; em caso de exceção, o script termina com código não zero e a mensagem é exibida.

4.3 Fila SQS

  • Mensagens que não forem processadas com sucesso pelo Lambda entries não são apagadas e podem voltar a ser entregues (retry). Após o número máximo de receções, podem ser enviadas para uma DLQ (Dead Letter Queue) se configurada no Terraform/console. Monitorizar a DLQ e a fila principal (mensagens em voo, mensagens disponíveis) no console AWS.

4.4 CT32 mestre

  • Se o CT32.LD não existir na chave CT32_MASTER_KEY, o import falha antes da fila entries.
  • Se o fundo do nome do IPL não existir no CT32, ou existir duplicado, o import falha com CSV em importError/.

5. Dependências e Execução Local

  • requirements.txt: boto3, requests, pydantic, python-dateutil, psycopg2-binary, pandas, numpy, python-dotenv, etc.
  • Execução: python scripts/test_local_import.py local_data/input/&lt;ficheiro&gt;.IPL (com ECOSIF_LOCAL_MODE=true e variáveis de API/DB definidas). Ver anotations/local_testing.md para passos completos.

Para layouts dos ficheiros e guia "O que fazer quando uma importação falha", ver user/visao_geral.md. Para fluxos e integração com moviments/masterdata, ver architecture/arquitetura.md.