Saltar para o conteúdo

Referência de regras

Um roteamento tem duas partes: General, com as opções de varredura e de log, e FileMatching, com a lista de regras. No modo banco de dados, o roteamento é mantido no Riversoft® Console Portal e pode ser exportado com -export. No modo arquivo local, é um arquivo JSON criado a partir do modelo example-config_rules.json.

{
  "General": { "Name": "ENTRADA", "ScanDir": "/caixa/IN", "LogLevelOnSuccess": 6, "LogLevelOnError": 1 },
  "FileMatching": [
    {
      "Index": 0,
      "Name": "NOTAS",
      "FileRegEx": "^NOTAS.*\\.TXT$",
      "General": { "SourceUser": "PARCEIRO", "WeekDayInterval": 127, "EndDateHour": 23, "EndDateMinute": 59, "EndDateSecond": 59 },
      "Filename": { "RenameFileTo": "" },
      "Copy": { "CopyToDir": "/caixa/OUT", "CopyFileOption": 13 },
      "Backup": { "BkpToDir": "/backup/notas", "BkpFileOption": 4 }
    }
  ]
}

Os campos de texto aceitam expressões regulares no padrão RE2. Os campos numéricos marcados como opções são somas de valores: para combinar opções, some os valores, por exemplo 1 + 4 + 8 = 13.

General do roteamento

CampoDescrição
Name, DescriptionNome e descrição do roteamento.
ScanDirDiretório da varredura. A opção -scan tem prioridade.
ScanSubDir0: somente o diretório; 1: somente os subdiretórios; 2: o diretório e os subdiretórios. As opções -nosubdir, -subdir e -subdir2 têm prioridade.
ScanDirRegEx, ScanDirRegExNegExpressões que incluem ou excluem diretórios da varredura.
ScanFileRegEx, ScanFileRegExNegExpressões que incluem ou excluem arquivos da varredura.
ScanFirstRuleNúmero (Index) da primeira regra avaliada. Padrão: 0.
ScanLockSemNome do semáforo que impede duas varreduras simultâneas com o mesmo nome.
ScanLockSemTimeoutTempo máximo de espera pelo semáforo, em milissegundos. -1 espera sem limite.
ScanLockSemOptionsOpções. 1: termina imediatamente se o semáforo estiver em uso.
LogErrorOptionOpções. 1: registra erro quando o arquivo não pode ser lido; 2: registra erro quando um diretório não pode ser lido.
LogLevelOnSuccess, LogLevelOnWarning, LogLevelOnInfo, LogLevelOnErrorNível das mensagens de sucesso, aviso, informação e erro das regras. Padrões: 6, 7, 7 e 1. Veja Níveis das mensagens.
ScanCheckFileInUse, DelayRetry, MaxRetriesMantidos para compatibilidade. Não são usados nesta versão.

Seleção do arquivo

Cada item de FileMatching é uma regra. As regras são avaliadas em ordem de Index, e vale a primeira que corresponder ao arquivo.

CampoDescrição
IndexNúmero da regra, a partir de 0, sem lacunas. Uma lacuna encerra a avaliação.
Name, DescriptionNome e descrição da regra. Disponíveis em $RULENAME e $DESCR.
Locked1 bloqueia a regra, que passa a ser ignorada.
FileRegExExpressão aplicada ao nome do arquivo.
DirRegExExpressão aplicada ao diretório do arquivo.
SrcRegExExpressão aplicada à origem informada em -src.
ContentRegExExpressão aplicada às primeiras linhas do arquivo. O número de linhas é definido em General.ContentLinesToRead.

Um campo vazio aceita qualquer valor.

Nota

Quando ContentRegEx está preenchido e o conteúdo não corresponde, o processamento do arquivo termina com erro, sem avaliar as regras seguintes. Use FileRegEx e DirRegEx para separar os arquivos antes de verificar o conteúdo.

General da regra

CampoDescrição
SourceUser, DestinationUserUsuários de origem e de destino associados à regra. Disponíveis em $SRCUSER e $DSTUSER e usados no registro das mensagens.
ExecProgBeforeComando executado antes da cópia.
ExecProgComando executado depois da cópia.
ExecProgErrorComando executado quando uma etapa falha.
CheckLockUnlockFileNameArquivo de controle conferido antes do processamento e removido no fim. Aceita variáveis.
CreateLockUnlockFileNameArquivo de controle criado durante o processamento. Aceita variáveis.
CheckLockUnlockOptionOpções dos arquivos de controle. Veja Arquivos de controle.
RemoveAfterCopy1 remove o arquivo original no fim do processamento.
RemoveAfterHoursCom RemoveAfterCopy, remove o original somente se ele tiver mais horas do que o valor informado. 0: remove sempre.
ProcessAfterSecondsIdade mínima do arquivo, desde a última modificação, para ser processado. O valor é interpretado em milissegundos. 0 desabilita.
InsertTimestampOpções. 1: acrescenta a data e hora no fim do nome; 2: acrescenta no início. O separador é ..
InsertTimestampPartOrigem da data e hora: 0, hora atual; 1, 2 ou 3, data de modificação do arquivo.
InsertTimestampFormatFormato da data e hora, escrito com a data de referência 2006-01-02 15:04:05. Exemplo: 20060102150405 gera AAAAMMDDhhmmss. Vazio: AAAAMMDDhhmmss0mmm.
DelayNextFileProcessPausa depois de processar o arquivo, em milissegundos.
StartDateHour, StartDateMinute, StartDateSecondInício do horário permitido.
EndDateHour, EndDateMinute, EndDateSecondFim do horário permitido.
WeekDayIntervalDias permitidos: some 1 (domingo), 2 (segunda), 4 (terça), 8 (quarta), 16 (quinta), 32 (sexta) e 64 (sábado). 127 ou 255: todos os dias.
FileLenOptionOpções. 1: confere o tamanho mínimo; 2: confere o tamanho máximo.
FileLenMin, FileLenMaxTamanhos mínimo e máximo, em bytes.
ReplaceFromFileOption1 habilita a montagem do nome a partir do conteúdo (Filename.ReplacesFromFile).
ContentLinesToReadNúmero de linhas lidas para ContentRegEx.
OtherOptionOpções. 2: reinicia o número sequencial a cada dia.
NextSectionNome da próxima regra a executar sobre o mesmo arquivo.
OverwriteMantido para compatibilidade. Para sobrescrever, use as opções de Copy e Backup.

Quando o arquivo está fora do horário, do dia, da idade ou do tamanho permitidos, o processamento termina com um aviso.

Novo nome (Filename)

O novo nome é montado nesta ordem:

  1. Parte de RenameFileTo. Vazio: o novo nome começa vazio e, se nada for acrescentado, o nome original é mantido.
  2. Aplica ReplacesFromFile, quando habilitado em ReplaceFromFileOption.
  3. Aplica Replaces, em ordem.
  4. Acrescenta a data e hora, conforme InsertTimestamp.
  5. Aplica ReplacesByRegEx, em ordem.

Replaces

Cada item copia um trecho de uma origem para o novo nome. As posições começam em 1.

CamposOrigem do trecho
ReplaceFileNamePosFrom, ReplaceFileNamePosTo, ReplaceFileNameLenNome original do arquivo.
ReplaceFileNameFromPathPosFrom, ReplaceFileNameFromPathPosTo, ReplaceFileNameFromPathLenDiretório original do arquivo.
VarReplaceFileNamePosFrom, VarReplaceFileNamePosTo, VarReplaceFileNameLen, VarReplaceFileNameValueValor fixo. O valor de -var0 substitui o do primeiro item, -var1 o do segundo, e assim por diante.
InsertTimestampPosFrom, InsertTimestampPosTo, InsertTimestampLenData e hora.
InsertSeqNumberTo, InsertSeqNumberLen, InsertSeqNumberMin, InsertSeqNumberMaxNúmero sequencial com zeros à esquerda, de Min a Max, que volta ao mínimo depois do máximo.
  • ...PosFrom: posição inicial do trecho na origem. 0: início.
  • ...PosTo: posição no novo nome onde o trecho é escrito, sobrepondo o que houver. 0 ou -1: acrescenta no fim.
  • ...Len: número de caracteres. 0 desabilita o item.

O último número sequencial usado é guardado no diretório applLockDir. InsertSeqNumberSeq é mantido para compatibilidade.

Exemplo: para o arquivo NF20261110.TXT, o item abaixo gera 20261110, copiando 8 caracteres a partir da posição 3:

{ "ReplaceFileNamePosFrom": 3, "ReplaceFileNamePosTo": -1, "ReplaceFileNameLen": 8 }

ReplacesFromFile

Copia para o novo nome um trecho da primeira linha do arquivo que corresponde à expressão.

CampoDescrição
ReplaceFromFileRegExExpressão que localiza a linha.
ReplaceFromFilePosFrom, ReplaceFromFilePosTo, ReplaceFromFileLenTrecho da linha copiado, com as mesmas regras de Replaces.
ReplaceFromFileNext1 continua lendo as linhas seguintes depois de encontrar esta.

ReplacesByRegEx

Substitui no novo nome cada ocorrência de RegExReplaceFrom por RegExReplaceTo. Use ${1}, ${2} para os grupos e ${0} para o trecho encontrado. Exemplo: "RegExReplaceFrom": "(?i)\\.txt$", "RegExReplaceTo": ".csv". RegExReplaceOcorr é mantido para compatibilidade.

Cópia (Copy)

CampoDescrição
CopyToDirDiretório de destino. Vazio: o diretório do arquivo original. A opção -copydir tem prioridade.
CopyFileOptionOpções da cópia. Veja a tabela abaixo.
ReplacesMonta o diretório de destino por posições, como em Filename.Replaces, com os campos PathReplace... (diretório original), PathReplaceFromFileName... (nome do arquivo), PathInsertTimestamp... (data e hora) e PathVarReplace... (valor fixo ou -var0 a -var9).
ReplacesByRegExSubstituições por expressão regular no diretório de destino.
CopyTempExtension, CopyFileRecSizeMantidos para compatibilidade. Não são usados nesta versão.
ValorOpção de CopyFileOption
1Executa a cópia. Sem esta opção, não há cópia.
4Cria o diretório de destino, se não existir.
8Move o arquivo em vez de copiar.
16Sobrescreve o arquivo de destino. Sem esta opção, a cópia falha se o destino existir.
64Insere CR antes de cada LF (formato Windows).
128Remove os caracteres CR (formato Linux).
512Converte o novo nome para minúsculas.
1024Converte o novo nome para maiúsculas.

Backup (Backup)

CampoDescrição
BkpToDirDiretório do backup. A opção -backupdir tem prioridade.
BkpFileOptionOpções do backup. 0: não há backup. Com qualquer outro valor, o backup é feito; informe também BkpToDir.
Replaces, ReplacesByRegExMontam o diretório do backup, como em Copy.
ValorOpção de BkpFileOption
1Usa o novo nome no backup. Sem esta opção, usa o nome original.
4Cria o diretório do backup, se não existir.
16Sobrescreve o backup existente.
32Faz o backup antes da cópia. Sem esta opção, o backup é feito depois da cópia.
64, 128Insere CR antes de LF ou remove CR.
256Acrescenta a data e hora no fim do nome do backup.

Arquivos de controle

Os arquivos de controle sinalizam a outros processos que um arquivo está em processamento ou pronto. Os nomes aceitam variáveis, por exemplo $PATHOLDNAME/$OLDNAME.lck.

ValorOpção de CheckLockUnlockOption
2Antes do processamento, exige que CheckLockUnlockFileName exista.
4Antes do comando ExecProgBefore, cria CreateLockUnlockFileName. Falha se ele já existir.
8Depois da cópia, cria CreateLockUnlockFileName.
16No fim, remove CreateLockUnlockFileName.
32No fim, remove CheckLockUnlockFileName.

Comandos externos

ExecProgBefore, ExecProg e ExecProgError recebem um comando com argumentos, por exemplo:

/usr/local/bin/notificar.sh "$FILENEWNAME" $SRCUSER $DSTUSER
  • As variáveis são substituídas antes da execução. Veja Referência de variáveis.
  • O comando é executado diretamente, sem um shell: use o caminho completo e, para redirecionamentos ou pipes, chame um script.
  • Argumentos entre aspas duplas ou simples são passados sem as aspas.
  • O Riversoft STCP Gemini Rename espera o fim do comando. Um código de saída diferente de 0 é tratado como falha.